如何检查获得的单应矩阵是否良好?
computer-vision
image-processing
opencv
6
0

这个问题已经被问到了 ,但我还是不明白。我通过从一组点调用cv::findHomography获得单应矩阵。我需要检查它是否相关。
所提出的方法是计算离群值的最大重投影误差,并将其与阈值进行比较。但是经过这样的过滤后,我不断地进行疯狂的变换,对象边界框变换为几乎直线或一些奇怪的非凸四边形,并带有自相交等。
可以使用哪些约束条件来检查单应矩阵本身是否足够?

参考资料:
Stack Overflow
收藏
评论
共 1 个回答
高赞 时间 活跃

您的问题是数学的。给定一个3x3的矩阵,请确定它是否代表良好的刚性变换。很难定义什么是“好”,但是这里有一些线索可以帮助您

  1. 全息图应保留多边形点的方向。设计一个简单的测试。点(0,0),(imwidth,0),(width,height),(0,height)代表四边形,点按顺时针排列。在这些点上应用单应性,如果它们变为逆时针,则查看它们是否仍按顺时针方向排列,您的单应性会翻转(镜像)图像,但有时仍然可以。但是,如果您的观点不正常,则说明您的“单应错误”
  2. 单应性不会太大地改变对象的比例。例如,如果您希望图像将图像缩小或放大最多X倍,则只需检查此规则即可。用单应性变换4个点(0,0),(imwidth,0),(width-1,height),(0,height)并计算四边形的面积(计算多边形面积的opencv方法)(如果比率)的区域太大(或太小),则可能出现错误。
  3. 好的单应性通常使用较低的透视值。通常,如果图像大小为〜1000x1000像素,则这些值应为〜0.005-0.001。高透视性将导致巨大的失真,这可能是一个错误。如果您不知道这些值位于何处,请阅读我的文章: 尝试了解Affine Transform 。它说明了仿射变换数学运算,其他两个值是透视参数。

我认为,如果您检查以上3个条件(条件2最重要),您将能够发现大多数问题。祝好运

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号