我试图在图像中找到圆圈并将它们扭曲回规范视图(即就像看着中心一样)。然而,在透视变换下,圆形通常会投影为椭圆。所以我首先检测椭圆,大致执行以下操作(在 OpenCV 中):
1. Find contours in the image
2. Estimate area of contour
3. Fitting a bounded box to contour and estimating area by width/2 * height/2 * PI (area of ellipse)
4. checking if area of contour and estimated area of ellipse is < a threhsold
假设我通过这种方法找到了一个椭圆,我怎样才能将它纠正回圆形,以便我“撤消”透视变换(尽管不是在平面旋转中,因为我猜这是不可能完成的)。例如,如果它是一个矩形,我只需计算从直立矩形的 4 个角到检测到的投影角的单应性。
我不知道如何用椭圆来做到这一点,非常感谢任何帮助。
Thanks
圆确实通过透视变换变成了椭圆,但它的轴与初始圆的轴不同,如下图所示:
(source: brian-curtis.com http://www.brian-curtis.com/text/dfo_second_edition/PowerPoint/cirellipse%2024.png)
您可以参考这个链接 https://www.math.utah.edu/~treiberg/Perspect/Perspect.htm#circle进行详细演示。结果,椭圆的外接矩形并不是初始正方形通过透视变换的图像。
EDIT:
这意味着您观察到的椭圆的中心和轴并不是原始圆的中心和轴通过透视映射的图像。我试图做一个更清晰的说明:
在这张图像上,我用绿色绘制了透视变换后原始圆的轴和中心,用红色绘制了椭圆的轴和中心。在这个具体示例中,垂直轴不会因透视映射而变形,但在一般情况下会变形。因此,通过透视变换使圆变形会得到椭圆,但您看到的轴和中心不是原始圆的轴和中心。
因此,您不能简单地使用椭圆上的上、下、左、右点(红点,可以很容易地从椭圆中检测到)将它们映射到圆的上、下、左、右点因为它们在透视映射下不对应(绿点确实对应,但无法从椭圆中轻松检测到它们)。
最后,我认为根本不可能从单个检测到的椭圆估计透视映射。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)