红线是经过过滤的对应关系,而四边形说明了单应性如何扭曲透视图。
有时,但是,发生了许多坏情况,例如:
我已经有一个简单的例子了在RANSAC循环中进行测试。它制作一个简单的四边形(单位平方),并使用样本变换对其进行变换。然后查看变换是否保持其凸性。
但是仍然会出现一堆凹入的四边形。
您是否知道如何正确测试单应性
我发现一些代码可以测试三个变换点都不是共线的。但这似乎还不够,因为它不会过滤出三角肌和其他“无效”的四边形...
#1 楼
关于此主题有一篇有趣的论文:http://link.springer.com/chapter/10.1007%2F978-3-642-17691-3_19#
本文描述了一种方法在RANSAC算法中计算单应性之前先滤除一些错误的对应关系。
#2 楼
检查单应性是否存在问题。用于检查正确单应性的算法可能会使某人感兴趣,因此我将其记录在这里:
1)创建一个具有顶点坐标(在同构坐标中)的四边形$ ABDC $:
$$ \ begin {eqnarray} A:&(-w / 2,-h / 2,1.0)\\ B:&( w / 2,-h / 2,1.0)\\ C:&(-w / 2,h / 2,1.0)\\ D:&(w / 2,h / 2,1.0)\ end {eqnarray} $ $
其中$ w,h $分别是图像的宽度和高度。如果将整个图像帧(矩形)转换为凸四边形,则其中的任何凸四边形也将“整齐”转换。
2)创建转换后的四边形$ A'B'D'C使用计算的单应性对每个顶点进行变换的'$(例如$ C'= HC $)。从现在起,所有点都将转换为非均匀坐标。
3)计算矢量$ \ vec {u} $,$ \ vec {v} $用于对角线的参数表示:
$$ \ begin {eqnarray} d_ {1}:&A +(DA)s = A + \ vec {u} s \\ d_ {2}:&B +(CB)t = B + \ vec {v} t \ end {eqnarray} $$
对角线的交点来自$ d_ {1} = d_ {2} $:
$$ t = \ frac {1} {d} \ left [(B_ {y} -A_ {y})\ vec {u} _ {x}-(B_ {x} -A_ {x})\ vec {u} _ {y } \ right] $$
$$ s = \ frac {1} {d} \ left [(A_ {x} -B_ {x})\ vec {v} _ {y}- (A_ {y} -B_ {y})\ vec {v} _ {x} \ right] $$
然后凸四边形满足$ s,t \ in(0,1)$ 。
在实践中,可以引入一个模糊因子,不仅避免非凸和退化的四边形,而且还避免了近退化的四边形,例如当三个点接近共线时。因此可以修改测试,使$ s,t \ in(\ lambda,1.0- \ lambda)$,其中lambda是一个小数字(例如$ \ lambda = 0.01 $)。
较旧问题,已在上述算法中解决:
我在这里发现了问题-具有一定的单应性,该测试可以通过较小的四边形,但不能通过较大的四边形。这就是为什么某些“病态”单应通过的原因。
绿色方块代表原始图片,橙色方块代表变形的图片。如您所见,左手是凸起的,但随着光源的增大而开始变形:
最后甚至更大的光源产生的非收敛四边形: >
我在缩放时出错。同质坐标$(x,y,w)$中的点按$ x $和$ y $方向缩放,但按$ w $缩放。这就是为什么相同的变换产生不同的四边形的原因。
我已经对算法进行了相应的修正。
#3 楼
如果将单应性估计为$ x_i \ sim Hx_i ^'$,并且将模型误差计算为$ \ sum_ {j = 1 \ dots n} \ | x_j-Hx_j ^'\ | $,则在估计时可能会遇到问题飞机几乎是垂直的。您可以通过估计另一个单应性$ H ^'$使得$ x ^'= H ^'x $并将模型误差计算为$ \ sum_ {j = 1 \ dots n} \ | x_j-Hx_j ^'来提高鲁棒性。 \ | + \ | x_j ^'-H ^'x \ | $。请参阅Hartley and Zisserman-《计算机视觉的多视图几何》第4.2章,尤其是4.2.3和公式(4.8)。 >
评论
$ \ begingroup $
显示的四边形就放在其中。我确信对应关系非常好。我使用了Hartley&Zisserman建议的归一化DLT算法,然后使用了迭代优化和指导匹配。
$ \ endgroup $
– Libor
2012年4月10日在16:59
$ \ begingroup $
但是,单应性的拟合度可能不如第一个图片那样好,因为有两点:在公寓楼的点(可能在同一平面上)和在树上的点(可能在同一平面上)甚至不在他们自己小组的同一平面上)。您确定不是要使用基本矩阵吗?
$ \ endgroup $
–buq2
2012年10月10日17:10
$ \ begingroup $
线连接了相应的点,我检查了所有的点-对齐图像后,它们都汇合了。当我排除匹配不良的图像对时,会得到一个不错的全景。
$ \ endgroup $
– Libor
2012年4月10日17:17
$ \ begingroup $
图像是使用旋转的照相机拍摄的,因此平面似乎有所变化,但是由于照相机绕光学中心旋转,因此我很确定估计了单应性。我什至可以从中计算焦距和旋转矩阵。但是问题出在别的地方,我必须在我的软件中找到一个怪癖...
$ \ endgroup $
– Libor
2012-4-10 17:21
$ \ begingroup $
啊,您没有包括相机之间没有翻译的信息。然后您是对的,单应性描述了图像之间的转换。
$ \ endgroup $
–buq2
2012-4-10 17:32