E.Kruppa,“我的目标是我的个人目标
内部定位“Sitzungsberichte der Akademie der Wissenschaften,
Wien,Mathematisch Naturwissenschafttlichen Klasse,Abteilung IIa数学教授,
第122卷,第1939-1948页,1913年。你知道吗
Mat img_1_c = imread(filename1);
Mat img_2_c = imread(filename2); //each file should not have any color drawing inside
您可以手动编辑匹配点,例如带有中心点的4个角
vector<Point2f> points1, points2; //each topic have at least 5 point inside
最简单的方法是在OpenCV中使用特征检测路由(可选)
cvtColor(img_1_c, img_1, COLOR_BGR2GRAY);
cvtColor(img_2_c, img_2, COLOR_BGR2GRAY);
featureDetection(img_1, points1); //detect features in img_1
vector<uchar> status;
featureTracking(img_1,img_2,points1,points2, status); //track those features to img_2
double focal = XXXX;
cv::Point2d pp(XXXXX, XXxxx); // this should be around the center of image if it is too far away, check you calibration process
Mat E, R, t, mask;
E = findEssentialMat(points2, points1, focal, pp, RANSAC, 0.999, 1.0, mask);
recoverPose(E, points2, points1, R, t, focal, pp, mask);
R和t包含旋转和平移(不是真实世界的比例)。你知道吗
Mat Euler_vec;
Rodrigues(R,Euler_vec);
cout<<Euler_vec<<endl;
基础数学
假设你有两个二维图像,你希望找到它们之间的旋转。例如,第一个图像是前平行0度。第二个是你想找的角度。你知道吗
请从这里学习一些基本知识https://www.ifi.uzh.ch/dam/jcr:5759a719-55db-4930-8051-4cc534f812b1/VO_Part_I_Scaramuzza.pdf
它是从图像特征对应中捕捉二维到二维运动。数学太多了。我一点也不去。本质上,你在寻找一个基本矩阵,它是秩2,包含所有的旋转和平移向量
最小情况解决方案涉及五个2-D到2-D对应,如中所述
E.Kruppa,“我的目标是我的个人目标 内部定位“Sitzungsberichte der Akademie der Wissenschaften, Wien,Mathematisch Naturwissenschafttlichen Klasse,Abteilung IIa数学教授, 第122卷,第1939-1948页,1913年。你知道吗
更流行的方法是朗格特-希金斯的八点算法。超过8个对应的匹配点。你知道吗
只需列出匹配点如下所示
因为你可以先校准相机,再校准手柄,所以F可以直接用E代替。你知道吗
此外,你还必须通过在多视图几何书中的极线几何,如上图所示
如果你的相机是RGBD相机,那么你只需要3个点进行匹配,它叫3D到3D运动估计中的第一个环节。你知道吗
编码
假设你知道所有的数学背景。相应地安装opencv
假设您使用的图像位于img1和img2中。img 1是前平行线。图2是你想要找到的旋转角度。你知道吗
您可以手动编辑匹配点,例如带有中心点的4个角
最简单的方法是在OpenCV中使用特征检测路由(可选)
如果基线移动太大,你可以用探测器描述符匹配器的方式。(可选)
输入相机焦点和原理点从相机内部校准https://docs.opencv.org/2.4/doc/tutorials/calib3d/camera_calibration/camera_calibration.html
R和t包含旋转和平移(不是真实世界的比例)。你知道吗
那么Euler_vec应该包含你想要的角度。您要查找的值应该位于第一列或最后一列
相关问题 更多 >
编程相关推荐