c++ - 使用基本矩阵通过 OpenCV 计算坐标转换

标签 c++ opencv computer-vision linear-algebra

我正在尝试计算两个图像之间几个点的坐标对应关系。 我有一组已知对应关系的点,我将它们与 OpenCV 的 findFundamentalMatrix() 结合使用以找到基本矩阵。 我验证了每个点的 x^T * F * x' = (0),结果总是正确或非常接近。

问题是,现在我想使用第一张图像上的一个点的坐标 (y) 和基本矩阵 (F),以便找到第二张图片上的点的坐标 (y')。我首先考虑简单地使用上面的等式,但只给出 y' 点的 z,可以有 an infinity of solutions .

我还能如何使用基本矩阵来计算平移?

更清楚一点:知道“链接”两个投影的基本矩阵,我如何使用它来将任何已知点 (a, b, 1) 的坐标从第一个投影转换为第二个投影?

考虑到我们知道这个等式中的 abF:(a', b", 1)T * F * (a, b, 1) = (0)

我画了一个简单的图作为例子:http://i.imgur.com/drNr2.jpg .这个想法是在投影 2 中找到红点 (xq, yq) 的坐标,考虑到我们知道它在投影 1 中的坐标以及两个投影中所有其他点的坐标(以及其他一些那些作为找到基本矩阵的算法实际上至少需要8个点)

另一个精度:在我的例子中,已知点是共面的,但研究点不一定是。

我希望这能让我的问题更清楚 :)

最佳答案

基本矩阵将一个图像中的点转换为另一幅图像中的线。您能否详细说明一下

How else can I use the fundamental matrix to compute the translations?

请。通过示例告诉我们您想要实现的目标也会有所帮助。

编辑:如果您已校准相机,则可以根据基本矩阵F 计算基本矩阵E。 E 将一个图像中的一个点转换为另一个图像中的一个点。但当然,要求是有内部矩阵。如果 K 是内部矩阵 E=transpose(K)FK。 另一种方法是在另一个图像中找到一个点的对应线,然后沿着这条线搜索与第一个图像中该点周围的 block 在外观上最相似的 block 。还有其他一些方法,但确实需要有关问题的更多信息才能判断哪种方法适合您的情况。

编辑 2:在图中你得到的点是共面的。因此,单应性映射两个图像之间的点位置,并且不需要找到基本矩阵。 OpenCV 有一个估计单应性的函数,只需要四个点。

关于c++ - 使用基本矩阵通过 OpenCV 计算坐标转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10386382/

相关文章:

包含派生类型的基类的 C++ vector

c++ - QWidget::repaint:更新进度条时检测到递归重绘

python - 使用 OpenCV + Python 从 Elp H264 读取 H264 流

python - Opencv人脸识别器,通过python预测方法置信值为0

c++ - OpenCV findHomography 给出不准确的结果

C++ - 无法从队列中删除元素

C++通过随机选择它们的元素从两个元组制作元组

c++ - 在 Cygwin 上使用 CMake 编译 OpenCV 项目,为 Windows 安装 OpenCV

python - 寻找机器人导航的算法

python - 如何修复对象检测应用程序中的 ValueError?