图像处理基础知识系列之三:霍夫变换简单梳理

来源:互联网 发布:数据库接口怎么写 编辑:程序博客网 时间:2024/06/08 21:35

霍夫变换之简单梳理

一、霍夫变换

  霍夫变换(Hough Transform) 是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法。主要用来从图像中分离出具有某种相同特征的几何形状(如,直线,圆等)。最基本的霍夫变换是从黑白图像中检测直线(线段)。以上为百度百科内容。
  霍夫变换另一个思路的理解是把一个空间内难以解决不好解决的问题转移到对应的其他空间寻求解决办法。现在应用到直线检测与圆的检测中。
       先不涉及霍夫变换,先按普通的思路分析,怎样在一幅图片中找到存在其中的直线并把其画出来呢?其实对于人来讲比较简单,人眼搜索图片中所有区域,根据我们脑中直线的概念去找图片中对应的点的集合就对了。但是计算机不能这么做,我们看到的色彩绚烂的图片在计算机的理解中只是数量的矩阵,它能不能找到一条直线取决于根据人的参数设置找出对应的点的集合,而其自身没有对于直线的准确理解。

二、霍夫直线

       在笛卡尔x,y坐标系下,已知一系列离散点,怎样找出一张直线呢?若下图所示:
        
图1

一般思路,假设离散点有n个,随机挑选出两个点c1(x1,y1),c2(x2,y2)就可以确定一条直线,直线方程为kx+y=b,n个点最后可以确定(n-1)!个方程,统计方程的斜率与截距,两个参数都一致的表示离散点存在于一条直线上,这也是一种方法,计算量是多少呢?(n-1)!的计算量就很大了,最后斜率与截距还要两两比较,所以比较繁琐。
       霍夫变换把xy坐标系下的方程转换为kb空间,把x,y当成常数,而k,b为变量,方程变为:b+xk=y,在xy空间的经过一个特定点的所有直线在k,b坐标系下就是一条直线(可以联系一下降维的概念,复杂问题简单化,霍夫变换的工作),举个例子:设特定点ct=(3,4),在xy空间中由于k,b的取值不限,,所以经过特征点的直线集合为一个面。而在k,b空间,把ct带入b+xk=y后方程为b+3k=4,映射为一条直线,如下图所示:


      

      图2 左图为xy坐标系进过特定点ct的所有直线,未画完整      右图为所有直线在kb坐标系的投影,为一条直线


图3 左图为xy坐标系进过特定点1,2的所有直线,未画完整      右图为所有直线在kb坐标系的投影,为两条条直线

       看图2可以明白在xy坐标系下经过一个特征点的所有直线为一个面,映射到k,b空间为一条直线,看图3两个特定点映射到k,b空间为两条直线,两条直线相交确定一个点,这个交点(kt,bt)为在x,y的坐标系下表示经过两个特定点的一条直线(方程为kx+y=b)的kt,bt值。霍夫变换中还涉及到一个叠加原理,在这里表示为经过这个交点的直线越多,说明在xy坐标系下用kt,bt做参数的直线经过的点越多,这条直线越容易被检测出来。(以上图形为了直观展示,画图准确性不足)。现在我们回到计算量的问题上,图像上xy坐标系下的一个点映射到kb坐标系下画一条直线,计算一次,所以n个点对应着n次计算,计算量大幅减少,,霍夫变换的优势体现出来。
        但由xy空间到kb空间有一个问题,看方程:kx+y=b,特定点确定后,当k=0时,b=y,当b=0时,k=y/x,通过这两个点 就可以把直线画出来了,特殊情况是x=0时,也就是有点在y轴上时,k=y/x除数为0,k确定不了,方程也确定不了了。
        除了k,b空间,还有其他的空间吗?

图4
  xy坐标系还可以映射到rθ坐标系,如图4左上图所示:y=(-cosθ/sinθ)x+(r/sinθ),变换一下r=xcosθ+ysinθ。经过上边xy与kb空间变换我们得到的经验在这顺套,xy坐标系下的一条直线对应着rθ坐标系下的一个点,xy空间经过特定点的所有直线映射到到rθ空间为一条曲线(图4右上),多个特征点的所有直线映射到rθ空间为对应的曲线,若有交点,可以确定xy的一条直线(图4右下),同一交点上的曲线越多,说明xy空间一条直线上的已知点越多,直线越容易检测。同样计算量还是n级别的。解决了y轴点不能空间变换的问题。

三、霍夫圆

  大体原理相似,圆在xy空间方程,(x-a)^2+(y-b)^2=r^2,映射到abr三维空间,方程为:(a-x)^2+(b-y)^2=r^2,设特定点为ct(xt,yt),则经过ct的所有圆映射到abr空间为r=sqrt((a-xt)^2+(b-yt)^2)。为一个圆锥面。如下图所示(特定点为(30,30)):


图5
  两个特征点为两个圆锥面相交为一抛物线,三个圆锥面以上相交为一点,回到霍夫变换的叠加问题。
  参考文献:

  浅墨_毛星云:http://blog.csdn.net/poem_qianmo/article/details/26977557/。【OpenCV入门教程之十四】OpenCV霍夫变换:霍夫线变换,霍夫圆变换合辑。

        

阅读全文
0 0
原创粉丝点击