形态学操作,第1部分
形态学图像处理是计算机视觉的一个领域,它解决了二进制和灰度图像的缺点。
ImageMorphology包含一组与图像元素的形状或形态相关的非线性操作。
在本演示中,我们将介绍8种最常见的形态学操作。
Pkg.add(["TestImages", "ImageMorphology"])
using Images
using ImageMorphology, TestImages
img = Gray.(testimage("morphology_test_512"))
侵蚀;侵蚀
Erode函数按最近邻居执行最小过滤。 默认情况下,这些是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)
扩张
Dilate函数按其最近邻居执行最大化过滤。 默认情况下,它的工作方式与erode相同。
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)
发现,发现
开口形态操作相当于扩张(erode(img))。 在opening(img,[region])函数中,region允许您控制执行此操作的大小。
开孔可以去除小亮点,连接小暗裂纹。
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))。 关闭(img,[region])函数的工作原理与打开类似。 关闭可以去除小黑斑和连接小光裂缝。
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])的定义类似于tophat。 此操作返回图像中小于结构元素的暗点。
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)
结论
在这个例子中,我们分析了一些可以应用于图像的形态学操作。








