这个问题在OpenCV函数findHomography
,getPerspectiveTransform
和getAffineTransform
上
findHomography
和getPerspectiveTransform
有什么区别?我从文档中得出的理解是getPerspectiveTransform
使用4种对应关系(这是计算单应性/透视变换的最低要求)来计算变换,即使提供了4种以上的对应关系(大概使用最小二乘),findHomography
也会计算出变换方法?)。这样对吗?
(在这种情况下,OpenCV仍继续支持getPerspectiveTransform的唯一原因应该是遗留的?)
findHomography
的用于计算仿射变换的代码?即使用最小二乘法或等效鲁棒方法进行计算和仿射变换的函数。根据文档,
getAffineTransform
仅接受3个对应关系(这是计算仿射变换所需的最小值)。 最好,
最佳答案
Q#1 :是的,findHomography试图找到两组点之间的最佳变换。它使用比最小二乘法更智能的方法称为RANSAC,它可以拒绝离群值-如果您的数据点中至少有50%+1可以,则RANSAC会尽力找到它们,并建立可靠的转换。
getPerspectiveTransform有很多有用的理由可以保留-它是findHomography的基础,并且在许多只有4个点并且知道它们是正确点的情况下很有用。 findHomography通常与自动检测到的点集一起使用-您可以找到许多点,但置信度较低。当您确定要确定4个角时,例如手动标记或自动检测矩形,getPerspectiveTransform很好。
Q#2 仿射变换没有等效项。您可以使用findHomography,因为仿射变换是单应性的子集。
关于c++ - findHomography,getPerspectiveTransform和getAffineTransform,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11237948/