基本的运算包括:二值腐蚀和膨胀、二值开闭运算、骨架抽取、极限腐蚀、击中击不中变换、形态学梯度、Top-hat变换、颗粒分析、流域变换、灰值腐蚀和膨胀、灰值开闭运算、灰值形态学梯度等。
注意:腐蚀和膨胀是对白色部分(高亮部分)而言的,不是黑色部分。膨胀就是图像中的高亮部分进行膨胀,“领域扩张”,效果图拥有比原图更大的高亮区域。腐蚀就是原图中的高亮部分被腐蚀,“领域被蚕食”,效果图拥有比原图更小的高亮区域。
注意: 大多数图像,一般相对于背景而言物体的颜色(灰度)更深, 二值化之后物体会成为黑色, 而背景则成为白色, opencv中将物体用黑色(灰度值0)表示, 而背景用白色(灰度值255)表示,但Matlab 在二位图像形态学处理中,默认情况下白色的是前景(灰度值为1或255),黑色的为背景, 因而本章涉及Matlab 的所有程序实例又都遵从Matlab本身的这种前景认定习惯.
实际上, 无论以什么灰度值为前景和背景都只是一种处理上的习惯, 与形态学算法本身无关。例如对于上面两幅图片, 只需要在形态学处理之前先对图像反色就可以在两种认定习惯之间自由切换。
膨胀与腐蚀能实现多种多样的功能,主要如下:
腐蚀与膨胀是相反的操作,腐蚀是求局部最小值。高亮区域逐渐变小,减少的多少由结构元素决定,如果高亮部分小于结构元素,则腐蚀后高亮部分将完全消失,如果高亮部分小于结构元素,则腐蚀后在细连通处断裂。
腐蚀的过程相当于对可以填入结构元素的位置作标记的过程
效果图:
1.4 开操作(Opening Operation)
开操作(Opening Operation)先腐蚀后膨胀,其数学表达式如下:
特点:使图像的轮廓变得光滑, 使狭窄的连接断开和消除细毛刺,滤除噪声,同时并没有对物体的形状、面积造成明显的影响,
但当我们只关心物体的位置或者个数时,物体形状的改变不会给我们带来困扰,此时用腐蚀滤波具有处理速度上的优势〈同开运算相比节省了一次膨胀运算〉。
1.5 闭操作(Closing Operation)
闭操作(Closing Operation)先膨胀后腐蚀,其数学表达式如下:
特点:能够弥合狭窄的间断, 填充小的孔洞,填补轮廓线中的断裂、也会平滑轮廓的一部分。
1.6 击中击不中变换
效果图:
1.7 形态学梯度(Morphological Gradient)
形态学梯度(Morphological Gradient)为膨胀图与腐蚀图之差
特点:对二值图像进行这一操作可以将团块(blob)的边缘突出出来。我们可以用形态学梯度来 保留物体的边缘轮廓。顶帽运算(Top Hat)为原图像与“开运算“的结果图之差
特点:开运算放大了局部低亮度区域,因此,从原图中减去开运算后的图,得到的效果图 突出了比原图轮廓周围的区域更明亮的区域,且这一操作和选择的核的大小相关。
顶帽运算往往用来分离比邻近点亮一些的斑块。当一幅图像具有大幅的背景的时候,而微小物品比较有规律的情况下,可以使用顶帽运算进行背景提取。
黑帽(Black Hat)运算为”闭运算“的结果图与原图像之差。数学表达式为:
闭运算放大了局部高亮度区域。黑帽运算后的效果图 突出了比原图轮廓周围的区域更暗的区域,且这一操作和选择的核的大小相关。所以,黑帽运算用来分离比邻近点暗一些的斑块。
总结:
顶帽和黑帽都是做差求得的,最后显示的都是放大的区域。
区域填充可视为边界提取的反过程, 它是在边界已知的情况下得到边界包围的整个区域的形态学技术。
2.1 连通分量提取及其实现提取连通分量的过程实际上也是标注连通分量的过程, 通常的做法是给原图像中的每个连通区分配一个唯一代表该区域的编号, 在输出图像中该连通区内的所有像素的像素值就赋值为该区域的编号, 我们将这样的输出图像称为标注图像。
2.2 骨架提取
图像骨架提取,实际上就是提取目标在图像上的中心像素轮廓。说白了就是以目标中心为准,对目标进行细化,一般细化后的目标都是单层像素宽度。
骨架提取算法无外乎分为迭代和非迭代两大类。在迭代算法中,又分为并行迭代和顺序迭代两种。
介绍两种提取算法,它们分别来源于论文[1](K3M顺序迭代)、[2](Zhang-Suenalgorithm,并行迭代)。
这两种方法都是对二值图像操作的,思想都是从目标外围往目标中心,利用以待检测像素为中心3*3像素窗口的特征,对目标不断腐蚀细化,直至腐蚀到不能再腐蚀(单层像素宽度),就得到了图像的骨架。
思想是,提取目标外围轮廓,然后利用轮廓腐蚀目标图像边界(这是一次迭代过程),直至腐蚀到不能再腐蚀。
算法分为两块
第一块,不断腐蚀,提取出伪骨架(部分区域有两层像素宽度,但已经很接近真实骨架)。
第二块,从伪骨架中提取真实骨架。
2.2.2 Zhang-Suen algorithm
该算法每一次的迭代步骤是对符合特定条件的目标像素,进行腐蚀,效果就是目标变得越来越细。不断的迭代,直到在上一次腐蚀后的目标在本轮操作中,没有新的像素点被腐蚀,算法结束。
下面说一下此算法的四个条件:
条件(a):中心像素P1周围的目标像素(二值中的1)的个数之和在2和6之间。
条件(b): 8邻域像素中,按顺时针方向,相邻两个像素出现0->1的次数。
条件(c)(d)有两种模式,一种上面提到过,下面是另一种。
参考:https://blog.csdn.net/whuhan2013/article/details/53956606
https://blog.csdn.net/poem_qianmo/article/details/23710721
https://blog.csdn.net/zhubaohua_bupt/article/details/76850555