霍夫变换在识别方程式已知的曲线是常用的一种方法,本文通过识别直线方程为向导,说明霍夫变换的原理。
话不多说,开始今天的主题,我们处理的对象是二值黑白图像,如下图:
上图是我自绘的五个点,考虑到这些点中的任何一个——经过这个点有无穷条直线,如果这个点能够对这些线投票,那么每条可能经过这个点的直线都会收到一票,现在考虑另外一个类似的点,它也给所有可能经过他的直线投票,这样就有一条线(两个点都在这条直线上)将会收到这两个点的投票,总共有两票,而其他的线只能收到 0 票或者 1 票。
现在我们需要用最少参数来描述每一条直线,但是标准形式 Y = KX + b,对于竖直线(k = )是有问题的,因此通常用(
参数来表示一条直线:
其中 , 是水平轴与该直线垂线的夹角,
,是原点到该直线的垂直距离,水平线的
,竖直线
,因此,没一条直线可以看做是二维空间的一个点
,该二维空间代表了所有的直线。
事实上,我们无法考虑经过每一个点的无数条直线,所以只考虑有限集合中的直线,把空间离散化,并用一个相应的二维数组
数组
来记录票数,
被称为累加数组,对于一副
输入图像,有
有
个元素位于区间
, 还有
个元素位于区间
。数组的索引是整数
,因此有:
边缘点 将投票给所有满足方程
的直线,它包括所有的
对,满足
并且元素 都增大了。对于没一个
,都可以计算出相应的
值,然后根据等式
计算
, 再把
,再把
映射到相应的整数
。
在最后的过程中,
中获得最多投票的这些元素对应于场景中的主导线。即统计数组
中最大值对应的索引,此时,这个索引对应的直线方程就是我们要找的 霍夫变换线。