第五章 目标分析 ( Shape Analysis)
第五章 目标分析 ( Shape Analysis). 问题: (1) 问图象中有几类目标,几个目标。 (2)问面积大于 S 的有几类目标,几个目标。 (3问满足一定形状的有几个目标。 诸如此类的问题都需要用到连通性分析和形状分析。. 5.1 霍夫变换( Hough Transform). 5.1.1 线条检测 ( Line Detection) 1.思想: 统计学生的众数….。 2. Hough 变换 :从区域的边界(空间域)到参数空间的变换,用大多数边界点(众数)满足的对应的参数来描述区域的边界。
第五章 目标分析 ( Shape Analysis)
E N D
Presentation Transcript
第五章 目标分析 (Shape Analysis) 问题:(1)问图象中有几类目标,几个目标。 (2)问面积大于S的有几类目标,几个目标。 (3问满足一定形状的有几个目标。 诸如此类的问题都需要用到连通性分析和形状分析。 5.1 霍夫变换(Hough Transform) 5.1.1线条检测(Line Detection) 1.思想:统计学生的众数….。 2.Hough变换:从区域的边界(空间域)到参数空间的变换,用大多数边界点(众数)满足的对应的参数来描述区域的边界。 3.(k,b)空间:如果知道很多 个边缘点(x0 ,y0)……( xn , yn ),检测其中是否有直线。假设有直线且该直线的方程为y =kx +b ,则有: y0 =kx0 +b ,y1=kx1 +b,……,yn=kxn +b同时满足。若构造一个计数器 count[k][b];则有 count[k][b]=n+1。现在的情况是:求 k,b 和多少个点落到该直线 y=k x+b上。 任明武,南京理工大学计算机系
for (k = k1; k < k2; k++ ) • for ( b = b1; b < b2; b++ ) • { for ( i= 0; i < n+1; i ++) • if ( yi = k*xi +b ) count[k][b]++; • } • 因此,寻找count中的最大值,则该最大值对应的(k,b)即为所求。 • 4.(ρ,θ)空间: 在直角坐标系XOY中,任一直线L均可由参数空间(ρ,θ)中的一个点(ρ’,θ’)来表示,ρ’是原点到直线L的距离,θ’是X轴与直线L的法线间的夹角。即y=kx + b 变成求 x*cosθ’+y*sinθ’ = ρ’。即:给定一个( ρ’,θ’),则唯一确定一条直线。算法如下: • for (ρ=ρ1;ρ<=ρ2;ρ+=stepρ) • for(θ=θ1;θ<=θ2;θ+=stepθ) • { for(i=0;i<=n;i++) • if(ρ==xi*cos(θ)+yi*sin(θ)) count[ρ][θ]++; • } 任明武,南京理工大学计算机系
问题: (1) for(θ=θ1;θ<=θ2;θ+=stepθ) for(i=0;i<=n;i++) { ρ==xi*cos(θ)+yi*sin(θ); count[ρ][θ]++; } (2)cos (θ)和sin(θ)变成查找表cos[θ]和sin[θ]。 (3)ρ和θ的定义域的确定。 (4)坐标原点的选择。 (5)精确性取决于stepρ和stepθ,显然它们越小,精确度越高。 但越小,count[ρ][θ]越不容易形成峰值。可先用Hough变换,再用直线拟和。 任明武,南京理工大学计算机系
高效编程:直线的Hough变换: int cosV, sinV; for(theta = theta1; theta<theta2; theta+=step_theta) { cosV = cos(theta)*2048; sinV = sin(theta)*2048; for(i=0; i<n; i++) { thro = (x[i]*cosV + y[i] *sinV) >>9; // 相当于除以512 ….. } } 望同学们好好思考该程序的优点。 任明武,南京理工大学计算机系
例:印签识别系统中的方章检测 二值图像 水平扫描:最左和最右 垂直扫描:最上和最下 并集 当并集有若干条直线时,则在count[ρ][θ]表现出有若干个极大值,从而可以检测出多条直线。 在实际应用中,当被鉴印鉴仅有略微倾斜时,可仅使用最左点集合进行Hough变换求得印鉴的左边界,此时仅需要在count找一个最大值即可,而且由于中相邻的 点之间纵坐标是加1的关系,可以简化计算。同理,可以求右边界、上边界和下边界。 任明武,南京理工大学计算机系
5.1.2圆检测(Circle Detection) 圆的Hough变换:(x – a)2 + (y – b)2 = R。对(a,b,R)的求解,若用穷举法,则需要三重循环,则速度慢。所以实际应用中常根据被处理对象的具体特征,来设计不同的简化算法。 例:印签识别系统中的圆章检测 由于被鉴印鉴图像中只有一枚印鉴,在理想情况下,当逐行扫描图像时,在每一行中,最先遇到的黑色象素和最末遇到的黑色象素显然是外轮廓上的点;当逐列扫描图像时,在每一列中,最先遇到的黑色象素和最末遇到的黑色象素显然是外轮廓上的点;所以,采用下面的算法可以求得可能的位于外轮廓上的点的集合。 二值图像 水平扫描:最左和最右 垂直扫描:最上和最下 并集 任明武,南京理工大学计算机系
由于被鉴印鉴图像中只有一枚印鉴,所以构造一维的参数空间和计数器,按水平扫描得到的最左和最右点,计算它们的坐标中点dx,将count[dx]的值增加1,则count[dx]中的最大值对应的dx就是最可能的圆心横坐标a。由于被鉴印鉴图像中只有一枚印鉴,所以构造一维的参数空间和计数器,按水平扫描得到的最左和最右点,计算它们的坐标中点dx,将count[dx]的值增加1,则count[dx]中的最大值对应的dx就是最可能的圆心横坐标a。 同理可以计算圆心纵坐标b。 根据标准章的已知半径r,令R在[r-a,r+a]区间按步长1连续变化,对并集中的点,统计满足(x – a)2 + (y – b)2= R 的个数count[R],则则count[R]中的最大值对应的R就是最可能的圆半径R。 从而将一个3重循环,简化为了3个1重循环,即a*b*R变成了a+b+R,提高了速度。 任明武,南京理工大学计算机系
5.2 基于链码的图像分析 下面我们基于链码,讨论3个问题: (1)怎么知道图象中有几个目标。 (2)怎么算每个目标的面积和周长。 (3)怎么更好的描述目标的轮廓。 5.2.1链码 (Chain Code,Freeman Code,Direction Code) 在二值图象中,一个目标可唯一由它的轮廓线确定。 因而可将二值图象的矩阵描述可逆地转化成轮廓线的描述。 从而可节省存储空间,而且轮廓线的描述,更有利于目标识别,目标测量等。 所谓轮廓线就是一个个轮廓点 (xi, yi)(xi+1, yi+1)…构成的闭合曲线。而由(xi, yi)到(xi+1, yi+1)可唯一地由链码确定,而且存储链码最多需要3bits,比存储(xi+1, yi+1)更节省空间,而且链码同时告诉了轮廓的走向,所以轮廓线常表示为(x0, y0) C0C1…Cn,其中0 C 7是链码。所谓轮廓点就是属于R,但至少有一个邻居属于-R的象素。 链码生成基于边界点间的相互连通性。连通性按四邻接或八邻接定义。四邻接是指仅当两个点上下或左右相邻时才是连通的,如左图所示。八邻接是指除了上下左右外,还可以有四个斜向的邻接,如右 任明武,南京理工大学计算机系
图所示。四连通链码只需要四个符号就可以表示,通常用0~3,八连通链码需要0~7八个方向符号。图所示。四连通链码只需要四个符号就可以表示,通常用0~3,八连通链码需要0~7八个方向符号。 例: 0 1 2 3 4 0 0 0 0 0 0 得到链码描述如下: (1,1)0066644222 1 0 8 8 8 0 2 0 8 8 8 0 3 0 8 8 8 0 4 0 8 8 8 0 任明武,南京理工大学计算机系
5.2.2轮廓跟踪算法 (Contour Tracing Algorithm) 4连通(4-connected): 4个直接邻居。 8连通(8-connected): 4个直接邻居和4个简接邻居。 例: * * * * * * * * * * * 若使用4连通,则得到3个目标,每个链码需要 2bits;若使用8连通,则得到1个目标,每个链码需要 3bits。跟踪算法一般对目标采用8连通,对背景采用4连通。 任明武,南京理工大学计算机系
一般说来,轮廓线跟踪算法可分为3个主要部分,即:一般说来,轮廓线跟踪算法可分为3个主要部分,即: (1)怎样发现一条新的轮廓线。(怎么选择起点) (2)怎样跟踪轮廓并避免重复跟踪。(怎么寻找下一个轮廓点) (3)一条轮廓线的跟踪该何时停止。(怎么不破坏连通性,即不要把一个目标跟踪成两个目标) 参考文献: Mingwu Ren, Jingyu Yang, Han Sun, “Tracing Boundary Contours in a Binary Image”, Image and Vision Computing, 20(2), pp.125-131,2002(EI,SCI收录)(目前最简单最快最完备的算法) 5.2.3轮廓填充算法 (Contour Filling Algorithm) 基于链码的轮廓填充作为轮廓跟踪的反过程也一直受到重视,在离散的空间中,传统意义上的奇偶性填充已不能在图象领域内使用,种子填充除能应用在交互式计算机图形领域外,也几乎不能在图象领域内使用。鉴于图象目标的轮廓复杂性高,和链码能够描述任意复杂的轮廓,基于链码的填充成为图象处理中目标填充的主要方式。使用轮廓填充还可以很方便地取出区域中所有象素的灰度值,从而可由此计算区域的各种参数,如区域的各阶矩,也可统计区域中象素的灰度分布。 任明武,南京理工大学计算机系
下述文献将给出一种能正确快速地填充跟踪任意复杂目标的内外轮廓的填充算法,并使该算法在空间和时间的花费上都少于现有的算法。 参考文献: 任明武,杨静宇,孙涵, 一种快速的基于链码描述的轮廓填充方法, 中国图象图形学报,2001,6(4):248-352。 5.2.4基于链码的形状参数计算 基于轮廓的链码表示,可以求出轮廓的周长、在某个方向上的宽度、目标的面积、对x轴的一阶矩和二阶矩、形心的位置、链到直线的距离、链中角点和直线段等。详见徐建华编著《图像处理与分析》1992,科学出版社。 下面我们仅讲述其中的周长和面积的计算。 周长: 其中, ne是链中具有偶数值的链码的个数, no是链中具有偶数值的链码的个数。 任明武,南京理工大学计算机系
面积:令 则 实质是对x轴的积分fydx。其中, dx和dy分别是横坐标和纵坐标的偏移量表,显然有: 例: 则contour=(2,1)567700022224444 S=(-1)*(1+0.5)+0*(2+0.5)+1*(3+0.5)+1*(4 +0.5)+1*(5+0)+1*(5+0)+1*(5+0)+0*(5-0.5) +0*(4-0.5)+0*(3-0.5)+0*(2-0.5)+(-1)*(1+ 0)+(-1)*(1+0)+(-1)*(1+0)+(-1)*(1+0)=22.5 任明武,南京理工大学计算机系
可以看出该面积公式需要改进,改进如下: 其中, dx、dy和∆表如下: 任明武,南京理工大学计算机系