《数字图像处理》-(8)形态学图像处理详细

1 形态学基本操作

按数学方面来说,膨胀或者腐蚀操作就是将图像(或图像的一部分区域,我们称之为A)与核(我们称之为B)进行卷积。
核可以是任何的形状和大小,它拥有一个单独定义出来的参考点,我们称其为锚点(anchorpoint)。多数情况下,核是一个小的中间带有参考点和实心正方形或者圆盘,其实,我们可以把核视为模板或者掩码。

1.1 膨胀

膨胀:就是求局部最大值的操作。
膨胀是求局部最大值的操作:核B与图形卷积,即计算核B覆盖的区域的像素点的最大值,并把这个最大值赋值给参考点指定的像素。对区域做膨胀时,相当于亮的地方都是1,求取最大值时也是1,因此区域向外膨胀。这样就会使图像中的高亮区域逐渐增长。如下图所示,这就是膨胀操作的初衷。
在这里插入图片描述
在这里插入图片描述

1.2 腐蚀

腐蚀:就是求局部最小值的操作。
一旦有元素为暗区域的与核有相交,中心点就会变暗。
在这里插入图片描述
在这里插入图片描述

2 形态学组合操作

2.1 开运算(Opening Operation)

开运算(Opening Operation),其实就是先腐蚀后膨胀的过程。其数学表达式如下:dist=open(src,element)=dilate(erode(src,element))
dist=open(src,element)=dilate(erode(src,element))
开运算可以用来消除小物体、在纤细点处分离物体、平滑较大物体的边界的同时并不明显改变其面积。

2.2 形态学闭运算

先膨胀后腐蚀的过程称为闭运算(Closing Operation),其数学表达式如下:
dist=close(src,element)=erode(dilate(src,element))
作用:闭运算能够排除小型黑洞(黑色区域)

2.3 形态学梯度

形态学梯度就是膨胀图与腐蚀图之差,数学表达式:
dist=morph−grad(src,element)=dilate(src,element)−erode(src,element)
dist=morph−grad(src,element)=dilate(src,element)−erode(src,element)
作用:对二值图像进行这一操作,可以将团块的边缘突出出来,我们可以用形态梯度来保留物体的边缘轮廓

2.4 顶帽(top Hat)

顶帽就是原图与开运算图之差,数学表达式:
dist=tophat(src,element)=src−open(src,element)
因为开运算带来的结果是放大了裂痕或者局部低亮度的区域。因此,从原图中减去开运算后的图,得到的效果图突出了比原图轮廓周围的区域更明亮的区域,且这一操作与选择的核的大小有关。

2.5 黑帽(Black Hat)

黑帽就是闭运算与原图之差,数学表达式:
dist=blackhat(src,element)=close(src,element)−src
dist=blackhat(src,element)=close(src,element)−src
黑帽运算后的效果图突出了比原图轮廓周围的区域更暗的区域,且这一操作与核的大小有关。

黑帽运算用来分离比临近点暗一点的斑块,效果图有着非常完美的轮廓

2.6 击中与击不中变换

在这里插入图片描述
一般来说,设给定原图像X中包含A在内的多个不同物体,假设定位目标A,为此设置一个形状模板A,此时取一个比A稍大的B,且A不与B的边缘相交,令B1=A,B2=B-A;如下图所示:
在这里插入图片描述
击中与击不中的理解:相当于更严格的匹配,针对原图像先进行一轮模板匹配,此时得出的是所有匹配上的点的集合,包含理想点,和比模板匹配区域更大的其余点。然后做模板周围区域的核,对原始图像做差集都到想要匹配的周围区域,再用周围区域的核去进行匹配,得到周围区域的相似点。两个点取集合为,区域相同,周围区域也相同的点。

3一些基本的形态学算法

3.1 边界提取

可以表示为:先用B对A进行腐蚀,而后执行A和腐蚀结果之间的差即可得到边界。
在这里插入图片描述
在这里插入图片描述

3.2 空洞填充

