英特尔实习:项目介绍:台球识别和分类使用的方法,Hough 变换原理、后处理
详细讲了一下项目背景,讲解了用到的检测方法。Hough变换是基于点-线的对偶性思想。在图像XY里,所有过点(x,y)的直线的方程为
y = px + q (1)
其中p为斜率,q为截距,它也可以改写成如式(2)的形式:
q = −px+ y (2)
式(2)可以看作为参数空间PQ中过点(p,q)的一条直线。如图下所示,在图像空间中XY中过点(xi,yi)的直线方程可以写成yi=pxi+q,也可以写成q=-pxi+yi,后者表示在参数空间PQ中的一条直线。同理对于(xj,yj)也可以写成上式形式。如下图:
由此可知,在图像空间中共线的点对应在参数空间里面相交的线,反过来,在参数空间里面相交于同一个点的所有直线在图像空间里面都有共线的点与之对应,这就是点-线的对偶性。
Hough变换就是根据这样的关系把空间里面的检测问题转换到参数空间,通过参数空间里面进行简单的累计统计来完成直线的检测任务。
在运算式(2)直线方程时候,如果直线接近竖直方向,则会由于p的值都接近无穷而使得计算量增大,此时我们使用直线的极坐标方程来表示直线,如下图,其方程如式(3),
λ=xcosθ+ysinθ (3)
根据这个方程,对于任意一组(λ,θ)都对应一条直线。即原来的点-线对偶性变成了现在的点-正弦曲线对偶性,如图所示,图(a)表示图像空间XY中的5个点,在图(b)参数空间中对应着5条曲线,这里的θ为[−90,+90],λ的取值范围为,N为图像的宽度。
由图可知,图像空间中各个点可以看作它们在参数空间里面的对应曲线。在图(b)中,曲线 1,3,5 都过 K 点,这表示在图(a)中点 1,3,5 处于同一条直线上,同理,图(a)中点 2,3,4 处于同一条直线上,在图(b)中它们对应的曲线2,3,4 都通过点 L。
Hough 变换的具体实现步骤如下:
(1)建立一个参数(λ,θ)空间的二维的数组,该数组相当于一个累加器。
(2)顺序搜索图像中所有目标(黑色)像素,对于每一个目标像素,在参数空间中根据式(3)找到对应位置,然后在累加器的对应位置加1。
(3)求出参数空间(累加器)中最大值,其位置为(λ',θ')。
(4)通过参数空间位置(λ',θ'),根据式(3)找到图像空间中相对应的直线参数。
对于直线hough变换过程,可以这么认为。依次遍历图像的所有像素,对每个像素判断是否满足某个特定条件,若满足,则经过该像素的所有直线区域的计数器加1。为了得到经过某个像素的所有直线区域,可以依次用θ的所有可能取值(例如θ可以以1度为增量,从-90度取到+90度),根据(3)式求出λ的值,从而得到很多组(λ,θ),就对应了所有经过此像素的直线。