我试图在图像中找到圆圈并将它们扭曲回规范视图(即好像在看中心)。但是,圆圈通常会在透视变换下投影到椭圆。所以我首先检测省略号,粗略地执行以下操作(在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个角到检测到的投影矩阵的单应性。
我不知道如何用椭圆做这件事,非常感谢任何帮助。
由于
答案 0 :(得分:5)
这看起来像一个不确定的问题。
矩形投影以8个未知数(单应系数)提供8个方程。
使用椭圆,您只能检索中心坐标(2 DOF),轴(2 DOF)和轴方向(1 DOF)。
答案 1 :(得分:4)
圆圈确实通过透视变换转换为椭圆,但其轴与初始圆的轴不同,如下图所示:
您可以参考this link进行详细演示。因此,椭圆的边界矩形不是透视变换的初始正方形图像。
修改强>
这意味着您观察到的椭圆的中心和轴不是通过透视映射的原始圆的中心和轴的图像。我试图做一个更清晰的说明:
在此图像上,我在透视变换后以原始圆的轴和中心绘制绿色,并且椭圆的轴和中心为红色。在该具体示例中,垂直轴不会通过透视映射变形,但是在一般情况下它将变形。因此,通过透视变换使圆形变形会产生椭圆,但您看到的轴和中心不是原始圆的轴和中心。
因此,您不能简单地使用椭圆上的顶部,底部,左侧和右侧点(红点,可以很容易地从椭圆中检测到)将这些点映射到顶部,底部,左侧和右侧点上因为它们在透视映射下不对应(绿色点,但是它们不能从椭圆中容易地检测到)。
最后,我不认为从单个检测到的椭圆估计透视映射是完全可能的。