直线拟合2

article/2025/11/8 2:11:36

 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没有此功能)。

 


http://chatgpt.dhexx.cn/article/CHWd5M7G.shtml

相关文章

C++ 最小二乘法 直线拟合、曲线拟合、平面拟合、高斯拟合

本节介绍如何用Eigen求解线性最小二乘方程组。求解Axb的最小二乘问题,等价于求解方程 使用Eigen的求解的代码如下: Eigen::MatrixXd MatX;//样本数据Eigen::MatrixXd MatY;//观测值Eigen::MatrixXd MatLS;//待定系数MatLS (MatX.transpose() * MatX).in…

C语言直线拟合函数

直线拟合算法 函数说明: 通过一些点拟合出一条直线。 参数: pt_input 指向传入的点的指针。 ptNumbers 传入的点数量。 k 指向拟合直线参数k的指针。 b 指向拟合直线参数b的指针。 返回值: 返回一个代数值判断拟合是否成功。如果成功…

用RANSAC算法实现干扰严重的直线拟合~

1.说到直线拟合,一般是用最小二乘啦,在opencv里面就是用cv.fitLine来完成,首先简单介绍一下该函数: cv.fitLine(points, distType, param, reps, aeps[, line]) -> line points:点集坐标 distType:距…

RANSAC直线拟合和最小二乘直线拟合的简单介绍

RANSAC是“RANdom SAmple Consensus(随机抽样一致)”的缩写。它可以从一组包含“局外点”的观测数据集中,通过迭代方式估计数学模型的参数。它是一种不确定的算法——它有一定的概率得出一个合理的结果;为了提高概率必须提高迭代次…

RANSAC三维直线拟合

RANSAC算法 (1)要得到一个直线模型,需要两个点唯一确定一个直线方程。所以第一步随机选择两个点; (2)通过这两个点,可以计算出这两个点所表示的模型方程; (3&#xff09…

二维直线拟合--opencv实现

二维/三维直线拟合–opencv实现 ​ Hough变换可以提取图像中的直线,但是提取线的精度不高,然而我们的很多场合下需要精确估计直线的参数,这时就需要进行直线拟合。 ​ 直线拟合的方法有很多,比如:一元线性回归就是一…

直线拟合最小二乘法

数据 x(1,2,3,4,5) y (1,1.5,3,4.5,5) 算法结果 R语言运行结果 算法原理 x的均值: xpsum(x1x2x3…xn)/n y的均值 : ypsum(y1y2y3…yn)/n x的平方差之和: lxxsum( (xi-xp) ^ 2 ) 协方差之和 lxy…

直线生成以及pcl直线拟合

目录 写在前面codecompile&run result参考 写在前面 1、本文内容 pcl直线拟合,生成带噪声的直线并进行直线拟合的demo 2、平台 windows, pcl1.10.0 3、转载请注明出处: https://blog.csdn.net/qq_41102371/article/details/127147223 code line_…

opencv 直线拟合

一、话说直线拟合 霍夫直线检测容易受到线段形状与噪声的干扰而失真,这个时候我们需要另辟蹊径,通过对图像进行二值分析,提取骨架,对骨架像素点拟合生成直线,这种做法在一些场景下非常有效,而且效果还比较…

拟合算法之一 直线拟合

直线拟合 很早就想学习拟合了,经常听同事用到拟合,当时尚且一窍不通,必须快递加急紧追此处才是,也参考了网上大佬的一些宝贵经验,先将拟合方法总结如下: 最小二乘法 1.原理 2.举例实现 void fitline3(…

直线拟合问题(Python实现)

程序如下: import matplotlib.pyplot as plt import numpy as npx_list [466, 741, 950, 1422, 1634] y_list [7.04, 4.28, 3.40, 2.54, 2.13] # x_list [0, 1, 3, 5] # y_list [1, 2, 4, 8]l_mat11 len(x_list) l_mat12 l_mat21 sum(x for x in x_list) l_…

OpenCV直线拟合检测

点击上方“小白学视觉”,选择加"星标"或“置顶” 重磅干货,第一时间送达本文转自:opencv学堂 OpenCV直线拟合检测 霍夫直线检测容易受到线段形状与噪声的干扰而失真,这个时候我们需要另辟蹊径,通过对图像进行…

RANSAC 直线拟合

result&#xff1a; code&#xff1a; #include "stdafx.h". #include <opencv2\opencv.hpp> #include <iostream> #include <ctime>using namespace std; using namespace cv;//生成[0,1]之间符合均匀分布的数 double uniformRandom(void) {ret…

OpenCV——直线拟合

相比于直线检测&#xff0c;直线拟合的最大特点是将所有数据只拟合出一条直线 void fitLine( InputArray points, OutputArray line, int distType,double param, double reps, double aeps ); points&#xff1a;输入待拟合直线的2D或者3D点集。line&#xff1a;输出描述直线…

直线拟合

在进行直线拟合算法中&#xff0c;一直使用最小二乘法&#xff0c;使用时间长了&#xff0c;也比较熟练了&#xff0c;但是在最近一次使用中&#xff0c;最小二乘法在拟合垂直或者接近垂直的直线时&#xff0c;效果不好&#xff1b;斜率很大&#xff0c;使用稳定性不好。查阅《…

Android 冷启动 热启动 测试

一、应用的启动 启动方式 通常来说&#xff0c;在安卓中应用的启动方式分为两种&#xff1a;冷启动和热启动。 1、冷启动&#xff1a;当启动应用时&#xff0c;后台没有该应用的进程&#xff0c;这时系统会重新创建一个新的进程分配给该应用&#xff0c;这个启动方式就是冷启动…

Spring Boot 热启动

目的&#xff1a;修改类文件可以马上编译发布&#xff0c;提高了工作效率 步骤&#xff1a; 第一步&#xff1a; 修改pom.xml <!-- 热启动 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools&l…

APP冷热启动专项测试

一、冷热启动的概念 冷启动&#xff1a;当启动应用时&#xff0c;后台没有该应用的进程&#xff0c;这时系统会重新创建一个新的进程分配给该应用&#xff0c;这个启动方式就是冷启动。 热启动&#xff1a;当启动应用时&#xff0c;后台已有该应用的进程&#xff08;例&#…

嵌入式linux热启动和冷启动,使用keil判断ARM的冷启动和热启动的方法

微处理器:LPC2114 编译环境:Keil MDK V4.10 思路: 常把单片机系统的复位分为冷启动和热启动。所谓冷启动&#xff0c;也就是一般所说的上电复位&#xff0c;冷启动后片内外RAM的内容是随机的&#xff0c;通常是0x00或0xFF&#xff1b;单片机的热启动是通过外部电路给运行中的单…

Android冷启动和热启动以及冷启动优化方案

1、什么是冷启动和热启动 冷启动&#xff1a; 当启动应用时&#xff0c;后台没有该应用的进程&#xff0c;这时系统会重新创建一个新的进程分配给该应用&#xff0c;这个启动方式就是冷启动&#xff0c;也就是先实例化Application。热启动&#xff1a; 当启动应用时&#xff0…