注:笔者水平有限,此博客目的为学习记录,方便以后复习。
9.1 预备知识
本节介绍一些集合理论中的基本概念,并讨论MATLAB的逻辑运算符对于二值图像的应用。
9.1.1 集合论中的基本概念
若(x,y)是Z^2中的整数,f是为每对不同的坐标(x,y)分配亮度值(即来源于实数集R中的实数)的映射,则函数f(x,y)称为数字图像。
除去基本的交并运算外,形态学运算中通常还需要两个运算符,这两个运算符是特别针对于元素均为像素坐标的集合的,定义如下:
9.1.2 二值图像、集合和逻辑运算符
一副二值图像可以看成是x,y的二值函数,形态学理论中把二值图像看成是其前景像素的集合(1值)。二值图像间可以进行集合的交并运算,之后仍为二值图像;若A和B中的像素为前景像素,运算后仍为前景像素。
9.2 膨胀和腐蚀
9.2.1 膨胀
膨胀是在二值图像中“加长”或“变粗”的操作。这种特殊的方式和变粗的程度由一个称为结构元素的集合控制。
膨胀运算的过程如下:结构元素的原点必须标明,之后,将该结构元素的原点在原图像上平移,元素内有1与原图像中的1重合时,结构元素原点所在的点变为1值。
数学上,膨胀定义为集合运算:
可使用imdilate()函数执行膨胀运算
A2 = imdilate(A,B);
膨胀可应用于图像增强:
9.2.2 膨胀元素的分解
膨胀满足结合律,因此,结构元素可以进行分解。又因为计算膨胀所需要的时间正比于结构元素中非零元素的个数,因而可以通过对结构元素进行分解减少运算时间。
例如,一个55的全1结构元素,可以分解为15的全1结构元素与5*1的全1结构元素相膨胀,速度可提升约2.5倍。
9.2.3 函数strel
函数strel用于构造各种形状和大小的结构元素,其基本语法为:
se = strel(shape,parameters)
其中,shape是指定希望形状的字符串,parameters是指定形状信息(如大小)的一列参数。
strel不显示通常的MATLAB矩阵,而是返回一个称为strel对象的特殊量,显示其邻域、结构元素中值为1的像素数、分解中的结构元素数以及分解中的结构元素中值为1的总像素数。函数getsequence可用于提取并检查分解其中的单个结构元素。
decomp = getsequence(se);
strel型对象,在imdilate处理过程中会自动使用分解信息来加快膨胀过程。
9.2.4 腐蚀
腐蚀“收缩”或“细化”二值图像中的对象。收缩同样由一个结构元素控制。
其运算过程如下图所示:即只有完全匹配是才为1,否则置0。
腐蚀的数学定义如下:
腐蚀用函数imerode来实现。当我们想要去除图像中的细线,但想保留其他结构时,可以通过选取一个足够小的结构元素来匹配中心方块实现。
9.3 膨胀与腐蚀的组合
9.3.1 开运算和闭运算
A被B形态学开运算:A被B腐蚀后再用B来膨胀得到的腐蚀结果,即:
**应用:**形态学开运算完全删除了不能包含结构元素的对象区域,平滑了对象的轮廓,断开了狭窄的连接,去掉了细小的突出部分。
A被B的形态学闭运算与开运算相反,即先膨胀再腐蚀。
应用:形态学闭运算也会平滑对象的轮廓,但一般会将狭窄的缺口连接起来形成细长的弯口,并填充比结构元素小的洞。
形态学开运算与闭运算可用MATLAB工具箱函数imopen imclose实现。
C1 = imopen(A,B);
C2 = imclose(A,B);
A是一副二值图像,B可用strel生成。
应用: