Mar*_*mos 6 opencv homography reprojection-error
我有一个平面标记,我运行SIFT算法来提取特征.然后我运行一个探测器在场景中找到这个标记并再次提取特征.我匹配点并使用OpenCV从匹配对中提取单应性findHomography()
.
现在,我想用计算的单应性投影在标记中检测到的2D点,以将位置与从场景测量的3D点进行比较,并计算重投影误差.我对像素坐标,厘米,校准矩阵感到困惑,我不知道我应该先做哪些转换.
有人知道这方面的链接还是可以解释方法?
如果你调用单应矩阵H,相机矩阵K(需要转换为像素)将是这样的,取决于你的分辨率.
Mat K= Mat::zeros(3,3,CV_32FC1);
K.at<float>(0,0)=500.0f;
K.at<float>(0,2)=320.0f; // width/2
K.at<float>(1,1)=500.0f;
K.at<float>(1,2)=240.0f; // height/2
K.at<float>(2,2)=1.0f;
Run Code Online (Sandbox Code Playgroud)
如果您的标记点是2D的矢量点:
vector<Point2f> marker_point; //containing coordinates in centimeters
Run Code Online (Sandbox Code Playgroud)
那么投影将是这样的,结果是像素坐标中的3D点.
Mat point(3,1,CV_32FC1);
point.at<float>(0) = marker_point.x;
point.at<float>(1) = marker_point.y;
point.at<float>(2) = 1.0f;
point = H* point;
point = point/point.at<float>(2); //Normalize
point = K* point; //to pixels
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
858 次 |
最近记录: |