Opencv 如何校正检测到的椭圆

Opencv 如何校正检测到的椭圆,opencv,geometry,computer-vision,multiview,Opencv,Geometry,Computer Vision,Multiview,我试图在图像中找到圆,并将它们扭曲回一个规范视图(即,好像看向中心)。但是,在透视变换下,一般情况下圆投影为椭圆。因此,我首先检测椭圆,大致执行以下操作(在OpenCV中): 1。在图像中查找轮廓 2.等高线估计面积 3.将边界框拟合到轮廓,并通过宽度/2*高度/2*圆周率(椭圆面积)估计面积 4.检查轮廓面积和椭圆估计面积是否

我试图在图像中找到圆,并将它们扭曲回一个规范视图(即,好像看向中心)。但是,在透视变换下,一般情况下圆投影为椭圆。因此,我首先检测椭圆,大致执行以下操作(在OpenCV中):

1。在图像中查找轮廓
2.等高线估计面积
3.将边界框拟合到轮廓,并通过宽度/2*高度/2*圆周率(椭圆面积)估计面积
4.检查轮廓面积和椭圆估计面积是否
假设我已经用这种方法找到了一个椭圆,我如何将它校正回一个圆,以便“撤消”透视变换(尽管不是在平面旋转中,因为我想这是不可能做到的)。例如,如果它是一个矩形,我将只计算从一个向上矩形的4个角到检测到的投影矩形的单应性

我不知道如何做这与椭圆,任何帮助是非常感谢


多亏了

一个圆确实通过透视变换变换成了一个椭圆,但是它的轴与初始圆的轴不同,如下图所示:


(来源:)

有关详细的LED演示,请参阅。因此,通过透视变换,椭圆的边界矩形不是初始正方形的图像

编辑:

这意味着,通过透视贴图,您观察到的椭圆的中心和轴不是原始圆的中心和轴的图像。我试图做一个更清楚的说明:

在这张图片上,我在透视变换后用绿色画出了原始圆的轴和中心,用红色画出了椭圆的轴和中心。在此特定示例中,纵轴不会因透视贴图而变形,但在一般情况下会变形。因此,通过透视变换变形圆会生成椭圆,但您看到的轴和中心不是原始圆的轴和中心

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


最后,我认为根本不可能从单个检测到的椭圆估计透视贴图。

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

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


对于椭圆,您只能检索中心坐标(2个自由度)、轴(2个自由度)和轴方向(1个自由度)。

您可以假设椭圆周围的边界矩形(宽度/高度都是常用的椭圆参数)然后把它投影到一个正方形上?!@Mika你必须检测一个比矩形更复杂的四边形,因为在一般的透视变换下,正方形不会变形为矩形。我能不能在椭圆上找到顶部、底部、左侧和右侧的点(由中心的宽度和高度给出)把它们映射到半径为r的圆的顶部、底部、左侧、右侧,然后用这种方法找到单应性?当然,这对于平面内旋转可能不正确,但是我们可以简单地将扭曲的椭圆旋转90度plane@Aly请参阅我的答案的编辑。更多关于你想做什么的详细信息对找到一份工作很有用nd.也许你可以在要检测的圆内画一个十字,以便标记其真实中心,以便更容易检测?@Aly同样,根据你要求的精度,用观察到的椭圆的轴和中心来近似圆的真实轴和中心可能就足够了。回答得好。如果你再添加一些样本,你可以显示这些t缩短后的圆图像模棱两可。我问自己,边界吊架是否总是有平行于平面椭圆轴的基线?超短的证据证明这是不可能的,很好!
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