Opencv中的fitLine函数 转载https://blog.csdn.net/azhuazhu/article/details/87916043
Opencv中的fitLine函数,实现了《直线拟合》一文中的总体最小二乘法拟合直线。
C++: void fitLine(InputArray points, OutputArray line, int distType, double param, double reps, double aeps)
参数说明:
points:需要拟合的点;
Line:输出直线的参数;在2D拟合的情况下,它应该是4个元素的向量(如VEC4F)-(Vx,Vy,X0,Y0),其中(Vx,Vy)是归一化向量,(x0,y0)是线上的点。在3D拟合的情况下,它应该是6个元素的向量(如VEC6F)-(Vx,Vy,Vz,X0,Y0,Z0),其中(Vx,Vy,Vz)是归一化向量,并且(X0,Y0,Z0)是线上的点。
distType:拟合直线采用的方法;参数为CV_DIST_L2,算法为总体最小二乘法。
Param:数字常数,选0即可;
Reps:径向精度;
Aeps:角精度;
当使用fileLine拟合直线时,如果直线中没有干扰,拟合效果是不错的,如下图,拟合出黑白交界的地方。
但是,当拟合的直线有干扰时,如下图所示,拟合的直线由于凹进去的影响,已经偏离了我们想要拟合的直线。
因为算法对所有的点进行拟合,拟合的鲁棒性不好,干扰点对拟合的直线影响很大,为了减少干扰点的影响,在拟合的过程中,引入权重wi,对远离直线的点,权重小于1,减少对拟合直线的影响。在《机器视觉算法与应用》介绍了Huber权重函数和Tukey权重函数。经测试,Tukey权重函数,由于引入了距离平方,收敛效果更好。下图使用Tukey权重函数,红线为15次迭代后的拟合效果。(带权重的直线拟合算法需手动实现,fitLine没有此功能)。
一花独放不是春,百花齐放春满园!
让机器视觉应用满天下,解放人类的眼睛和大脑!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律