如何检查获得的单应矩阵是否良好?

liz*_*isk 23 opencv image-processing computer-vision homography ransac

这个问题已被问到,但我仍然没有得到它.我通过cv::findHomography从一组点调用来获得单应矩阵.我需要检查它是否相关.
所提出的方法是计算内部的最大重投影误差并将其与阈值进行比较.但是经过这样的过滤后,我不断进行疯狂的变换,物体边界框转换成几乎一条直线或一些奇怪的非凸四边形,有自交叉等.
可以用什么约束来检查单应矩阵本身是否足够?

Dan*_*HsH 33

你的问题是数学的.给定3x3矩阵决定它是否代表良好的刚性转换.很难定义什么是"好",但这里有一些可以帮助你的线索

  1. Homography应保留多边形点的方向.设计一个简单的测试.点(0,0),(imwidth,0),(宽度,高度),(0,高度)表示具有顺时针排列点的四边形.在这些点上应用单应性并观察它们是否仍顺时针方向排列,如果它们逆时针方向,则单应性翻转(镜像)图像,有时仍然可以.但是,如果你的观点不合理,那么你就会出现"糟糕的单应性"
  2. 单应性不会过多地改变物体的比例.例如,如果您希望将图像缩小或放大最多X倍,请检查此规则.用单应性变换4点(0,0),(imwidth,0),(width-1,height),(0,height)并计算四边形的面积(opencv计算多边形面积的方法)区域太大(或太小),您可能有错误.
  3. 良好的单应性通常使用低的透视值.通常,如果图像的大小为~1000x1000像素,则这些值应为~0.005-0.001.高视角会导致巨大的扭曲,这可能是一个错误.如果您不知道这些值的位置,请阅读我的帖子: 尝试理解仿射变换 .它解释了仿射变换数学,其他2个值是透视参数.

我认为如果你检查上面的3个条件(条件2是最重要的),你将能够检测到大多数问题.祝好运