使用OpenCV从单应性矩阵中估计距离和法向量

5
我正在匹配一个模板,从中我知道我的距离和法向量。
即,如果我的单应性矩阵是单位矩阵,那么我的相机距离为1.0米,我的法线为0。
现在我有第二张图像,在其中我成功地对齐了我的模板,并得到了一个单应性矩阵。
     [0.82072, 0.05685, 66.75024]
 H = [0.02006, 0.86092, 39.34907]
     [0.00003, 0.00017, 01.00000]

我也有我的相机矩阵。
OpenCV函数:
cv::decomposeHomographyMat()

为我提供旋转(3x3矩阵)、平移(3x1矩阵)和法向量(3x1矩阵)的4种解决方案。
cv::warpPerspective()

能够几乎完美地将相机当前视图映射到我的模板上。因此,应该有可能获得实际的缩放比例(模板到对齐)和法向量。
但是我无法弄清楚如何实际选择cv::decomposeHomographyMat()的正确解决方案,我错过了什么吗?
编辑:发布了“问题”没有问题...
2个回答

8

我明白了。

第一步:

我创建了一组在ROI中可以映射到我的模板的点(在ROI角落定义的区域内)。

第二步:

使用cv::decomposeHomographyMat()的所有解来扭曲ROI中的点(在我的所有测试和用例中,8个点就足够了)。

排除所有给出z值小于0的点3D(x, y, z)的解(即点在相机后面)。

第三步:

此时应该只剩下一到两个解。所有旋转矩阵应该相同,只有法线和平移矩阵应该不同。

平移矩阵应该验证:

Translation_Solution1 = -1* Translation_Solution2

然后将您的ROI区域与模板区域进行比较。 如果您的ROI区域小于模板,则意味着您的模板已经“缩小”,即您的相机在负值上进行了z轴平移。 否则,您的相机在正值上进行了z轴平移。

选择适当的解决方案。

我的错误是认为warpPerspective()实际上正在解决Homography分解问题,但它并不是。


这个分解过程在二维平面上能够得到绝对的翻译吗?如果您能给我展示一个示例工作,我将非常感激。谢谢! - Althaf
1
可以的话,请创建一个问题并链接它,评论不是一个好的地方。 - Ebya
我之前问过这个问题。非常感谢你的关注。这是我提出的链接:https://stackoverflow.com/questions/47264004/finding-most-suitable-rotation-and-translation-from-homography-decomposition - Althaf

2
在Faugeras O D和Lustman F的论文中,研究了分段平面环境中的运动和结构。该论文发表于1988年,第9页。点击此处查看原文,点击此处查看图片。

最好提供那篇论文中文本部分的文字表示(或者最相关部分的摘要)。比如,那些通过屏幕阅读器使用StackOverflow的人。 - Yunnosch
谢谢苏杰,这篇文章帮助我理解如何选择正确的解决方案。 - Alejandro Silvestri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接