形态操作,第 1 部分¶
形态学图像处理是计算机视觉的一个领域,主要处理二进制和灰度图像中的瑕疵。
ImageMorphology 包含一系列与图像元素的形状或形态有关的非线性操作。
在本演示中,我们将了解 8 种最常见的形态学操作。
Pkg.add(["TestImages", "ImageMorphology"])
using Images
using ImageMorphology, TestImages
img = Gray.(testimage("morphology_test_512"))
侵蚀¶
侵蚀功能对近邻进行最小化过滤。默认情况下,2D 为 8 个链接,3D 为 27 个链接,等等。您可以指定一个您希望包含在连接中的维度列表,例如,region = [1,2]可以将第三个维度排除在过滤之外。
下面是一个示例,说明如何使用 3x3 结构元素对二进制图像进行侵蚀。
img_erode = @. Gray(img < 0.8); # keeps white objects white
img_erosion1 = erode(img_erode)
img_erosion2 = erode(erode(img_erode))
mosaicview(img_erode, img_erosion1, img_erosion2; nrow = 1)
img_dilate = @. Gray(img > 0.9);
img_dilate1 = dilate(img_dilate)
img_dilate2 = dilate(dilate(img_dilate))
mosaicview(img_dilate, img_dilate1, img_dilate2; nrow = 1)
发现¶
形态学操作 opening 相当于 dilate(erode(img))。在 opening(img,[区域])中,区域允许您控制执行此操作的尺寸。 打开可以去除小亮点并连接小的暗裂缝。
img_opening = @. Gray(1 * img > 0.5);
img_opening1 = opening(img_opening)
img_opening2 = opening(opening(img_opening))
mosaicview(img_opening, img_opening1, img_opening2; nrow = 1)
关闭¶
关闭形态学操作等同于 erode(dilate(img))。函数 closing(img,[区域])的工作原理与 closing(img,[区域])类似。闭合可以去除小的暗点并连接小的浅色裂缝。
img_closing = @. Gray(1 * img > 0.5);
img_closing1 = closing(img_closing)
img_closing2 = closing(closing(img_closing))
mosaicview(img_closing1, img_closing1, img_closing2; nrow = 1)
顶帽¶
tophat 函数的定义是图像减去其形态学开口。 tophat(img, [region]) 的工作原理与开口和闭合类似。此操作会返回图像中小于结构元素的亮点。
img_tophat = @. Gray(1 * img > 0.2);
img_tophat1 = tophat(img_tophat)
img_tophat2 = tophat(tophat(img_tophat))
mosaicview(img_tophat, img_tophat1, img_tophat2; nrow = 1)
底帽¶
底帽形态学操作被定义为图像的形态闭合减去原始图像。Bothat(img,[region])的定义与 Bottom-Hat 类似。此操作会返回图像中小于结构元素的暗点。
img_bothat = @. Gray(1 * img > 0.5);
img_bothat1 = bothat(img_tophat)
img_bothat2 = bothat(bothat(img_tophat))
img_bothat3 = bothat(bothat(bothat(img_tophat)))
mosaicview(img_bothat, img_bothat1, img_bothat2; nrow = 1)
形态梯度¶
形态学梯度是图像扩张和侵蚀之间的差值。morphogradient(img, [region]) 的定义与 tophat 相同。
img_gray = @. Gray(0.8 * img > 0.7);
img_morphograd = morphogradient(@. Gray(0.8 * img > 0.4))
mosaicview(img_gray, img_morphograd; nrow = 1)
拉普拉斯形态学算子¶
形态拉普拉斯运算符返回的值定义为内梯度和外梯度的算术差值。函数 morpholaplace(img, [region]) 的定义与 tophat 类似。
img_gray = @. Gray(0.8 * Gray.(img) > 0.7);
img_morpholap = morpholaplace(img_gray)
mosaicview(img_gray, img_morpholap; nrow = 1)
输出¶
在本例中,我们对可用于图像的形态学操作进行了细分。