本文是对OpenCV直线拟合OpenCV椭圆拟合函数的函数构成,函数参数与描述的中文说明,并对OpenCV直线与椭圆拟合算法的实现原理与实现过程做了简单介绍。
我们在对图像处理时,经常需要将找到的坐标拟合成各种形状,特别是在工业方面,据我所知,工业上对形状与轮廓的应用极广。下面是opencv关于直线拟合与椭圆拟合的函数详解,函数参数都翻译成了中文,方便大家记忆理解。
FitEllipse
二维点集的椭圆拟合函数
CvBox2D cvFitEllipse2( const CvArr* points );
- points
- 点集的序列或数组
函数 cvFitEllipse 对给定的一组二维点集作椭圆的最佳拟合(最小二乘意义上的)。返回的结构与 cvEllipse 中的意义类似,除了 size 表示椭圆轴的整个长度,而不是一半长度。
FitLine
2D 或 3D 点集的直线拟合函数
void cvFitLine( const CvArr* points, int dist_type, double param, double reps, double aeps, float* line );
- points
- 2D 或 3D 点集,32-比特整数或浮点数坐标
- dist_type
- 拟合的距离类型 (见讨论).
- param
- 对某些距离的数字参数,如果是 0, 则选择某些最优值
- reps, aeps
- 半径 (坐标原点到直线的距离) 和角度的精度,一般设为0.01。
- line
- 输出的直线参数。2D 拟合情况下,它是包含 4 个浮点数的数组 (vx, vy, x0, y0),其中 (vx, vy) 是线的单位向量而 (x0, y0) 是线上的某个点. 对 3D 拟合,它是包含 6 个浮点数的数组 (vx, vy, vz, x0, y0, z0), 其中 (vx, vy, vz) 是线的单位向量,而 (x0, y0, z0) 是线上某点。
函数 cvFitLine 通过求 sumi:ρ(ri) 的最小值方法,用 2D 或 3D 点集拟合直线,其中 ri 是第 i 个点到直线的距离, ρ(r) 是下面的距离函数之一:
dist_type=CV_DIST_L2 (L2): ρ(r)=r2/2 (最简单和最快的最小二乘法)
dist_type=CV_DIST_L1 (L1): ρ(r)=r
dist_type=CV_DIST_L12 (L1-L2): ρ(r)=2•[sqrt(1+r2/2) – 1]
dist_type=CV_DIST_FAIR (Fair): ρ(r)=C2•[r/C – log(1 + r/C)], C=1.3998
dist_type=CV_DIST_WELSCH (Welsch): ρ(r)=C2/2•[1 – exp(-(r/C)2)], C=2.9846
dist_type=CV_DIST_HUBER (Huber): ρ(r)= r2/2, if r < C; C•(r-C/2), otherwise; C=1.345
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/241750.html