当前位置:文档之家› 基于matlab的霍夫变换

基于matlab的霍夫变换


• 有什么更好的方法么? 我们前面假定的图像 都是黑白图像(二值图像),实际上这些二值 图像多是彩色或灰度图像通过边缘提取来 的。我们前面提到过,图像边缘除了位置 信息,还有方向信息也很重要,这里就用 上了。根据圆的性质,圆的半径一定在垂 直于圆的切线的直线上,也就是说,在圆 上任意一点的法线上。这样,解决上面的 问题,我们仍采用2维的参数空间,对于图 像上的每一前景点,加上它的方向信息, 都可以确定出一条直线,圆的圆心就在这 条直线上。这样一来,问题就会简单了许 多。
点都变换后,对小格进行检验,计数值最 大的小格,其(a,p)值对应于直角坐标中所 求直线。
四、hough变换检测圆
• 再看下面一个问题:我们要从一副图像中 检测出半径以知的圆形来。这个问题比前 一个还要直观。我们可以取和图像平面一 样的参数平面,以图像上每一个前景点为 圆心,以已知的半径在参数平面上画圆, 并把结果进行累加。最后找出参数平面上 的峰值点,这个位置就对应了图像上的圆 心。在这个问题里,图像平面上的每一点 对应到参数平面上的一个圆。
• 接下来还有许多类似的问题,如检测出椭 圆,正方形,长方形,圆弧等等。这些方 法大都类似,关键就是需要熟悉这些几何 形状的数学性质。霍夫变换的应用是很广 泛的,比如我们要做一个支票识别的任务, 假设支票上肯定有一个红颜色的方形印章, 我们可以通过霍夫变换来对这个印章进行 快速定位,在配合其它手段进行其它处理。 霍夫变换由于不受图像旋转的影响,所以 很容易的可以用来进行定位。
• 把上面的问题改一下,假如我们不知道半 径的值,而要找出图像上的圆来。这样, 一个办法是把参数平面扩大称为三维空间。 就是说,参数空间变为x--y--R三维,对应圆 的圆心和半径。图像平面上的每一点就对 应于参数空间中每个半径下的一个圆,这 实际上是一个圆锥。最后当然还是找参数 空间中的峰值点。不过,这个方法显然需 要大量的内存,运行速度也会是很大问题。
• 三、hough变换检测直线
• 设已知一黑白图像上画了一条直线,要求 出这条直线所在的位置。我们知道,直线 的方程可以用y=k*x+b 来表示,其中k和b是 参数,分别是斜率和截距。过某一点(x0,y0) 的所有直线的参数都会满足方程y0=kx0+b。 即点(x0,y0)确定了一族直线。方程y0=kx0+b 在参数k--b平面上是一条直线,(你也可以是 方程b=-x0*k+y0对应的直线)。如下图1所示:
• 霍夫变换有许多改进方法,一个比较重要 的概念是广义霍夫变换,它是针对所有曲 线的,用处也很大。就是针对直线的霍夫 变换也有很多改进算法,比如前面的方法 我们没有考虑图像上的这一直线上的点是 否连续的问题,这些都要随着应用的不同 而有优化的方法。
五、程序实现(圆)
• 上文中提到了检测圆的切线的方法,这里 暂且不讨论,这里讨论经典HOUGH算法。 下面为我写的利用极坐标表示圆的一种算 法流程:
基于matlab的霍夫变换
• 一、简单介绍 • 二、基本原理 • 三、hough变换检测直线 • 四、hough变换检测圆 • 五、程序实现(圆) • 六、总结
一、简单介绍
• Hough变换是图像处理中从图像中识别几何 形状的基本方法之一。Hough变换的基本原 理在于利用点与线的对偶性,将原始图像 空间的给定的曲线通过曲线表达形式变为 参数空间的一个点。这样就把原始图像中 给定曲线的检测问题转化为寻找参数空间 中的峰值问题。也即把检测整体特性转化 为检测局部特性。比如直线、椭圆、圆、 弧线等。
• 也就是说,极坐标a-p上的一点(a,p),对应 于直角坐标X-Y中的一条直线,而且它们是 一一对应的。为了检测出直角坐标X-Y中由 点所构成的直线,可以将极坐标a-p量化成
许多小格。根据直角坐标中每个点的坐标 (x,y),在a = 0-180°内以小格的步长计算各 个p值,所得值落在某个小格内,便使该小 格的累加记数器加1。当直角坐标中全部的
平面上的三条直线,而这三条直线会相交 于一点(k=1,b=0)。
• 同理,原图像上直线y=x上的其它点(如 (3,3),(4,4)等) 对应参数平面上的直线也会 通过点(k=1,b=0)。这个性质就为我们解决问 题提供了方法,就是把图像平面上的点对 应到参数平面上的线,最后通过统计特性 来解决问题。假如图像平面上有两条直线, 那么最终在参数平面上就会看到两个峰值 点,依此类推。
• 简而言之,Hough变换思想为:在原始图像 坐标系下的一个点对应了参数坐标系中的 一条直线,同样参数坐标系的一条直线对 应了原始坐标系下的一个点,然后,原始
• 坐标系下呈现直线的所有点,它们的斜率 和截距是相同的,所以它们在参数坐标系 下对应于同一个点。这样在将原始坐标系 下的各个点投影到参数坐标系下之后,看 参数坐标系下有没有聚集点,这样的聚集 点就对应了原始坐标系下的直线。这个性 质就为我们解决问题提供了方法:
• 二、基本原理
• Hough变换的基本原理在于,利用点与线的 对偶性,将图像空间的线条变为参数空间 的聚集点,从而检测给定图像是否存在给 定性质的曲线(圆的方程为:(x-a)^2+(yb)^2=r^2,通过Hough变换,将图像空间对 应到参数空间)。
• 霍夫变换是图像处理中从图像中识别几何 形状的基本方法之一,应用很广泛,也有 很多改进算法。最基本的霍夫变换是从黑 白图像中检测直线(线段)。
从图1中可看出,x-y坐标和k-b坐标有点----线 的对偶性。x-y坐标中的点P1、P2对应于k-b坐 标中的L1、L2;而k-b坐标中的点P0对应于x-y
坐标中的线L0 。
• 这样,图像x--y平面上的一个前景像素点就
对应到参数平面上的一条直线。我们举个
例子说明解决前面那个问题的原理。设图 像上的直线是y=x, 我们先取上面的三个点: A(0,0), B(1,1), C(22)。可以求出,过A点的直 线的参数要满足方程b=0, 过B点的直线的参 数要满足方程1=k+b, 过C点的直线的参数要 满足方程2=2k+b, 这三个方程就对应着参数
• Hough变换能够查找任意的曲线,只要你给 定它的方程。Hough变换在检验已知形状的 目标方面具有受曲线间断影响小和不受图
形旋转的影响的优点,即使目标有稍许缺 损或污染也能被正确识别。
输出结果是: par1=205,par2=180,par3=174
Байду номын сангаас
• 首先,我们初始化一块缓冲区,对应于参 数平面,将其所有数据置为0。
• 然后,对于图像上每一前景点,求出参数 平面对应的直线,把这直线上的所有点的
值都加1。 • 最后,找到参数平面上最大点的位置,这
个位置就是原图像上直线的参数。
• 上面就是霍夫变换的基本思想。就是把图 像平面上的点对应到参数平面上的线,最 后通过统计特性来解决问题。假如图像平 面上有两条直线,那么最终在参数平面上 就会看到两个峰值点,依此类推。
• 1.图像灰度化,二值化(注意:二值化的 好坏对检测结果有很大影响,常用的有 SOBEL算子)
• 2.检测图像中的边缘点,并保存其坐标位 置。设置角度theta的变化范围和步长,
• 半径r的变换范围和步长。
• 3.利用公式x=a+rcos(theta),y=b+rsin(theta)求 出a和b的值。(注意:x和y为实际的图像空 间某个边缘点的坐标,a和b为其对应的参 数空间的坐标),如果a和b的值在合理的 范围之类,则对该位置进行累加。
六、总结
• 图像空间中的在同一个圆,直线,椭圆上 的点,每一个点都对应了参数空间中的一 个图形,在图像空间中这些点都满足它们 的方程这一个条件,所以这些点,每个投 影后得到的图像都会经过这个参数空间中 的点。也就是在参数空间中它们会相交于 一点。所以,当参数空间中的这个相交点 的越大的话,那么说明元图像空间中满足 这个参数的图形越饱满。越象我们要检测 的东西。
• 在实际应用中,y=k*x+b形式的直线方程没 有办法表示x=c形式的直线(这时候,直线的 斜率为无穷大)。所以实际应用中,是采用 参数方程p=x*cos(theta)+y*sin(theta)。这样, 图像平面上的一个点就对应到参数p---theta
平面上的一条曲线上。其它的还是一样。 在极坐标a-p中变为一条正弦曲线,a取(0180°)。可以证明,直角坐标X-Y中直线上 的点经过Hough变换后,它们的正弦曲线在 极坐标a-p有一个公共交点,如图2所示:
相关主题