关于hough变换的个人理解

hough变换的本质理解

近来要检测直线,想从最经典的hough变换入手。所以从网上搜罗了资料,之前看过一次,貌似都懂了,结果放了半个月又都忘了,郁闷之余,只能重新搜罗。

其实本质上来说关键的是hough变换相当于一种映射变换,只不过是从一种表达方式换为另外一种。其根本思想是将原有的y=kx+b中的x,y看做固定值,而k,b看成变量来运算的。x-y坐标和k-b坐标有点----线的对偶性。刚开始一直不理解这个概念,后来多方阅读,感受到了,这里的对偶性指的是x-y系坐标中的点对应k-b坐标系中的线,x-y坐标系中的线对应k-b坐标系中的点,反之亦然。

之所以你会发现真正网上各种代码是用的极坐标形式是因为:为了避免直线的斜率为无穷大(y/x中x=0的情况)。所以实际应用中,是采用参数方程p=x*cos(theta)+y*sin(theta)。这样,图像平面上的一个点就对应到参数p---theta平面上的一条曲线上,其它的还是一样。

也就是说我们正规x-y坐标系中的线在变换之后,可以用点(p,theta)表示。

之所以说hough变换能检测已知形状的任何物体,是因为只要参数空间设定准确与正确,这种变换映射关系是可行的。

对于x-y坐标系变换到极坐标坐标系的方法如下:

hough线变换要做的就是追踪图像中的每个点对应曲线间的交点,如果交于一点的曲线的数量超过了设定的阈值,就认为交点所

代表的参数对(a,b)在原图像中为一条直线。

   

 另外,一般是选取图像左上角为极坐标原点,如果选取图像中心,需要注意坐标转换。左上角时x,y的正方向也需要注意,否则会产生数据处理错误。

参考网址:

http://www.kaixinwenda.com/article-cv_yuippe-8967390.html

 

下面网址原理介绍的比较好,之前看到一个更好的找不到了。

http://hi.baidu.com/tangsu2009/item/88475289bb40035a840fabda

http://blog.csdn.net/abcjennifer/article/details/7448513

 

hough变换的劣势

常规Hough变换虽然具有显著的优势,但其不足也不容忽视,如不加改进,有时将会令人无所适从,例如检测速度太慢,无法做到实时控制;精度不够高,期望的信息检测不到反而做出错误判断,进而产生大量的冗余数据。就圆检测而言,常规Hough变换的不足主要有以下几点:
1、参数由直线的两个参数,即截距和斜率,上升到三个,即圆心坐标和半径,每个点映射成参数空间的一个曲面,是一到多映射,因而计算量急剧增大;
2、需占用大量内存空间,耗时久、实时性差;
3、现实中的图像一般都受到外界噪声的干扰,信噪比较低,此时常规Hough变换的性能将急剧下降,进行参数空间极大值的搜索时由于合适的阈值难以确定,往往出现“虚峰”和“漏检”的问题。

hough变换的优势

Hough变换在检验已知形状的目标方面具有受曲线间断影响小和不受图形旋转的影响的优点,即使目标有稍许缺损或污染也能被正确识别。后期改进的基于概率的hough变换提高了精准度与速度。

先简单写这么多,以后有了新经验和理解再做补充 

你可能感兴趣的:(OpenCV,编程基础)