我想计算两幅图像之间兴趣点的极线。我正在研究喷泉数据集,所以我有旋转和平移矩阵,以及相机矩阵。我目前使用Matlab来快速,但我的版本已经很老了(2009)。
我通过E = t * R计算基本矩阵,然后用l = E * P计算极线,其中P是兴趣点/兴趣点集。然后我得到一个有三行的向量,我猜是ax +的行参数+ c = 0。在右图像上绘制的极线是完全错误的,远离左图像上的点。任何想法???
编辑:已使用的数据集 - >喷泉基准,图像0000和0001 http://cvlabwww.epfl.ch/~strecha/multiview/denseMVS.html
输出:基本矩阵,例如对于点P1 = [433.36; 861.15; 1]
E =
0.761857065048902 1.969487475012598 40.418915885686594
-0.927781947178923 0.698934833377211 33.173562943087106
-45.044061511303227 -26.573128396975097 1.000000000000000
它有两个共轭的复特征值。
极线:1.0e + 004 *
0.206660143270238 0.023299771007641 -4.240274401559348
答案 0 :(得分:1)
最后我找到了解决问题的方法。我在这里发布以防其他人感兴趣。
要正确计算相对旋转和平移矩阵,必须使用Roto-Translation矩阵。该矩阵是每个图像的4x4矩阵。左上部分是旋转(世界坐标系),第4个子列是平移向量(wrt到世界坐标系),最后一行是[0 0 0 1]。因此,如果我们有2个这样的矩阵用于2个图像,则最终的旋转平移矩阵是Qright - > left = inv(Qright)* Qleft。从该矩阵中,我们提取相对平移(t)和旋转(R)(分别为第4子列和左上矩阵)。然后,我们创建了用于平移的偏斜对称矩阵T.对极矩阵是E = R * T.但这还不够。为了正确计算极线,必须找到基本矩阵F.对于给定的数据集,例如我使用的数据集,给出了相机矩阵K,这很容易:F = inv(Kright')* E * inv(Kleft),其中(')是转置的,inv是反转矩阵。然后,右图像的核线计算得到行= F * P,其中P是齐次坐标中的点。
谢谢!
答案 1 :(得分:0)
有很多可以在网上找到解释极线几何以及如何在立体图像中找到极线的文档。这是one。它体面地引导您完成不同的概念。我发现,这个主题的诀窍是跟踪变量,这些变量最终是矩阵变换和暗示(教授捷径)算法运算的结果。
我的建议是查看我提供的链接的第12页并将其应用到您的方案中。除了您提供的说明之外,没有任何数据可用,这是不可能的解决问题。
祝你好运。注意:很遗憾听到你的Matlab版本已经过时了。我知道2013年已经内置了这些功能,但我不确定2009年是否会这样做,因为MathWorks需要一个帐户来阅读旧文档。