霍夫变换直线检测原理实现
简单介绍
霍夫变换可以用于边缘检测,更一般的则可以拟合曲线。基本原理如下:由曲线的定义式可得,如果 XY 确定,其对应的未知数构成的等式也可视作一个曲线表达式,这个新的表达式称作参数空间(自变量为原来的参数)改变 XY 的过程中这些位置构成的新的表达式必会都经过某一个固定点,这个固定点代表的参数就是原来曲线表达式。
但实际上的曲线会受到噪声影响,也就是说参数空间中所有的表达式并不会经过同一点,而是大部分曲线会经过某一固定点,这个固定点可能不止一个,所以我们将参数空间切分为一个个子区域,并统计子区域中线的交点(也可以直接统计线的点数,只要代表密度即可),交点最多的那个区域就是原曲线的参数。
更加详细的介绍可见《数字图像处理》中文第三版 P472 10.2.7 边缘检测和边界检测。或参考Matlab 霍夫变换 ( Hough Transform) 直线检测 - Pony_s - 博客园 (cnblogs.com)
代码实现
以下为 matlab 代码实现,基本实现过程如下:
- 实现生成直线
- 给直线增加噪声
- 对噪声处理后的图像生成其参数空间
- 对参数空间的所有曲线做直方图统计,得到最大数量的参数表达
- 获得拟合的直线
代码如下:
1 | % 霍夫变换 & 直线 |
最后的效果如下:
其中参数空间的方框为交点比较多的,也就是比较密集的,这里有两个,代码里就取了一个,另外一个也是可以的。