繁体   English   中英

从同形异义分解中找到最合适的旋转和平移

[英]Finding most suitable Rotation and Translation from Homography decomposition

我正在尝试从同形异义函数中找到旋转和平移。 首先,我计算相应的特征点,然后使用findHomography()计算同形矩阵。 然后,使用decomposeHomographyMat() ,我得到了四个旋转和平移结果。

我使用的代码如下:

Mat frame_1, frame_2;


frame_1 = imread("img1.jpg", IMREAD_GRAYSCALE);
frame_2 = imread("img2.jpg", IMREAD_GRAYSCALE);

vector<KeyPoint> keypts_1, keypts_2;
Mat desc1, desc2;

Ptr<Feature2D> ORB = ORB::create(100    );
ORB->detectAndCompute(frame_1, noArray(), keypts_1, desc1);
ORB->detectAndCompute(frame_2, noArray(), keypts_2, desc2);

Ptr<DescriptorMatcher> matcher = DescriptorMatcher::create("BruteForce-Hamming");
vector<DMatch> matches;
matcher->match(desc1, desc2, matches);

vector<Point2f>leftPts, rightPts;
    for (size_t i = 0; i < matches.size(); i++)
    {
        //queryIdx is the left Image
        leftPts.push_back(keypts_1[matches[i].queryIdx].pt);

        //trainIdx is the right Image
        rightPts.push_back(keypts_2[matches[i].trainIdx].pt);
    }

Mat cameraMatrix = (Mat1d(3, 3) << 706.4034, 0, 277.2018, 0, 707.9991, 250.6182, 0, 0, 1);
Mat H = findHomography(leftPts, rightPts);
vector<Mat> R, t, n;
decomposeHomographyMat(H, cameraMatrix, R, t, n);

现在什么是正确的旋转和平移,至少最合适。 我什至使用以下函数检查了旋转是否有效,并发现所有旋转均有效。

bool isRotationMatrix(Mat &R)
{
    Mat Rt;
    transpose(R, Rt);
    Mat shouldBeIdentity = Rt * R;
    Mat I = Mat::eye(3, 3, shouldBeIdentity.type());

    return  norm(I, shouldBeIdentity) < 1e-6;
}

请有人建议我,我应该使用什么值。 并且,与基本矩阵分解情况不同,结果转换是否为可直接使用的缩放值? 如果有人可以指导我找到这个,我非常感谢。

感谢您!

我使用了Vaesper的函数'filterHomographyDecompByVisibleRefpoints'。 您可以在此处检查代码。

您只需要输入“旋转”矩阵,从decomposeHomographyMat获得的法线和用于获得同构矩阵的点对应关系。 上面的函数将返回2个可能的解决方案。 您可以在Ebya的答案中看到有关此想法的更多信息

在获得两种可能的解决方案之后,您将不得不根据情况以某种方式进行一些检查,以找到正确的解决方案。 由于我将单位矩阵用于相机矩阵,因此获得的转换值以像素为单位,需要使用某些外部传感器进行缩放。 在我的情况下,相机和平面物体之间的距离固定在z轴上,因此,我只计算了1个像素以世界单位表示的值。

并且,与基本矩阵分解情况不同,结果转换是否为可直接使用的缩放值?

las,不。

OpenCV实现的参考书Malis&Vargas在第8页上说了这一点:

请注意,转换估计为正标量因子

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM