数学形态学操作

数学形态学操作

目录

  • Dilation
  • Erosion
  • Opening
  • Closing
  • 形态学梯度
  • 顶帽
  • 黑帽
  • Hit-and-Miss 转换
  • Pattern Spectrum


数学形态学(Morphology)中也有类似于卷积中的kernel一样的矩阵,叫做Structuring element(结构元素,下文均称为SE)。


在图像处理方面,形态学分为二值形态学和灰度形态学,经常应用到对图像进行分割,细化,抽取骨架,边缘提取,形状分析,角点检测,分水岭算法等等。


在卷积的kernel中,默认原点是在kernel的中心位置,在SE中原点不一定在中心位置,需要自己定义原点,所以数学形态学的操作是具有方向性的。


默认图像中的前景(目标)为白色,背景为黑色。


1、Dilation


1.1、binary dilation

二值膨胀就是对一个二值图进行膨胀操作。对一个二值图像进行膨胀操作需要一个SE核,SE核由一个二值矩阵组成,还需要定义一个原点,表示核的核心。


遍历原图像的每一个像素点,将其与SE核的原点对齐,然后取当前SE中所有1的位置所覆盖下原图中对应的像素中的最大值,用这个最大值替换当前像素值。由于二值图像最大值就是1,所以就是用1替换原点。


只有SE位于前景物体(像素值为1)边缘时,它覆盖的区域内才会同时出现0和1两种不同的像素值,这时把当前像素替换成1。因此膨胀看起来的效果就是让前景物体膨胀了一圈,使得边界向外扩散。对于前景物体中一些细小的断裂处,这些断裂的地方可能会被连接起来。


膨胀操作使前景边界向外扩张,会增大前景区域。可能会连接不同白色区域,也可以用来填补前景中的空洞,去除黑色噪点。


比如下面这个图像和SE进行膨胀操作(左下角的绿色1为原点)。将图像根据SE中的每个非零元素进行平移,每个元素都会得到一个像素集合,然后把这几个集合求并集得到最终的结果。如下图所示:


因为绿色1为原点,所以对原图像没做任何操作,蓝色1表示将图像向右平移一位,黄色1表示将图像向右上方平移一位,将这三个集合取并集就得到最后的结果。

\begin{bmatrix} 1 & 1 & 1\\ 1 & 1 & 1\\ 1 & 1 & 1 \end{bmatrix} \oplus \begin{bmatrix} 0 & 1\\ 1 & 1 \end{bmatrix} = \begin{bmatrix} 0 & 1 & 1 & 1\\ 1 & 1 & 1 & 1 \\ 1 & 1 & 1 & 1 \\ 1 & 1 & 1 & 1 \end{bmatrix}


下面是一个比较复杂的例子:


1.2、gray dilation

比如表示灰度图像的信号如下左图表示(灰度值曲线),



2、Erosion

遍历原图像的每一个像素点,将其与SE核的原点对齐,然后取当前SE中所有1的位置所覆盖下原图中对应的像素中的最小值,用这个最小值替换当前像素值。二值图像最小值就是0,所以就是用0替换原点。


只有SE位于前景物体(像素值为1)边缘的时候,它覆盖的区域内才会同时出现0和1两种不同的像素值,这个时候把当前像素替换成0。因此腐蚀看起来的效果就是让前景物体缩小了一圈,使得边界向内收缩。对于前景物体中一些细小的连接处,这些连接处可能会断开。


腐蚀操作会减小白色区域,去除白色噪点,断开白色细线连接,使前景区域向内收缩。


比如下面这个图像和SE进行腐蚀操作(左下角的绿色1为原点)。因为绿色1为原点,所以对原图像没做任何操作,蓝色1表示将图像向左平移一位,黄色1表示将图像向左下方平移一位,将这三个集合取交集就得到最后的结果。


注意:在腐蚀中平移的方向和膨胀时相反,而且最后是取交集。

最后的结果为:

\begin{bmatrix} 1 & 1 & 1\\ 1 & 1 & 1\\ 1 & 1 & 1 \end{bmatrix} \ominus \begin{bmatrix} 0 & 1\\ 1 & 1 \end{bmatrix} = \begin{bmatrix} 1 & 1 \\ 1 & 1 \end{bmatrix}

就是说当把SE放到图像中时,SE中的1在图像中也必须全部对应为1,则原点处的值置为1,否则置为0。


下面是一个比较复杂的例子:



3、Opening

对图像先做 erosion,然后做 dilation,就称为开运算。数学表示为:F \circ K = (F \ominus K) \oplus K


用于消除图像中孤立的,狭小的干扰区域(白色噪点),在纤细连接处分离物体,还会消除较大区域的凸起部分(平滑边界)。


在图像的前景区域中,所有比SE小的区域都会被去除:


开运算还可以用于提取水平或竖直线:kernel是水平长条的矩形,可以提取水平线;kernel是竖直长条的矩形,可以提取竖直线。


腐蚀和开运算会使图像的信息丢失(去除白色区域),开运算只是丢弃一些细小前景区域,黑色区域和没有去除的白色区域尽量不发生变化,保留了图像的更多原有特征。



4、Closing

对图像先做 dilation,然后做 erosion,就称为闭运算。 数学表式为: F \cdot K = (F \oplus K) \ominus K


用来填充物体内细小黑色空洞、连接邻近独立、分散的前景区域、多用在图像修复中。


填充前景中的比SE小的黑色空洞和内凹区域。


膨胀和闭运算会使图像的信息增加(去除黑色区域),膨胀是整个区域都得到了膨胀,闭运算只是对一些细小前景区域进行填充,白色区域和没有去除的黑色区域尽量不发生变化,保留了图像的较多特征。



5、形态学梯度

形态学梯度(Morphological Gradient)为膨胀图与腐蚀图之差。数学表达式为:

dst = dilate(src, element) - erode(src, element)


对二值图像进行这一操作可以将团块(blob)的边缘突出出来,能够保留物体的边缘轮廓。


这个是基本梯度,还有内部梯度和外部梯度,内部梯度是原图减去腐蚀图,外部梯度是膨胀图减去原图,这两者得到的轮廓边都比基本梯度更细。


6、顶帽

顶帽运算(Top Hat)为原图像与“开运算“的结果图之差。数学表达式为:

dst = src - open(src, element)


因为开运算带来的结果是放大了裂缝或者消除小白色区域,因此,从原图中减去开运算后的图,得到的效果图突出了比原图轮廓周围的区域更明亮的区域,且这一操作和选择的核的大小相关。


顶帽运算往往用来分离比邻近点亮一些的斑块。当一幅图像具有大幅的背景,而微小物品比较有规律的时候,可以使用顶帽运算进行背景提取。



7、黑帽

黑帽(Black Hat)运算为”闭运算“的结果图与原图像之差。数学表达式为:

dst = close(src, element) - src


黑帽运算后的效果图突出了比原图轮廓周围的区域更暗的区域,且这一操作和选择的核的大小相关。


所以,黑帽运算用来分离比邻近点暗一些的斑块。



8、Hit-and-Miss 转换

这个转换的定义如下:

F \otimes K = (F \ominus K_1)\ \cap \ (F^c \ominus K_2)


通过两个Erosion来实现,需要定义两个不同的SE,分别为 k1 和 k2,要求 k1 和 k2 的交集为空,而且这两者都属于 K,即都是 K 的一个子集。


用数学符号表示为:

K_1 \ \cap \ K_2 = \varnothing ,\ K_1 \in K,\ K_2 \in K


K1 对原图像(前景)进行腐蚀;K2 对灰度值翻转后的图像进行腐蚀( F^c 表示原图像的反色图像),即对图像的背景进行操作,最后对这两者进行求交集得到结果。


可以从图像中求取特殊的特征,先在前景中获取这个特征,然后在背景中剔除这个特征。

特殊的特征包括:

  • isolated pixels,孤立像素
  • end points,顶点
  • contour points,轮廓边缘点


下面是一个例子,得到了这些齿轮的轮廓上的点。


使用 Hit-and-Miss 变换时,两次腐蚀操作都使用K1,都使用K2,或者使用K1和K2,得到的轮廓的粗细是不一样的:




如果觉得有用,点个赞吧(ง •̀_•́)ง。

编辑于 2019-08-03 08:01

文章被以下专栏收录