利用三角測量計算幀間特徵點的空間位置

2021-10-02 12:25:58 字數 1781 閱讀 1037

需要安裝opencv3中的features2d模組

**中的1.png

**中的2.png

// 來自高翔slam十四講

#include#include#include#include#includeusing namespace std;

using namespace cv;

void find_feature_matches(

const mat& img_1, const mat& img_2,

std::vector& keypoints_1,

std::vector& keypoints_2,

std::vector& matches);

void pose_estimation_2d2d(

std::vectorkeypoints_1,

std::vectorkeypoints_2,

std::vectormatches,

mat& r, mat& t);

// 畫素座標轉相機歸一化座標

point2d pixel2cam(const point2d& p, const mat& k);

// 三角測量

void triangulation(

const vector& keypoint_1,

const vector& keypoint_2,

const std::vector& matches,

const mat& r, const mat& t,

vector& points

);int main()

printf("--max dist : %f\n", max_dist);

printf("--min dist : %f \n", min_dist);

// 當描述子之間的距離大於兩倍的最小距離時,即認為匹配有誤

// 設定30為閾值

for(int i=0; i(0,2))/k.at(0,0),

(p.y - k.at(1,2))/k.at(1,1)

);}void pose_estimation_2d2d(std::vectorkeypoints_1,

std::vectorkeypoints_2,

std::vectormatches,

mat&r ,mat& t)

// 計算基礎矩陣:使用的8點法,但是書上說8點法是用來計算本質矩陣的呀,這兩個有什麼關係嗎

mat fundamental_matrix;

fundamental_matrix = findfundamentalmat(points1, points2, cv_fm_8point);

cout<<"fundamental_matrix is "<& keypoint_1,

const vector& keypoint_2,

const std::vector& matches,

const mat& r, const mat& t,

vector& points)

mat pts_4d;

cv::triangulatepoints(t1, t2, pts_1, pts_2, pts_4d);

// 轉換成非齊次座標

for(int i=0; i(3,0); // 歸一化

point3d p(

x.at(0,0),

x.at(1,0),

x.at(2,0)

);points.push_back(p);

}}

三角測量原理與雙目視覺景深恢復

眼睛是靈敏的光學感覺器官,是一切動物與外界聯絡的資訊接受器。眾所周知人類依靠雙眼可以感知現實世界 物體的顏色 距離 大小等。隨著生物解剖學的發展,人們對人眼的生物結構及機能有了科學的認識。人眼是乙個天然的高階光學系統。結構非常複雜。形象的說,人眼像一架自動攝像機,水晶體如同攝像機的物鏡,能夠在人的神...

從特徵點匹配到 ,通過三角測量估計三維點座標

include include include include include using namespace std using namespace cv void find feature matches const mat img 1,const mat img 2,std vector ke...

利用css畫三角

1 新建乙個元素,隨便什麼元素,不過我習慣性的會用塊元素來做。如果行內元素就display block它。2 把它的寬高設定為height 0px width 0px 3 設定邊框border屬性,用來實現三角形。首先要了解border具體是怎麼樣的,我寫了乙個這樣的樣式 border 50px s...