使用OpenCV,我可以计算这两个图像之间的单应性:







不用担心右侧的白色奇怪形状,这是由于我使用的智能手机支架所致。由findHomography()函数提供的单应性(使用通过快速特征检测器和HammingLUT描述符匹配器检测到的点)为:

A = [ 1.412817430564191,  0.0684947165270289,  -517.7751355800591;
     -0.002927297251810,  1.210310757993256,     39.56631316477566;
      0.000290600259844, -9.348301989015293e-05,  1]


现在,我使用相同的使用imagemagick来计算已旋转180度(上下)的同一图像之间的单应性的过程(事实上,我同样有兴趣知道90度或270度旋转的关系...) 。它们是:







利用这些图像,单应性变为:

B = [ 0.7148688519736168,  0.01978048500375845,  325.8330631554814;
     -0.1706219498833541,  0.8666521745094313,    64.72944905752504;
     -0.0002078857275647, -5.080048486810413e-05,  1]


现在,问题是您如何关联A和B? A的两个第一个对角线值接近B中的两个对角线值,但不是很精确(.707805537而不是0.71486885)。我的最终目的是使用所需的关系来转换最终矩阵,从而避免计算代价高昂的图像旋转。

#1 楼

在查看单应矩阵的公式时,我认为:
$$
H_ {ba} = R-\ frac {tn ^ T} {d}
$$
其中$ R $是旋转矩阵,相对于$ a $旋转$ b $; $ t $是从$ a $到$ b $的转换向量; $ n $和$ d $分别是平面的法线向量和到平面的距离(请参见Homography-3D平面到平面方程)。

两个矩阵之间的关系在于法线平面的向量。因此,您需要获取平面的法线向量(在单应性矩阵之外),并对其应用旋转,然后使用上述公式计算单应性矩阵。为使单应性矩阵正确分解,可以查看这些代码示例和本文。

评论


$ \ begingroup $
我真的不明白你的意思。从等式中,我得到了Mat invT = 1./t的法线; Mat n = invT.t()*(H-R); (实际上是n / d)。现在,“对其施加旋转”会给我一个3x1向量,但是如何使用它来再次计算单应矩阵呢?谢谢
$ \ endgroup $
–StéphanePéchard
2012年3月28日在7:42

$ \ begingroup $
添加了更多信息,希望可以弄清楚。
$ \ endgroup $
– Geerten
2012年3月28日在9:16

$ \ begingroup $
为什么是-t / d而不是+ t / d?
$ \ endgroup $
– Maystro
15年6月23日在13:45