[英]Use fundamental matrix to compute coordinates translation using OpenCV
我正在尝试计算两个图像之间几个点的坐标对应关系。 我有一组点的对应关系是已知的,我将它们与 OpenCV 的findFundamentalMatrix()
一起使用以找到基本矩阵。 我验证了每个点的x^T * F * x' = (0)
,结果总是正确或非常接近。
问题是,现在我想使用第一个图像 ( y
) 上一个点的坐标和基本矩阵 ( F
) 来找到第二个图像 ( y'
) 上该点的坐标。 我首先想到的是简单地使用上面的等式,但仅给定y'
点的z
,可以有无穷多个解。
我还能如何使用基本矩阵来计算翻译?
更清楚地说:知道“链接”两个投影的基本矩阵,我如何使用它来将任何已知点(a, b, 1)
的坐标从第一个投影转换为第二个投影?
考虑到我们在这个等式中知道a
, b
和F
: (a', b", 1) T * F * (a, b, 1) = (0)
我做了一个简单的绘图作为例子: http : //i.imgur.com/drNr2.jpg 。 这个想法是在投影 2 中找到红点(xq, yq)
的坐标,考虑到我们知道它在投影 1 中的坐标以及两个投影中所有其他点的坐标(以及其他一些作为找到基本矩阵实际上至少需要8个点)
另一个精度:在我的例子中,已知点是共面的,但研究点不一定是共面的。
我希望这让我的问题更清楚:)
基本矩阵将一个图像中的点转换为另一图像中的线。 你能详细说明一下吗
我还能如何使用基本矩阵来计算翻译?
请。 用一个例子告诉我们你想要实现的目标也会有所帮助。
编辑:如果您已经校准了相机,您可以从基本矩阵F
计算基本矩阵E
。 E 将一个图像中的一个点转换为另一个图像中的一个点。 但当然,要求是有内部矩阵。 如果K
是内部矩阵E=transpose(K)FK
。 另一种方法是在另一幅图像中找到一个点的对应线,然后沿着这条线搜索与第一个图像中点周围的块在外观上最相似的块。 还有一些其他方法,但确实需要有关问题的更多信息才能确定哪种方法适合您的情况。
编辑 2 :在绘图中你得到的点是共面的。 因此,单应映射两个图像之间的点位置,并且不需要找到基本矩阵。 OpenCV有一个估计单应性的功能,只需要四个点。
鉴于:
图 1 中的点对应a 。
目标:
找到位于图像 2 中所谓的极线L
上的对应点b 。
如何?
| x0 | | x1 |
a = | y0 | , b = | y1 |
| 1 | | 1 |
L = F * a
|F00 F01 F02|
F = |F10 F11 F12|
|F20 F21 F22|
必须满足以下等式才能获得图像 2 中的b :
a' * F * b = 0
。
注意: a' = transpose(a)
。
出于某种原因,由于缺乏声誉,我无法添加评论。 我已经研究了这个领域大约一个月了,希望我能回答很多悬而未决的问题,这些问题在我研究这个主题时也让我感到困惑。
@M2X 基本矩阵是从图像平面 1 中的点到图像平面 2 中的线的映射。这些线是一种特殊类型的线,称为极线,由图像平面与由2 个摄像机的原点和 3D 点。 因此,除非您有一些附加信息或约束,否则无法使用基本矩阵确定点-点映射。
@Jukurrpa 单应性是点对点映射,使得平行线映射到平行线。 可以证明这种映射是线性的,那么由于线性映射等效于矩阵,单应性可以由矩阵定义。 位于投影到图像平面的平面上的一组 3D 点将平行线映射到平行线,因此单应性适用于您的情况。 书中概述了从给定的一组点估计同形异义词的方法(计算机视觉中的多视图几何)。 给定两个图像中的对应点,您可以使用迭代方法(梯度下降)或封闭形式解决方案(奇异值分解)找到单应性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.