原理描述
霍夫变换是用来检测图像中的直线或者圆等几何图形的。一条直线的表示方法有好多种,最常见的是 y=mx+b 的形式。 假设有一幅图像,经过滤波,边缘检测等操作,那么接下来的问题就是怎么把这张图片中的直线提取出来。基本的思考流程是:如果直线 y=mx+b 在图片中,那么图片中,必需有N多点在直线上(像素点代入表达式成立),只要有这条直线上的两个点,就能确定这条直线。该问题可以转换为:求解所有的(m,b)组合。
设置两个坐标系,左边的坐标系表示的是(x,y)值,右边的坐标系表达的是(m,b)的值,即直线的参数值。那么一个(x,y)点在右边对应的就是是一条线,左边坐标系的一条直线就是右边坐标系中的一个点。这样,右边左边系中的交点表示有多个点经过(m,b)确定的直线。但是,该方法存在一个问题(m,b)的取值范围太大。
在笛卡尔坐标系中会存在参数问题,垂直线的斜率不存在(或无限大),这使得斜率参数 m m m的值接近于无限。为此,为了更好的计算,Richard O. Duda和Peter E. Hart在1971年4月,提出了极坐标系。其中r是原点到直线上最近点的距离,\theta是x轴与连接原点和最近点直线之间的夹角。如下图所示:
对于一般的点(x_{0}, y_{0})来说,可以将通过这个点的一族直线统一定义为: r 0 = x 0 ⋅ c o s θ + y 0 ⋅ s i n θ r_{0}=x_{0}\cdot\;cos\theta+y_{0}\cdot\;sin\theta r0=x0⋅cosθ+