在图像处理中,Hough变换(霍夫变换)主要用来识别已知的几何形状,最常见的比如直线、线段、圆形、椭圆、矩形等。如果要检测比较复杂的曲线图形,就需要利用广义霍夫变换。
霍夫变换的原理是根据参数空间的统计规律进行参数估计。
具体说来就是,将直角坐标系中的图形(x,y)变换到参数空间(k1,...,kn),对直角坐标系中的每一个像素点,计算它在参数空间里的所有可能的参数向量。处理完所有像素点后,把出现次数(频率)最多的(一个或几个)参数向量的坐标作为参数代入直角坐标方程,即检测到的图形方程。
以直线检测为例,详细讲一下步骤:(圆和直线的原理相同,只是直线的公式比较好打~)
1.图像二值化,待检测的线变为黑色,背景置为白色。既然是形状检测,这步是必不可少的。
2.假设直线的参数方程为p=x*cosa+y*sina,对于直线上的某个点(x,y)来说,变换到参数空间的坐标就是(p,a),而且这条直线上的所有点都对应于(p,a)。对于一个固定点(x,y)来说,经过它的直线系可以表示为p=(x^2+y^2)^1/2*sin(a+b),其中tanb=x/y,对应参数空间里的一条正弦曲线。也就是说,图像中的一条直线对应参数空间的一点,图像中的一点对应参数空间的一条正弦曲线。
关于参数变换,我再白话几句。如果直线方程写成y=k*x-b,则对应于参数空间里的点(k,-b),这就有点像图论中的对偶变换了。在写图的程序时有时会遇到若干半平面求交的问题(整张平面被一条直线分割后得到两张半平面)。半平面求交关键在于找到求交后的