形态学图像处理3

细化算法

“骨架”是指一幅图像的骨骼部分,描述物体的几何形状和拓扑结构,是重要的图像描绘子之一。计算骨架的过程一般被称为“细化”或“骨骼化”,对目标物体进行细化有助于突出目标的形状特点和拓扑结构,减少冗余的信息。

思路:我们假定一个图像的3×3区域标记为P1,P2,....,P9,如下,

· · · ·
· P3 P2 P9
· P4 P1 P8
· P5 P6 P7

规定1表示黑色,0表示白色,如果中心P1=1(为黑),若同时满足下列4个条件,则删除P1(令P1=0),

  1. 2<=NZ(P1)<=6;
  2. Z0(P1)=1;
  3. P2×P4×P8=0或者Z0(P1)不等于1;
  4. P2×P4×P6=0或者Z0(P4)不等于1;

其中,NZ(P)表示P点的8邻域中1的数目,如下表所示,

· · · ·
· P-1,-1 P-1,0 P-1,1
· P0,-1 P0,0 P0,1
· P1,-1 P1,0 P1,1

而Z0(P)按照以下方式计算,

nCount=0;
if P-1,0=0 && P-1,-1=1
        nCount++;
if P-1,-1=0 && P0,-1=0
        nCount++;
if P0,-1=0 && P1,-1=1
        nCount++;
if P1,-1=0 && P1,0=1
        nCount++;
if P1,0=0 && P1,1=1
        nCount++;
if P1,1=0 && P0,1=1
        nCount++;
if P0,1=0 && P-1,1=1
        nCount++;
if P-1,1=0 && P-1,0=1
        nCount++;
Z0(P)=nCount;

而后对图像中的每一个点都进行重复这些步骤,直到所有的点都不可删除为止。

像素化算法

细化通常适用于和物体拓扑结构或形状有关的应用,比如手写字符识别等,但有时候关心的是目标对象是否存在,它们的位置关系或者是个数,这个时候我们就可以用像素化的方法进行预处理。

像素化的操作就是先找到在二值图像中所有的连通区域,然后用这些区域的质心作为这些连通区域的代表,即将一个连通区域化为位于连通区域质心的一个像素

有时候为了过滤噪声,我们可以设定一个低阈值lowerThres和一个高阈值upperThres用来指出图像中所需要的对象的连通数(也就是连通分量的像素数目),就可以将连通数在范围之外的对象滤除。

凸壳

如果连接物体A内任意两点的直线段都在A的内部,则称A是凸的,**任意物体A的凸壳H是包含A的最小凸物体。

因为光照不均等其他原因,所以图像在二值化之后,本身形状容易发生破损,也就不那么容易找到质心,所以适当的进行凸壳处理,可以找到包含原始形状的最小凸多边形,便于找到物体质心而后进行像素化处理。

bwmorph()函数

matlab中有一个bwmorph()函数,很多形态学操作都可以利用这个函数进行实现,

Iout=bwmorph(I,operation,n);

参数说明:

  • I为输入二值图像;
  • operation是一个指定操作类型的字符串,有如下取值,
合法取值 功能描述
‘bridge’ 桥接由单个像素缝隙分隔的前景像素
‘clean’ 清除孤立的前景像素
‘diag’ 围绕对角线相连的前景像素进行填充
‘fill’ 填充单个像素的孔洞
‘hbreak’ 去掉前景中的H形连结
‘majority’ 如点P的8邻域中一半以上的像素为前景像素,则使P也为前景像素;否则P为背景像素
‘remove’ 去除内部像素(无背景像素相邻的前景像素)
‘shrink’ 将物体收缩为一个点或者带洞的环形
‘skel’ 骨骼化图像
‘spur’ 去除毛刺
‘thicken’ 粗化物体
‘thin’ 将物体细化至最低限度相连的线形
  • 可选参数n是一个正整数,用于指定将被重复操作的次数,默认为1。当设定为n=Inf时表示重复操作一直到图像停止改变为止。
  • Iout为经过n次operation参数指定操作后的输出图像。

你可能感兴趣的:(形态学图像处理3)