【拟合专题】直线拟合

闲来无事,整理下拟合方面的一些方法(部分内容参考gloomyfish、Grooveboy等博客,在此先行谢过)

直线拟合方法主流方法有最小二乘、Hough两种,其他如Halcon上的最小距离也是最小二乘的思想,其他如Hough变换和最小二乘结合、混沌粒子群结合等等

1、最小二乘拟合直线

曲线拟合中最基本和最常用的是直线拟合。设xy之间的函数关系为:

                   ya+bx

式中有两个待定参数,a代表截距,b代表斜率。对于等精度测量所得到的N组数据xiyi),i12……,Nxi值被认为是准确的,所有的误差只联系着yi下面利用最小二乘法把观测数据拟合为直线。     

用最小二乘法估计参数时,要求观测值yi的偏差的加权平方和为最小。对于等精度观测值的直线拟合来说,可使下式的值最小:


上式分别对a、b求偏导得:
    【拟合专题】直线拟合_第1张图片

整理后得到方程组



    解上述方程组便可求得直线参数ab的最佳估计值。

【拟合专题】直线拟合_第2张图片

相关系数r:

最小二乘法处理数据除给出ab外,常常还给出相关系数r,  r定义为



【拟合专题】直线拟合_第3张图片 

2、Hough变换拟合直线

霍夫变换是图像变换中的经典手段之一,主要用来从图像中分离出具有某种相同特征的几何

形状(如,直线,圆等)。霍夫变换寻找直线与圆的方法相比与其它方法可以更好的减少噪

声干扰。经典的霍夫变换常用来检测直线,圆,椭圆等。

 

霍夫变换算法思想:

以直线检测为例,每个像素坐标点经过变换都变成都直线特质有贡献的统一度量,一个简单

的例子如下:一条直线在图像中是一系列离散点的集合,通过一个直线的离散极坐标公式,

可以表达出直线的离散点几何等式如下:

X *cos(theta) + y * sin(theta)  = r 其中角度theta指r与X轴之间的夹角,r为到直线几何垂

直距离。任何在直线上点,x, y都可以表达,其中 r, theta是常量。该公式图形表示如下:

然而在实现的图像处理领域,图像的像素坐标P(x, y)是已知的,而r, theta则是我们要寻找

的变量。如果我们能绘制每个(r, theta)值根据像素点坐标P(x, y)值的话,那么就从图像笛卡

尔坐标系统转换到极坐标霍夫空间系统,这种从点到曲线的变换称为直线的霍夫变换。变换

通过量化霍夫参数空间为有限个值间隔等分或者累加格子。当霍夫变换算法开始,每个像素

坐标点P(x, y)被转换到(r, theta)的曲线点上面,累加到对应的格子数据点,当一个波峰出现

时候,说明有直线存在。同样的原理,我们可以用来检测圆,只是对于圆的参数方程变为如

下等式:

(x –a ) ^2 + (y-b) ^ 2 = r^2其中(a, b)为圆的中心点坐标,r圆的半径。这样霍夫的参数空间就

变成一个三维参数空间。给定圆半径转为二维霍夫参数空间,变换相对简单,也比较常用。

 

编程思路解析:

1.      读取一幅带处理二值图像,最好背景为黑色。

2.      取得源像素数据

3.      根据直线的霍夫变换公式完成霍夫变换,预览霍夫空间结果

4.       寻找最大霍夫值,设置阈值,反变换到图像RGB值空间(程序难点之一)

5.      越界处理,显示霍夫变换处理以后的图像

 

关键代码解析:

直线的变换角度为[0 ~ PI]之间,设置等份为180份,为提高实时性,只对ROI点做Hough变换,matlab中hough变换原理应是对没一点做hough,对于二值图像尽管此点为0,也会默认最hough变换,严重影响速度。

{CSDN:CODE:76986}




霍夫变换源图如下:


霍夫变换以后,在霍夫空间显示如下:(白色表示已经找到直线信号)


最终反变换回到像素空间效果如下:


一个更好的运行监测直线的结果(输入为二值图像):




你可能感兴趣的:(杂论无章)