霍夫变换在图像图形检测中经常应用的一种方法,该方法通过对图像外围曲线方法的特性映射到参数空间从而对图形进行检测。如直线
Y=X*K+b,将其看着B=K*x-y则相对(A,B)空间。则可知(A,B)空间中的任意点(a,b)对应xy空间的一条直线,反之亦然,xy空间中的任意点对应AB空间的一条直线,并有Y=X*K+b上点对应于AB上的直线比进过点(a,b)。则通过对图像进行遍历,均映射到空间AB上,统计交点上相交直线的个数,则个数最大的点及对应图像中占据像素点最多的线段。
霍夫变换优点:抗干扰能力强,对应曲线为实线,虚线,还是残缺了一部分均可以检测;对应曲线的均匀无要求。
缺点:计算量大,不能检测图像的线段,检测出包括该线段的直线,对于像素点较少的线段无法检测,参数空间难求取最优参数。
下面给出几种常见霍夫变换的matlab代码,这些代码均出自《Feature extraction by shape matching》。
一 对直线的检测
1 一般方法通过对直线映射到AB空间的点线对偶
在-45到45°对应y=tan(m)*x+b;45~135°为y=tan(m)*x+b*tan(m);
在实际检测实验中,该方法检测不敢恭维。可能是我实验方法有问题,对应多线段的检测检测结果很难让人满意。怪不得基本的书都不介绍该方法。
2 应用直线上的点均满足ρ = x cos(θ) + y sin(θ)的特点其中ρ为原点到直线的距离,θ为斜率角。是本图像处理的书都介绍的方法。相当的强大,在实际实验中的检测结果也很不错,不服不行啊。
3 采用降维的方法,该方法依然采用了ρ = x cos(θ) + y sin(θ)得点。实验中的结果证明,哎没的说,多几个线就不知道谁是谁了。当然可以肯定的是自己实验不对,要不这么多问题也不会写到书上去。该方法仅供学习参考。实际工作中还是用第二种方法好。
二对圆的检测。对于圆检基本思想为。XY圆上的任意点在ABR【是三维还是二维要看是否已知检测圆的半径,要是不知道,嘿嘿那个计算量啊。现在下面二维代码的基础上增加对半径的便利范围为0~(W^2+L^2))^0.5W,L为图像的宽和长。】对应一个圆的圆心,而这些圆必经过点(a,b),点(a,b)即为XY上检测圆的圆心。(那笔画画就理解了,用相同的半径在圆A上的点进行画圆,这些圆都肯定都经过A的圆点地。)
降维的方法要充分理解的看书吧!
三 椭圆的检测,椭圆检测和圆检测类似,如果已经知道了长短轴,而好说。不知道就是四维的参数空间了,那个计算量啊,哎。
将维地方法
该文件主要是对上个星期图像学习的总结,主要是作为笔记留给我自己用的。如果你读到这里,估计和我一样也是个小菜菜。应此你可能需要《Feature Extraction and Image Processing》这本书。在CSDN上可以下到,我已经上传了。