孔洞填充的公式:
Xk=(Xk−1⊕B)∩A^c k=1,2,3…
其中X0 是一副全黑的图像,但在孔洞的地方有一个白点(万花丛中一点红)。
乍看,确实很难理解这个公式,等我慢慢道来:
在这里插入图片描述
我们要对A图进行孔洞填充,首先求出A的补集作为备用,然后所用到的element B如上图c所示。首先我们构建X0 一副全黑图像加上孔洞中的一点白作为初始图像,然后用B对X0进行膨胀,结果膨胀的结果超过了孔洞的大小,于是我们用我们之前构造的Ac
对其求交集将其结果限制在孔洞内(由于我们的element是一个四连通元素,每一次膨胀其边界不会超出一个像素点,而由于Ac 的四周都是一个像素宽的沟壑,所以求交集刚好能限制膨胀过界的像素)。然后迭代,直到xk−1与xk 相同没变化。最后得到孔洞的填充图像,最后与原图像求并集刚好就把孔洞填充了。
如果用八连通,Ac 将无法成功限制膨胀的溢出和越界

3.3连通分量的提取

在这里插入图片描述
以8连通的情况为例,对于图(a)的内含多个连通分量的图像A,从仅为连通分量A1内部某个的图像B开始,不断采用如图©所示的结构S进行膨胀。由于其他连通分量与A1之间至少有一条一像素宽的空白缝隙(如图(a)中的虚线),3*3的结构元素保证了只要B在区域A1内部,则每次膨胀都不会产生位于图像A中其他连通区域之内的点,这样只需用每次膨胀后的结构图像和原始图像A相交,就能把膨胀限制在A1内部。随着对B的不断膨胀,B的区域不断生长,但每次膨胀后与图像A的相交又将B限制在连通分量A1地内部,直到最终B充满整个连通分量A1,对连通分量A1地提取完毕。

3.4凸壳

https://blog.csdn.net/webzhuce/article/details/100185105
我们首先有四个不同的element Bi ,我们首先用到第一个B1 对X10 (X10等于A)做击中击不中变换,然后与A做并集,得到X11然后迭代直到Xik=Xik−1 ,我们停止迭代,计最终结果为D1即上图的X14,同理我们用其他的三个element Bi 得到D2,D3,D4 ,最后将这四个D求并集就得到了我们的凸包。注:用Bi做击中击不中变换的结果是我们值得注意的,这四个结构元的远点均在其中心处,“×”项表示“不考虑”的条件,即当A中的一个33区域的中心为0时,而在阴影模板元素下的三个像素为1时,就出现了一个模板匹配。出现模板匹配时,这个33区域的0中心将会被选中,这样就填补了本来是0的孔洞区域,然后与A求并,就将A的范围变大了。当这四个模板不能够更新出新的像素时,那么凸包就形成了。

缺点:上述过程的一个明显缺点是凸壳可能超出确保凸性所需的最小尺寸。减少这种影响的一种简单方法是限制生长,以便凸壳不会超过初始点集在水平和垂直方向的尺寸。

3.5 细化

细化公式:
A⊗B=A−(A⊗B)

X表示既可以是图像上的点也可以是图像上的点也可以是背景上的点。
就是先用击中击不中变换对图像进行处理,我们选用的element如图左上角所示,这个element一般只会击中图像边缘的部分,我们击中图像边缘后再用原图减去击中的边缘,这时图像就会缩小一圈。我们循环用不同的element去进行同样的操作直到图像收敛。
在这里插入图片描述

原文:
http://www.javashuo.com/article/p-fszjoirm-or.html
http://www.javashuo.com/article/p-tckeyrij-nc.html
http://www.javashuo.com/article/p-ekfkwscq-pw.html
https://blog.csdn.net/webzhuce/article/details/100185105
https://blog.csdn.net/Du_Shuang/article/details/82959642
https://blog.csdn.net/Du_Shuang/article/details/83023400
https://www.cnblogs.com/xianglan/archive/2011/01/01/1923779.html