2014-10-04 159 views
4

我试图找到图像中的圆圈,并将它们翘曲回规范视图(即仿佛看着中心)。但是,一般项目中的圆圈在透视变换下会省略。因此,我第一检测椭圆,大致执行以下操作(在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 

假设我已经通过这种方法发现了一个椭圆,我怎样才能纠正它回到一个圆,使得I“撤消”透视转换(虽然不是在平面旋转,因为我猜不能这样做)。例如,如果它是一个矩形,我只需计算从竖直矩形的四个角到检测到的投影的单应矩阵。

我不知道如何用椭圆做到这一点,任何帮助,非常感谢。

由于

+0

您可以假设椭圆周围的边界矩形(宽度/高度是常见的椭圆参数)并将其投影到一个正方形?!? – Micka 2014-10-04 10:17:03

+2

@Micka由于在普通透视变换下方形不会变形为矩形,因此您必须检测比矩形更复杂的边界四边形。 – AldurDisciple 2014-10-04 17:28:57

回答

4

的圆确实变换成由透视变换椭圆形,但是其轴不一样的初始圆的轴,如图所示在该图示:

Ellipse vs Perspective circle http://www.brian-curtis.com/text/dfo_second_edition/PowerPoint/cirellipse%2024.png

您可以参考this link进行详细演示。结果,椭圆的边界矩形不是透视变形的初始平方的图像。

编辑:

这意味着中心和你观察椭圆的轴不图像,由透视映射,中心与最初的圆的轴。我试图让一个更清楚的说明:

enter image description here

在这个形象,我在绿色提请轴和原来的圆心,透视变换后,与轴和椭圆的中心为红色。在此特定示例中,垂直轴不会因透视贴图而变形,但在一般情况下会变形。因此,通过透视变换使圆变形会产生椭圆,但是您看到的轴和中心不是原始圆的轴和中心。

因此,您不能简单地使用椭圆上的顶部,底部,左侧和右侧点(红色点,可以从椭圆中轻松检测到)将其映射到顶部,底部,左侧和右侧圆的点,因为它们在透视映射下不对应(绿点做,但是它们不容易从椭圆中检测到)。

最后,我认为完全不可能从单个检测到的椭圆估计透视映射。

+0

我不能只在椭圆上找到顶点,底部,左侧和右侧的点(由中心的宽度和高度给出),并将它们映射到半径为r的圆的顶部,底部,左侧和右侧。这样找到单应性?当然,这在平面旋转中可能不是正确的,但是可以简单地将平面上的扭曲椭圆旋转90度 – Aly 2014-10-04 23:18:27

+0

@Aly请参阅我的答案的编辑。有关您想要做什么的更多细节将对寻找解决方法很有用。也许你可以在圆圈内画出一个十字来检测,以便标记它的真正中心以便于检测? – AldurDisciple 2014-10-05 08:10:14

+0

@Aly另外,根据您所需的精度,用观察椭圆的轴线和中心来近似圆的真实轴和圆心可能就足够了。 – AldurDisciple 2014-10-05 08:26:08

5

这看起来像一个不确定的问题。

矩形的投影在8个未知数(单应性系数)中提供8个方程。

使用椭圆形,只能检索中心坐标(2 DOF),轴(2 DOF)和轴方向(1 DOF)。

+1

超级短证明,这是不可能的,很好! – AldurDisciple 2014-10-06 06:29:30