一、基本概念
1.1 概念
形态学运算是针对二值图像依据数学形态学(Mathematical Morphology)的集合论方法发展起来的图像处理方法。
通常形态学图像处理表现为一种邻域运算形式,一种特殊定义的邻域称之为“结构元素”(Structure Element)。在每个像素位置上它与二值图像对应的区域进行特定的逻辑运算,逻辑运算的结果为输出图像的相应像素。
1.2 腐蚀与膨胀
形态学运算的效果取决于结构元素的大小、内容、逻辑运算的性质。
常见的形态学运算有:腐蚀(Erosion)、膨胀(Dilation)。
给定二值图像f(x,y)和作为结构元素的二值模板T(i,j),则典型的腐蚀和膨胀运算可以表示为:
① 腐蚀:
② 膨胀:
1.2.1 腐蚀
腐蚀是一种消除边界点,使边界向内部收缩的过程,可以用来消除小且无意义的物体。在原图像中对应结构元素中为黑色的那些点中有一个不是黑色,即将该点设为白色。
一般意义的腐蚀概念定义为:
左边为待腐蚀图像,右边为结构元素:
腐蚀之后产生图像:
1.2.2 膨胀
膨胀是将与物体接触的所有背景点合并到该物体中,使边界向外扩张的过程。可以用来填补物体中的空洞。在原图像中对应结构元素中为黑色的那些点中只要有一个是黑色,则将目标图像中的当前点赋成黑色;
一般意义的膨胀概念定义为:
左边为待膨胀图像,右边为结构元素:
膨胀之后图像:
1.3 包含、击中、不击中
1.3.1 概念
按照集合的概念,给定两个集合:对象(Object)和结构元素(Structure Element),它们之间有三种关系:包含、击中、不击中。我们令对象为X,结构元素为B
1.3.2 包含、击中、不击中与腐蚀、膨胀关系
腐蚀:由结构元素B对对象X腐蚀所产生的二值图像E是满足以下条件点(x, y)的集合:如果B的原点平移到点(x, y),那么B将完全包含于X中,其效果如图所示:
膨胀:由结构元素B对对象X膨胀所产生的二值图像D是满足以下条件点(x, y)的集合:如果B的原点平移到点(x, y),那么它与X的交集非空,其效果如图所示:
1.4 开运算与闭运算
1.4.1 开运算
开运算是指先腐蚀后膨胀的过程。用来消除小物体、在纤细点处分离物体、平滑较大物体的边界的同时并不明显改变其面积。
如图为开运算示意图:
1.4.2 闭运算
闭运算是指先膨胀后腐蚀的过程。用来填充物体内细小空洞、连接邻近物体、平滑边界的同时并不明显其面积。
如图所示为闭运算示意图:
1.5 击中击不中变换(Hit-Miss Transform)
将形态学运算推广到更为一般的情况,实际上就演变为条件严格的模板匹配。这时结构元素不仅含有物体点,而且含有背景点,只有当结构元素与所对应的区域完全符合时才作为结果输出到输出图像。
通俗来讲,击中击不中变换就是在A图像上找到和B图像一致的那块区域。我们令A图像为原图像,B图像为结构元素,即目标形状。
击中击不中算法步骤:
1. A图像为原图像,B图像为结构元素;
2. 确定结构元素,选取H为图B所示的形状。再选一个小窗口W,W包含H,M=W-H。
3. 求H对A的腐蚀结果
4. 求M对A补集的腐蚀
5. 两张腐蚀图片求交集
1.6 边界和骨架(Boundary and Skeleton)
边界运算:
抽骨架(Skeletonization)与细化不同主要在于中轴骨架在拐角处延伸到了边界,而细化则不是。抽骨架的一种方式:
1.7 细化(Thining)
细化可以通过逐步去掉满足匹配条件的点的方法来实现,每步运算可以表示成:
1.7.1 细化算法实现
经过一层层的剥离,从原来的图中去掉一些点,但仍要保持原来的形状,直到得到图像的骨架。骨架可以理解为图像的中轴。对于细化算法来说,好的细化算法一定要满足:
① 收敛性;
② 保证细化后细线的连通性;
③ 保持原图的基本形状;
④ 减少笔画相交处的畸变;
⑤ 细化结果时原图像的中心线;
⑥ 细化的快速性和迭代次数少;
1.7.2 细化算法分类
依据是否使用迭代运算可以分为两类:
① 非迭代算法:一次即产生骨架,如基于距离变换的方法(游程长度编码细化等);
② 迭代算法:即重复删除图像边缘满足一定条件的像素,最终得到单像素宽带骨架;
迭代方法依据其检查像素的方法又可以分为:
① 串行算法:是否删除像素在每次迭代的执行中是固定顺序的,它不仅取决于前次迭代的结果,也取决于本次迭代中已处理过像素点分布情况;
② 并行算法:像素点是否删除与像素值在图像中的顺序和分布情况无关,仅取决于前次迭代的结果。