Image processing OpenCV中椭圆拟合的度量
OpenCV有一个很好的内置椭圆拟合算法,名为Image processing OpenCV中椭圆拟合的度量,image-processing,opencv,computer-vision,Image Processing,Opencv,Computer Vision,OpenCV有一个很好的内置椭圆拟合算法,名为fitEllipse(const Mat&points) 然而,它有一些主要缺点,限制了它的实用性。例如,它已经需要选定的点,所以我必须自己进行特征提取HoughCircles检测给定图像上的圆,可惜没有HoughEllises 另一个主要缺点,也就是我问题的中心,就是它没有提供任何关于拟合精度的度量。它返回一个最适合给定点的椭圆,即使形状看起来根本不像椭圆。有没有办法从算法中得到估计误差?我想用它作为一个阈值来过滤掉那些甚至不接近椭圆的形状 我问这
fitEllipse(const Mat&points)
然而,它有一些主要缺点,限制了它的实用性。例如,它已经需要选定的点,所以我必须自己进行特征提取HoughCircles
检测给定图像上的圆,可惜没有HoughEllises
另一个主要缺点,也就是我问题的中心,就是它没有提供任何关于拟合精度的度量。它返回一个最适合给定点的椭圆,即使形状看起来根本不像椭圆。有没有办法从算法中得到估计误差?我想用它作为一个阈值来过滤掉那些甚至不接近椭圆的形状
我问这个问题,因为在我尝试重新发明轮子并编写自己的
fitEllipse
函数之前,可能有一个简单的解决方案。如果你不介意弄脏你的手,你可以修改fitEllipse()
的源代码。fitEllipse()
函数使用最小二乘法确定可能的椭圆,最小二乘法解决方案是一个有形的距离度量,这就是您想要的
如果这是您愿意做的事情,那么这将是一个非常简单的代码更改。只需添加一个浮点数,其值在函数调用后传回,其中浮点数存储当前的最佳最小二乘值。为什么不执行findContours()以减少所需的内存空间?这就是您的“选定点”结构。如果您想进一步简化,可以对其运行convxhull()或ApproxPoly()。将椭圆拟合到这些点,然后我想你可以检查两个结构之间的相似性,得到某种估计。两个垫子之间的差异运算符是(非常)粗略的估计?根据应用情况,您可能可以使用CAMShift(或mean shift),它将椭圆拟合到具有相似颜色的区域。
fitEllipse
将椭圆作为一个cv::RotatedRect
提供,因此您知道椭圆的旋转角度、中心和两个轴
您可以计算点与椭圆之间距离的平方和,该和就是您要查找的度量
点和椭圆之间的距离在这里描述,代码在这里
您需要从几何工具引擎的OpenCV
cv::RotatedRect
转到Ellipse2,然后才能计算距离。椭圆有5个自由度,因此hough变换的参数空间太大。如果你只有很少的异常值,也许RANSAC算法可以工作。