Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image processing OpenCV中椭圆拟合的度量_Image Processing_Opencv_Computer Vision - Fatal编程技术网

Image processing OpenCV中椭圆拟合的度量

Image processing OpenCV中椭圆拟合的度量,image-processing,opencv,computer-vision,Image Processing,Opencv,Computer Vision,OpenCV有一个很好的内置椭圆拟合算法,名为fitEllipse(const Mat&points) 然而,它有一些主要缺点,限制了它的实用性。例如,它已经需要选定的点,所以我必须自己进行特征提取HoughCircles检测给定图像上的圆,可惜没有HoughEllises 另一个主要缺点,也就是我问题的中心,就是它没有提供任何关于拟合精度的度量。它返回一个最适合给定点的椭圆,即使形状看起来根本不像椭圆。有没有办法从算法中得到估计误差?我想用它作为一个阈值来过滤掉那些甚至不接近椭圆的形状 我问这

OpenCV有一个很好的内置椭圆拟合算法,名为
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算法可以工作。