如何理解霍夫变换 Hough 变换?


霍夫变换是一种特征检测(feature extraction),被广泛应用在图像分析、计算机视觉以及数位影像处理 。 霍夫变换是用来辨别找出物件中的特征,例如:线条。

算法流程


给定一个物件、要辨别的形状的种类,算法会在参数空间(parameter space)中执行投票来决定物体的形状, 而这是由累加空间(accumulator space)里的局部最大值(local maximum)来决定。

具体说明


最简单的霍夫变换是在图像中识别直线。在平面直角坐标系(x-y)中,一条直线可以用方程式

y = m 0 x + b 0
表示, b 0 是直线的截距, m 0 是直线的斜率。而( m 0 , b 0 )可以视为参数空间 ( m , b ) 中的一点。当直线垂直于 x 轴时,斜率为无限大,若用电脑数值计算时会很不方便,因此Duda 和 Hart 提出使用Hesse normal form来表示直线的参数
r = x cos θ + y sin θ

r 是从原点到直线的距离, θ r x 轴的夹角。利用参数空间 ( r , θ ) 解决了原本参数空间 ( m , b ) 发散的问题,进而能够比较每一个线段的参数,有人将 ( r , θ ) 平面称为二维直线的霍夫空间(Hough space)。
给定一个点 ( x 0 , y 0 ) ,通过该点的所有直线的参数 ( r , θ ) 的集合,会在 ( r , θ ) 平面上形成一个三角函数,可由下方程式证明这里写图片描述
因此,给定很多点,判断这些点是否共线(concurrent lines)的问题,经由霍夫变换之后,变成判断一堆曲线(每一个点在 ( r , θ ) 平面上代表一条曲线)是否 在 ( r , θ ) 平面上相交于同一点的问题(concurrent curves)。

霍夫变换正是找出霍夫空间最大可能的交点的方法。

具体例子

这里写图片描述

输入的图片中有两条粗直线,经过霍夫变换后的结果得到累加器(accumaltor)矩阵,右图就是把accumaltor矩阵画出来,越亮值越大,越黑值越小。在右图(霍夫空间)中,有两个很明显的亮点, 这两个亮点分别代表两条不同参数的直线,与输入的图片(左图)吻合。然后读取矩阵的两个最大值就可以得出这两条线距画面中心距离以及角度。

猜你喜欢

转载自blog.csdn.net/qq_36764147/article/details/81286978