代码狗

当前位置:代码狗 > 开发教程 > 工业视觉教程 > 正文

OpenCV直线拟合与椭圆拟合函数详解

本文是对OpenCV直线拟合OpenCV椭圆拟合函数的函数构成,函数参数与描述的中文说明,并对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

感觉很棒!可以赞赏支持我哟~

赞(0) 打赏

评论 抢沙发

×

请作者吃根烤肠!

支付宝