直线检测练习:hough线变换
1.hough线变换概述
在计算机视觉与图像分析领域,直线(段)检测一直是热门的研究问题,作为一种底层图像特征,是检测图像高层特征或分析图像内容的基础。直线段包含更丰富的信息,如直线段角度、中心点等,当然也有很多方面的应用,比如:图像修复、消失点检测、图像匹配、遥感图像分析、三维重建和道路检测等。
本篇主要浅显介绍一下霍夫线变换,霍夫变换于1962 年由PaulHough 首次提出,后于 1972 年由 Richard Duda & Peter Hart 推广使用 ,经典霍夫变换常用来检测图像中的直线 ,当然也可以检测圆和椭圆,其原理都是:运用两个坐标空间之间的变换将在一个空间中具有相同形状的曲线或直线映射到另 一个坐标空间的一个点上形成峰值,从而把检测任意形状的问题转化为统计峰值问题 。这种方法的 一 个突出优点是分割结果的稳定性,即对数据的不完全或噪声不是非常敏感,只需边缘检测简单处理便可以进行检测。
OpenCV 中的霍夫线变换有如下三种:
· 标准霍夫变换 ( StandardHough Transform, SHT ) ,由 HoughLines函数 调用。
· 多尺度霍夫变换(Multi-ScaleHough Transform , MSHT ) ,由HoughLines函数调用 。
· 累计概率霍夫变换(ProgressiveProbabilistic Hough Transform, PPHT ),由HoughLinesP 函数调用
2.hough线变换原理
(1)一条直线在图像三维空间可由两个变量表示,有以下两种情况。如图所示:
①在直角坐标系 :可由参数斜率和截距( k , b ) 表示 :
y = kx + b \text{y}=\text{kx}+\text{b}\, y=kx+b
②在极坐标系 :可由参数极径和极角(r,θ)表示:
y = ( − cos θ sin θ ) x + ( r sin θ ) \text{y}=\left( -\frac{\cos \boldsymbol{\theta }}{\sin \boldsymbol{\theta }} \right) \boldsymbol{x}+\left( \frac{\boldsymbol{r}}{\sin \boldsymbol{\theta }} \right) y=(−sinθcosθ)x+(sinθr)
可以利用下面的式子相互推导:
化简可以得到:
对于边缘检测图像的某一个点 ( x 0 , y 0 ) \left( \text{x}_0,\text{y}_0 \right) (x