Keras深度学习:入门、实战与进阶
上QQ阅读APP看书,第一时间看更新

4.1.7 形态运算

二值图像是仅包含两组像素的图像,其值为0和1,分别表示背景像素和前景像素。这样的图像要经历几种非线性的形态运算,如侵蚀、膨胀、打开和闭合。这些运算通过以下方式在二进制图像上覆盖一个称为结构元素的掩码来工作。

  • 腐蚀:对于每个前景像素,在其周围放置一个遮罩,如果遮罩覆盖的任何像素来自背景,则将其设置为背景。
  • 膨胀:对于每个背景像素,在其周围放置一个蒙版,如果蒙版覆盖的任何像素都来自前景,则将像素设置为前景。

我们首先读入一个二值图像,然后利用markBrush()函数创建一个形状为diamond、大小为3的滤波器,再通过erode()函数对二值图像进行腐蚀运算、通过dilate()函数对图像进行膨胀运算,处理后的结果如图4-25所示。

> shapes <- readImage('../images/shapes.png')
> kern = makeBrush(3, shape='diamond')
> shapes_erode= erode(shapes, kern) # 腐蚀
> shapes_dilate = dilate(shapes, kern) # 膨胀
> display(combine(shapes,shapes_erode, shapes_dilate),
+         all=TRUE,method = 'raster',nx = 3)
115-2

图4-25 对二值图像进行腐蚀和膨胀

打开和关闭是上述两个运算的组合:打开是先腐蚀再膨胀、关闭是先膨胀再腐蚀,分别通过函数opening和closing实现。