extremal 什么意思 opengl是什么工程師
distiance 什么意思?什么是協(xié)變量代數(shù)?量子力學(xué)與相對論統(tǒng)一的障礙是什么?weatherandclimateextremes中文是什么意思?openmvg是什么?openMVG是用來做什么的?
本文導(dǎo)航
distractions什么意思
是distance吧
1、距離、間距
2、遠處、遠方
什么叫變量的線性依存關(guān)系
復(fù)制了一大版沒回答到正題來,協(xié)變是張量分析上的,比如協(xié)變導(dǎo)數(shù)和協(xié)變微分.這東西在微分幾何和廣義相對論中大量的應(yīng)用.至于你說的協(xié)變量代數(shù),我想是不是張量代數(shù)的另外一種形式呢?
相對論和量子力學(xué)的意義
愛因斯坦最早注意到量子力學(xué)與相對論的不相容性。在1927年的第五屆索爾維會議上,愛因斯坦對剛剛建立的量子力學(xué)理論表示了不滿,他在反對意見中指出,如果量子力學(xué)是描述單次微觀物理過程的理論,則量子力學(xué)將違反相對論。1935年,在論證量子力學(xué)不完備性的EPR文章中,愛因斯坦再一次揭示了量子力學(xué)的完備性同相對論的定域性假設(shè)之間存在矛盾。在愛因斯坦看來,相對論無疑是正確的,而量子力學(xué)由于違反相對論必然是不正確的,或者至少是不完備的。
1964年,在愛因斯坦的EPR論證的基礎(chǔ)上,貝爾提出了著名的貝爾不等式,這一不等式進一步顯示了相對論所要求的定域性與量子力學(xué)之間的深刻矛盾,并提供了利用實驗來進行判決的可能性。根據(jù)貝爾的分析,如果量子力學(xué)是正確的,它必定是非定域的。利用貝爾不等式,人們進行了大量實驗來檢驗量子力學(xué)的正確性,其中最有說服力的是阿斯派克特等人于1982年所做的實驗,他們的實驗結(jié)果證實了量子力學(xué)的預(yù)言,并顯示了量子非定域性的客觀存在。
盡管量子非定域性的存在已經(jīng)為實驗所證實,然而,量子力學(xué)與相對論的不相容問題至今仍然沒有得到滿意的解決。根本原因在于,一方面,量子力學(xué)的理論基礎(chǔ)仍沒有堅實地建立起來,另一方面,量子力學(xué)所蘊含的非定域性又暗示了相對論的普適性將同樣受到懷疑。
weather是什么意思中文翻譯
天氣和極端氣候
openmv怎么使用
OpenMVG (open Multiple View Geometry):開源多視角立體幾何庫,這是一個cv屆處理多視角立體幾何的著名開源庫,信奉逗簡單,可維護地,提供了一套強大的接口,每個模塊都被測試過,盡力提供一致可靠的體驗。
地址:github
文檔:documents
openMVG能夠:
解決多視角立體幾何的精準匹配問題;
提供一系列SfM需要用到的特征提取和匹配方法;
完整的SfM工具鏈(校正,參估,重建,表面處理等);
openMVG盡力提供可讀性性強的代碼,方便開發(fā)者二次開發(fā),核心功能是盡量精簡的,所以你可能需要其它庫來完善你的系統(tǒng)。openMVG分成了幾個大的模塊:
核心庫:各個功能的核心算法實現(xiàn);
樣例:教你怎么用;
工具鏈:也就是連起來用咯(亂序圖像集的特征匹配,SfM,處理色彩和紋理);
#0. 安裝(win10+VS2013)
第一步當然是從github clone代碼,然后按照 BUILD 說明操作,需要注意的是:
template <class T> inline T operator|(T x, T y){
return static_cast<T>(static_cast<int>(x) | static_cast<int>(y));
};
建議和opencv一起編譯,方法是在CMakeLists.txt文件中修改相應(yīng)選項為 ON,然后在cmake的GUI中添加一個叫OpenCV_DIR的入口,值就是你已經(jīng)安裝好的opencv的路徑。
openMVG寫的非常不錯,對Windows也提供了良好的支持,所以cmake之后用VS打開生成的openMVG.sln解決方案就可以進行編譯了,編譯的時間稍久。我用的VS2013不支持C++新特性:constexpr,所以建議你使用VS2015或更新版本,如果一定要用VS2013,可以這樣做:在src/openMVG/cameras/Camera_Common.hpp文件中將有constexpr的地方直接去掉,或者改成模板函數(shù)也是可以的:
運行樣例,這里遇到一個坑:DenseStoraage.h line 86報錯:R6010 Assertion failed,這是一個斷言錯誤,在release模式下不會出現(xiàn),但在debug模式下幾乎是必現(xiàn)。原因嘛,打開Eigen給出的網(wǎng)址可以明確:數(shù)據(jù)結(jié)構(gòu)未對齊(unaligned arrays)。這個問題對于剛接觸openMVG的人來說還是很煩人的,openMVG代碼很優(yōu)雅,很多數(shù)據(jù)類型都是從模板類或函數(shù)延伸,通過虛函數(shù)擴展各項具體方法,而且非常強烈的依賴Eigen這個庫,所以給定位問題帶來了阻礙。經(jīng)過一天的攻堅,最后大概確認了原因:
regions.h這個文件中定義的Regions類包含了fixed-size vectorizable Eigen types的stl容器vector,按照Eigen提供的解決方法,需要做的是:
//原來
typedef std::vector<FeatureT> FeatsT;
//改成
typedef std::vector<FeatureT, Eigen::aligned_allocator<FeatureT>> FeatsT;
//其它類似的地方都要改,包括返回vector的函數(shù),最好也加上 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
#1. 核心庫
#1.1 圖像
#Image Container
openMVG提供一個基本的類用作圖像容器:Image<T>,T代表像素類型,這個類可以處理灰度,RGB,RGBA或者自定義類型的圖像。用法很簡單:
// A 8-bit gray image:
Image<unsigned char> grayscale_image_8bit;
// Multichannel image: (use pre-defined pixel type)
// A 8-bit RGB image:
Image<RGBColor> rgb_image_8bit;
// 8-bit RGBA image
Image<RGBAColor> rgba_image_8bit;
Image<Rgba<unsigned char> > rgba_image2_8bit;
這里的 RGBColor,RGBAColor等是openMVG基于Eigen定義好的類型,具體是定義在pixel_types.hpp中。
#Image I/O
openMVG支持ppm/pgm,jpeg,png,tiff格式的圖片文件,例子:
Image<RGBColor> rgb_image_gray;
bool bRet = ReadImage("Foo.imgExtension", &rgb_image);
#Drawing operations
用于在圖像上畫圓,橢圓,直線等。
#1.2 數(shù)值
openMVG重新包裝了Eigen的基本類型和算法,以便更簡單的調(diào)用。比如 Vec2代表一個二維點(char型)。
#1.3 特征
這個模塊主要是提供特征容器的封裝,包括特征,特征描述,關(guān)鍵點集等,基本都是模板類,比如頂一個sift特征描述子可以這樣做:
// SIFT like descriptor
typedef Descriptor<float, 128> siftDescriptorData;
#1.4 相機
此模塊提供不同的相機模型的抽象類,包括:
#小孔相機模型
最簡單的相機模型,如圖: 相機模型包括內(nèi)參和外參,關(guān)鍵詞也就是大家熟悉的幾樣:投影矩陣,旋轉(zhuǎn)、平移矩陣,焦距、主點等,具體參見說明。 看一個例子:openMVG提供的PinholeCamera類:
/// Pinhole camera P = K[R|t], t = -RC
struct PinholeCamera
{
//構(gòu)造函數(shù)
PinholeCamera(
const Mat3 & K = Mat3::Identity(),
const Mat3 & R = Mat3::Identity(),
const Vec3 & t = Vec3::Zero())
: _K(K), _R(R), _t(t)
{
_C = -R.transpose() * t;
P_From_KRt(_K, _R, _t, &_P);
}
PinholeCamera(const Mat34 & P)
{
_P = P;
KRt_From_P(_P, &_K, &_R, &_t);
_C = -_R.transpose() * _t;
}
/// Projection matrix P = K[R|t]
Mat34 _P;
/// Intrinsic parameter (Focal, principal point)
Mat3 _K;
/// Extrinsic Rotation
Mat3 _R;
/// Extrinsic translation
Vec3 _t;
/// Camera center
Vec3 _C;
};
#1.5 多視角幾何
這部分是比較基礎(chǔ)和重要的模塊之一,包括了:
多視角集幾何中n(>=2)視角的求解算法;
將這些求解算法綜合起來以便進行魯棒估計的通用框架——Kernel;
文檔中講解了單應(yīng)矩陣,本征矩陣,本質(zhì)矩陣,位置矩陣等的概念,講得非常好,建議仔細閱讀文檔。 簡單的解釋一下:
單應(yīng)矩陣:描述兩個投影平面之間的關(guān)系;
本征矩陣:同一個場景在兩個相機成像下的關(guān)系,也就是物體上的點A在兩個視角下成像位置的關(guān)系;
本質(zhì)矩陣:基于本征矩陣和內(nèi)參矩陣建立,描述相機和本征矩陣位置之間的相對關(guān)系;
位置矩陣:估計相機的絕對位置(被轉(zhuǎn)化為一個最小化問題求解);
Kernel:一個將求解器、數(shù)據(jù)、度量方案等結(jié)合起來的類,這個類將用于魯棒的估計以上的參數(shù)和矩陣;
#1.6 線性規(guī)劃
一個用于求解多視角幾何中線性優(yōu)化(參數(shù)估計)的工具集,文檔。
#1.7 魯棒估計
提供一些列魯棒估計方法,比如:Max-Consensus,Max-Consensus,AC-Ransac A Contrario Ransac等。
#1.7 匹配
提供的接口包括:NNS,K-NN,F(xiàn)LANN,KVLD,Cascade hashing Nearest Neighbor等。這些接口可用于在二維或三維點集,以及更高維的特征描述集中。
#1.8 追蹤
多視幾何里的追蹤是指在一系列的圖片中找到對應(yīng)的特征點(同一點在不同視角下的位置)。
#1.9 sfm
openMVG提供的sfm模塊包含了處理SfM問題的一系列方法個數(shù)據(jù)存儲接口,例如相機位置估計,結(jié)構(gòu)測量,BA等。 SfM_Data類包含了SfM所有的輸入:
struct SfM_Data
{
/// Considered views
Views views; // 包含圖像文件名,id_view,id_pose,id_intrinsic,image size。
/// Considered poses (indexed by view.id_pose)
Poses poses; // 相機的三維位置
/// Considered camera intrinsics (indexed by view.id_cam)
Intrinsics intrinsics; // 相機內(nèi)參
/// Structure (3D points with their 2D observations)
Landmarks structure; // 二維視圖特征關(guān)聯(lián)的3D點
}
下面是例子:
#1. features_siftPutativeMatches
這個樣例做了這么幾件事(直接翻譯官方):
分別提取兩張圖像的SIFT特征(使用非免費的vlsift)并形成特征描述;
根據(jù)特征描述子匹配兩張圖像上的特征點(BRUTE_FORCE_L2方法);
展示匹配結(jié)果;
剛開始的時候會遇到Assertion failed斷言錯誤,處理辦法見上一篇文章。運行成功項目目錄下會生成三個文件:00_images.jpg,01_features.jpg,02_siftMatches.svg。
#2. features_affine_demo
這個例子是圖像MSER(參考)和TBMR特征提取的樣例,MSER(Maximally Stable Extremal Regions)最大極值穩(wěn)定區(qū)域是一種對圖像灰度具有仿射變換不變性,也許也是這個樣例起名的原因。TBMR(tree-based Morse regions)這個算法不是特別了解,具體可以在google學(xué)術(shù)中搜索。
#3. features_image_matching
這個樣例給出了利用Image_describer接口提取特征描述子,并匹配和顯示結(jié)果的樣例。示例中可以選擇SIFT,AKAZE_MLDB或者AKAZE算法,AKAZE介紹可看這里,是一種比SIFT更穩(wěn)定的特征檢測算法。程序中關(guān)于解析輸入?yún)?shù)的部分可以注釋掉(如果你是用過VS2013 debug),直接修改sImage_describer_type這個值以測試。
#4. features_kvld_filter 和 features_repeatability
這兩個也是關(guān)于特征提取和匹配的,kvld這個例子中由于之前更改了regions.h中的內(nèi)容,所以有些函數(shù)接口也要做相應(yīng)改變,具體也是在vector中增加對齊函數(shù)選項。
#5. multiview_robust_homography_guided 和 multiview_robust_fundamental_guided
這兩個樣例是估計單應(yīng)矩陣和本征矩陣的,并且能夠根據(jù)這些信息反過來確定匹配點。兩個樣例運行時間都很長(分辨率教大時),第一個在用另外的照片時還遇到報錯,大概是在DoG時出錯,具體也沒有細究了·····
#6. exif_Parsing
提取EXIF信息,編譯后通過命令行執(zhí)行,給出的參數(shù)格式:--imafile 你的照片路徑,路徑中使用/斜杠。
另一篇:learn openMVG-安裝和簡介
#7. multiview_robust_essential
估計本質(zhì)矩陣并計算3D結(jié)構(gòu)。這個例子可以直接運行,生成的點云十分稀疏且不帶顏色信息。
opengl是什么工程師
OpenMVG (open Multiple View Geometry):開源多視角立體幾何庫,這是一個cv屆處理多視角立體幾何的著名開源庫,信奉逗簡單,可維護地,提供了一套強大的接口,每個模塊都被測試過,盡力提供一致可靠的體驗。
地址:github
文檔:documents
openMVG能夠:
解決多視角立體幾何的精準匹配問題;
提供一系列SfM需要用到的特征提取和匹配方法;
完整的SfM工具鏈(校正,參估,重建,表面處理等);
openMVG盡力提供可讀性性強的代碼,方便開發(fā)者二次開發(fā),核心功能是盡量精簡的,所以你可能需要其它庫來完善你的系統(tǒng)。openMVG分成了幾個大的模塊:
核心庫:各個功能的核心算法實現(xiàn);
樣例:教你怎么用;
工具鏈:也就是連起來用咯(亂序圖像集的特征匹配,SfM,處理色彩和紋理);
#0. 安裝(win10+VS2013)
第一步當然是從github clone代碼,然后按照 BUILD 說明操作,需要注意的是:
template <class T> inline T operator|(T x, T y){
return static_cast<T>(static_cast<int>(x) | static_cast<int>(y));
};
建議和opencv一起編譯,方法是在CMakeLists.txt文件中修改相應(yīng)選項為 ON,然后在cmake的GUI中添加一個叫OpenCV_DIR的入口,值就是你已經(jīng)安裝好的opencv的路徑。
openMVG寫的非常不錯,對Windows也提供了良好的支持,所以cmake之后用VS打開生成的openMVG.sln解決方案就可以進行編譯了,編譯的時間稍久。我用的VS2013不支持C++新特性:constexpr,所以建議你使用VS2015或更新版本,如果一定要用VS2013,可以這樣做:在src/openMVG/cameras/Camera_Common.hpp文件中將有constexpr的地方直接去掉,或者改成模板函數(shù)也是可以的:
運行樣例,這里遇到一個坑:DenseStoraage.h line 86報錯:R6010 Assertion failed,這是一個斷言錯誤,在release模式下不會出現(xiàn),但在debug模式下幾乎是必現(xiàn)。原因嘛,打開Eigen給出的網(wǎng)址可以明確:數(shù)據(jù)結(jié)構(gòu)未對齊(unaligned arrays)。這個問題對于剛接觸openMVG的人來說還是很煩人的,openMVG代碼很優(yōu)雅,很多數(shù)據(jù)類型都是從模板類或函數(shù)延伸,通過虛函數(shù)擴展各項具體方法,而且非常強烈的依賴Eigen這個庫,所以給定位問題帶來了阻礙。經(jīng)過一天的攻堅,最后大概確認了原因:
regions.h這個文件中定義的Regions類包含了fixed-size vectorizable Eigen types的stl容器vector,按照Eigen提供的解決方法,需要做的是:
//原來
typedef std::vector<FeatureT> FeatsT;
//改成
typedef std::vector<FeatureT, Eigen::aligned_allocator<FeatureT>> FeatsT;
//其它類似的地方都要改,包括返回vector的函數(shù),最好也加上 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
#1. 核心庫
#1.1 圖像
#Image Container
openMVG提供一個基本的類用作圖像容器:Image<T>,T代表像素類型,這個類可以處理灰度,RGB,RGBA或者自定義類型的圖像。用法很簡單:
// A 8-bit gray image:
Image<unsigned char> grayscale_image_8bit;
// Multichannel image: (use pre-defined pixel type)
// A 8-bit RGB image:
Image<RGBColor> rgb_image_8bit;
// 8-bit RGBA image
Image<RGBAColor> rgba_image_8bit;
Image<Rgba<unsigned char> > rgba_image2_8bit;
這里的 RGBColor,RGBAColor等是openMVG基于Eigen定義好的類型,具體是定義在pixel_types.hpp中。
#Image I/O
openMVG支持ppm/pgm,jpeg,png,tiff格式的圖片文件,例子:
Image<RGBColor> rgb_image_gray;
bool bRet = ReadImage("Foo.imgExtension", &rgb_image);
#Drawing operations
用于在圖像上畫圓,橢圓,直線等。
#1.2 數(shù)值
openMVG重新包裝了Eigen的基本類型和算法,以便更簡單的調(diào)用。比如 Vec2代表一個二維點(char型)。
#1.3 特征
這個模塊主要是提供特征容器的封裝,包括特征,特征描述,關(guān)鍵點集等,基本都是模板類,比如頂一個sift特征描述子可以這樣做:
// SIFT like descriptor
typedef Descriptor<float, 128> siftDescriptorData;
#1.4 相機
此模塊提供不同的相機模型的抽象類,包括:
#小孔相機模型
最簡單的相機模型,如圖: 相機模型包括內(nèi)參和外參,關(guān)鍵詞也就是大家熟悉的幾樣:投影矩陣,旋轉(zhuǎn)、平移矩陣,焦距、主點等,具體參見說明。 看一個例子:openMVG提供的PinholeCamera類:
/// Pinhole camera P = K[R|t], t = -RC
struct PinholeCamera
{
//構(gòu)造函數(shù)
PinholeCamera(
const Mat3 & K = Mat3::Identity(),
const Mat3 & R = Mat3::Identity(),
const Vec3 & t = Vec3::Zero())
: _K(K), _R(R), _t(t)
{
_C = -R.transpose() * t;
P_From_KRt(_K, _R, _t, &_P);
}
PinholeCamera(const Mat34 & P)
{
_P = P;
KRt_From_P(_P, &_K, &_R, &_t);
_C = -_R.transpose() * _t;
}
/// Projection matrix P = K[R|t]
Mat34 _P;
/// Intrinsic parameter (Focal, principal point)
Mat3 _K;
/// Extrinsic Rotation
Mat3 _R;
/// Extrinsic translation
Vec3 _t;
/// Camera center
Vec3 _C;
};
#1.5 多視角幾何
這部分是比較基礎(chǔ)和重要的模塊之一,包括了:
多視角集幾何中n(>=2)視角的求解算法;
將這些求解算法綜合起來以便進行魯棒估計的通用框架——Kernel;
文檔中講解了單應(yīng)矩陣,本征矩陣,本質(zhì)矩陣,位置矩陣等的概念,講得非常好,建議仔細閱讀文檔。 簡單的解釋一下:
單應(yīng)矩陣:描述兩個投影平面之間的關(guān)系;
本征矩陣:同一個場景在兩個相機成像下的關(guān)系,也就是物體上的點A在兩個視角下成像位置的關(guān)系;
本質(zhì)矩陣:基于本征矩陣和內(nèi)參矩陣建立,描述相機和本征矩陣位置之間的相對關(guān)系;
位置矩陣:估計相機的絕對位置(被轉(zhuǎn)化為一個最小化問題求解);
Kernel:一個將求解器、數(shù)據(jù)、度量方案等結(jié)合起來的類,這個類將用于魯棒的估計以上的參數(shù)和矩陣;
#1.6 線性規(guī)劃
一個用于求解多視角幾何中線性優(yōu)化(參數(shù)估計)的工具集,文檔。
#1.7 魯棒估計
提供一些列魯棒估計方法,比如:Max-Consensus,Max-Consensus,AC-Ransac A Contrario Ransac等。
#1.7 匹配
提供的接口包括:NNS,K-NN,F(xiàn)LANN,KVLD,Cascade hashing Nearest Neighbor等。這些接口可用于在二維或三維點集,以及更高維的特征描述集中。
#1.8 追蹤
多視幾何里的追蹤是指在一系列的圖片中找到對應(yīng)的特征點(同一點在不同視角下的位置)。
#1.9 sfm
openMVG提供的sfm模塊包含了處理SfM問題的一系列方法個數(shù)據(jù)存儲接口,例如相機位置估計,結(jié)構(gòu)測量,BA等。 SfM_Data類包含了SfM所有的輸入:
struct SfM_Data
{
/// Considered views
Views views; // 包含圖像文件名,id_view,id_pose,id_intrinsic,image size。
/// Considered poses (indexed by view.id_pose)
Poses poses; // 相機的三維位置
/// Considered camera intrinsics (indexed by view.id_cam)
Intrinsics intrinsics; // 相機內(nèi)參
/// Structure (3D points with their 2D observations)
Landmarks structure; // 二維視圖特征關(guān)聯(lián)的3D點
}
下面是例子:
#1. features_siftPutativeMatches
這個樣例做了這么幾件事(直接翻譯官方):
分別提取兩張圖像的SIFT特征(使用非免費的vlsift)并形成特征描述;
根據(jù)特征描述子匹配兩張圖像上的特征點(BRUTE_FORCE_L2方法);
展示匹配結(jié)果;
剛開始的時候會遇到Assertion failed斷言錯誤,處理辦法見上一篇文章。運行成功項目目錄下會生成三個文件:00_images.jpg,01_features.jpg,02_siftMatches.svg。
#2. features_affine_demo
這個例子是圖像MSER(參考)和TBMR特征提取的樣例,MSER(Maximally Stable Extremal Regions)最大極值穩(wěn)定區(qū)域是一種對圖像灰度具有仿射變換不變性,也許也是這個樣例起名的原因。TBMR(tree-based Morse regions)這個算法不是特別了解,具體可以在google學(xué)術(shù)中搜索。
#3. features_image_matching
這個樣例給出了利用Image_describer接口提取特征描述子,并匹配和顯示結(jié)果的樣例。示例中可以選擇SIFT,AKAZE_MLDB或者AKAZE算法,AKAZE介紹可看這里,是一種比SIFT更穩(wěn)定的特征檢測算法。程序中關(guān)于解析輸入?yún)?shù)的部分可以注釋掉(如果你是用過VS2013 debug),直接修改sImage_describer_type這個值以測試。
#4. features_kvld_filter 和 features_repeatability
這兩個也是關(guān)于特征提取和匹配的,kvld這個例子中由于之前更改了regions.h中的內(nèi)容,所以有些函數(shù)接口也要做相應(yīng)改變,具體也是在vector中增加對齊函數(shù)選項。
#5. multiview_robust_homography_guided 和 multiview_robust_fundamental_guided
這兩個樣例是估計單應(yīng)矩陣和本征矩陣的,并且能夠根據(jù)這些信息反過來確定匹配點。兩個樣例運行時間都很長(分辨率教大時),第一個在用另外的照片時還遇到報錯,大概是在DoG時出錯,具體也沒有細究了·····
#6. exif_Parsing
提取EXIF信息,編譯后通過命令行執(zhí)行,給出的參數(shù)格式:--imafile 你的照片路徑,路徑中使用/斜杠。
另一篇:learn openMVG-安裝和簡介
#7. multiview_robust_essential
估計本質(zhì)矩陣并計算3D結(jié)構(gòu)。這個例子可以直接運行,生成的點云十分稀疏且不帶顏色信息。
掃描二維碼推送至手機訪問。
版權(quán)聲明:本文由尚恩教育網(wǎng)發(fā)布,如需轉(zhuǎn)載請注明出處。