【视觉算法】霍夫变换(Hough Transform)

在进入正题之前,首先思考一个问题,在下图中,我们如何从散乱的点中寻找到直线?
在这里插入图片描述
有多少直线?哪些点属于哪些直线?
如果是找圆形呢?
霍夫变换(Hough Transform)能很好的解决这些问题,要理解霍夫变换,首先要知道霍夫空间,看下图:
在这里插入图片描述

可以看到,霍夫空间实际上是参数空间,在上图的变换中,图像空间中的直线的斜率和截距是未知参数,由这两个未知参数构造的空间就是对应的霍夫空间。图像空间中的一条直线,对应霍夫空间中的一点;霍夫空间中的一条直线,对应图像空间中的一点,这就是对偶性,很容易理解。
那么如果图像空间中有两个点呢?看下图:
在这里插入图片描述
现在思考一个问题:什么样的直线经过图像空间中的两这个点呢?显然,它是霍夫空间中对应两条线的交点,即具有同样斜率和截距的直线。
在这里插入图片描述
这就是我们找到直线的方法,是不是显得有些多余?问题复杂些,极其好用!重新思考文章开头的问题,我们把这些点变换到霍夫空间,看下图(这里只是演示):
在这里插入图片描述
并用一些网格来划分霍夫空间:
在这里插入图片描述

对于每一个网格,我们对经过该网格的直线数目进行计数(投票),设定一个阈值,票数大于该阈值的网格,我们就认为该网格代表图像空间中的一条直线(阈值大一些,由数目较少的点构成的直线被忽略),见下图:

在这里插入图片描述
上图霍夫空间中画圈的网格与图像空间中的直线是对应的。
至此,我们已经对霍夫变换有了一定的认识,现在考虑一个特殊情况:如果直线是垂直于x轴的,即斜率为无限,怎么办?
为了避免出现这个问题,改用极坐标形式:
在这里插入图片描述
由直线的斜截式,很容易推出:
在这里插入图片描述

于是,有:
在这里插入图片描述
x,y是已知的,r和θ的关系显而易见;再根据r和θ构建霍夫参数空间即可。
下面简单分析一下经典霍夫变换的复杂度,霍夫空间的维数是由未知参数的个数确定的,一般来讲,空间复杂度为O(Kn),其中K是网格个数,n是未知参数的个数。
经典的霍夫变换能够解决可解析图形(直线、圆、椭圆,球,等)的识别问题,那么对于不可解析的不规则图形呢?广义霍夫变换能够解决这个问题。
下一篇文章学习广义霍夫变换。

原创文章 23 获赞 0 访问量 615

猜你喜欢

转载自blog.csdn.net/weixin_42192493/article/details/105765597