<数字图像处理的MATLAB实现笔记>第11章 表示与描述(一)

来源:互联网 发布:重庆快乐十分遗漏数据 编辑:程序博客网 时间:2024/05/22 12:49

    首先背景知识中说:令S表示一幅图像中像素的子集,也就是说S是图像中任选的一部分,如果在S中组成它们的所有像素间都存在通路,就说两个像素p和q在S中是连接着的。对于S中的任何像素p,在S中连接p的像素的集合称为连通分量其实一直对连通分量不是很了解。如果大家谁比较清楚的,望指点一二如果仅有一个连通分量,S将被称为连通集。在一幅图像中,如果R是连通集,那么像素的子集R被称为图像的区域。也就说图像区域首先必须是个连通集。

     区域的边界(也称为边缘或轮廓)定义为区域像素的集合,这些像素有一个或多个相邻的像素不在区域内。这里,不太清楚为什么会有相邻像素不在区域里呢,边界上的点通过它邻接的点不是还是可以和其他点连接吗?边界或区域上的点称为前景点,否则它们就是背景点。定义孔洞为由前景像素的连接边界环绕的背景区域。

      边界是点的连接集合。如果边界上的点形成顺时针或逆时针序列,就称边界上的点为有序的。如果边界上的每个点恰好有两个值为1的相邻像素点,而且它们不是4邻接的,边界将被称为最低限速连接的最低限速连接的边界有何特殊之处呢?内点被定义为区域内除边界外的任意位置的点。

       工具箱函数bwlabel计算二值图像中所有的连通分量(区域):[L,num]=bwlabel(f,conn),其中f是输入图像,conn指定了期望的连通性(4连接或8连接,默认为8连接)。num是找到的连通分量数,L是标记矩阵,L对每个连通分量分配唯一的1到num的整数。函数bwperim的语法如下:g=bwperim(f,conn)这个函数返回二值图像g,其中仅包含f中所有区域的周界(边界)像素。这个函数中conn指定背景的连通性:4连接(默认)或8连接。这样,为了得到4连接的区域边界,可以把conn指定为8,8连接的边界可通过将conn指定为4得到。当bwperim产生一幅包括边界的二值图像时,函数bwboundaries提取二值图像f中所有区域的真实边界坐标,语法如下:B=bwboundaries(f,conn,options),conn相对于边界本身,并且值为4或8(默认),参数options的值可以为‘holes’和‘noholes’.使用holes会提取区域和孔洞的边界,也可以提取嵌套在区域内的区域边界。使用noholes只能得到区域或其子区域的边界。首先在B中列出区域,紧跟着是孔洞。输出的B是px1的单元数组,其中,P是物体数。单元数组中每个单位都包含一个npx2的矩阵,其中的行是边界像素的行列坐标,np是相应区域的边界像素数。每个边界坐标都是以顺时针方向安排的,并且边界的最后一点与第一个点相同,这样就提供了闭合的边界。记住,B是单元数组,可以使用函数flipup改变边界B{k}的行进顺序,从顺时针改为逆时针(反之亦然)。Breversed{k}=flipup(B{k})。函数bwboundaries的另一种有用语法是[B,L]=bwboundaries(...)L是标记矩阵(与f的尺寸一样),使用不同的整数来标记f的每个元素(无论是区域还是孔洞)。背景像素标记为0,。区域和孔洞数由max(L(:))给出。[B,L,NR,A]=bwboundaries(...)返回找到的孔洞数NR,逻辑稀疏矩阵A,它详细描述了父-子-孔洞的依赖关系。由B{k}闭合的更直接的边界由下列语句给出:boundaryEnclosed=find(A(:,k))或boundaryEnclosing=find(A(k,:)).构建一幅包含感兴趣边界的二值图像是很有用的。以npx2坐标数组形式给定边界b,下列函数g=bound2im(b,M,N)将产生在b中的坐标处为1,背景为0,尺寸为MXN的二值图像g.典型的,M=size(f,1)且N=size(f,2)。其中,f是一幅图像,它来自得到的b.这样f和g在空间上已配准。如果函数bwboundaries找到了多个边界,就可以得到所有的坐标,通过单位数组B的连通分量将函数bound2im用于坐标的单一数组b:b=cat(1,B{:}).

1 0