0
点赞
收藏
分享

微信扫一扫

【youcans 的 OpenCV 例程200篇】137. 灰度开运算和灰度闭运算原理


【youcans 的 OpenCV 例程200篇】137. 灰度开运算和灰度闭运算


5. 灰度级形态学

灰度级形态学将形态学操作从二值图像扩展到灰度图像。灰度形态学处理也有腐蚀、膨胀、开运算、闭运算、顶帽操作、低帽操作等操作,可以实现图像平滑、图像增强、图像分割功能。

把图像像素点的灰度值视为高度,不同的灰度级表示不同的高度,整个图像就像一张高低起伏的地形图。明亮的区域(灰度值大)相当于高山,黑暗的区域(灰度值小)相当于深谷,边缘区域即明亮与黑暗的交界相当于悬崖。


5.2 灰度开运算和灰度闭运算

开运算通常用于去除噪点,断开细小狭颈;闭运算通常用于消除小孔,连接狭小断裂。

灰度开运算先腐蚀再膨胀,可以去除相对于结构元素较小的亮细节,保持整体的灰度和较大的亮区域不变。

灰度闭运算先膨胀再腐蚀,可以去除相对于结构元素较小的暗细节,保持整体的灰度和较大的暗区域不变。

把图像像素点的灰度值视为高度,不同的灰度级表示不同的高度,整个图像就像一张高低起伏的地形图。明亮的区域(灰度值大)相当于高山,黑暗的区域(灰度值小)相当于深谷,边缘区域即明亮与黑暗的交界相当于悬崖。

灰度开运算和灰度闭运算在形式上与二战图像的开运算和闭运算是一致的:

( f ∘ b ) = ( f ⊖ b ) ⊕ b ( f ∙ b ) = ( f ⊕ b ) ⊖ b (f \circ b) = (f \ominus b) \oplus b \\ (f \bullet b) = (f \oplus b) \ominus b (fb)=(fb)b(fb)=(fb)b


例程 10.28:灰度级形态学运算原理示意图

将图像的灰度值视为地形图的高度值,f 对 b 的开运算可以解释为从 f 的下表面向上推动结构元,f 对 b 的闭运算可以解释为从 f 的上表面向下推动结构元。

    # 10.28: 灰度级形态学运算原理示意图
    lens = 600
    t = np.arange(1, lens+1)  # start, end, step
    y = 2 * np.sin(0.01*t) + np.sin(0.02*t) + np.sin(0.05*t)

    lenSE = 50
    yErode = np.zeros_like(y)
    yDilate = np.zeros_like(y)
    for i in range(lens):
        h0 = max(1, i - lenSE//2)
        t0 = min(lens, i + lenSE//2)
        yErode[i] = min(y[h0:t0])  # 腐蚀运算
        yDilate[i] = max(y[h0:t0])  # 膨胀运算

    yOpen = yErode.copy()  # 开运算: 先腐蚀后膨胀
    yClose = yDilate.copy()  # 闭运算: 先膨胀后腐蚀
    for i in range(lens):
        h0 = max(1, i - lenSE//2)
        t0 = min(lens, i + lenSE//2)
        yOpen[i] = max(yErode[h0:t0])  # 对腐蚀结果进行膨胀运算
        yClose[i] = min(yDilate[h0:t0])  # 对膨胀结果进行腐蚀运算

    plt.figure(figsize=(9, 7))
    plt.subplot(221), plt.title("Gray erosion profile"), plt.xticks([]), plt.yticks([])
    plt.plot(t, y, 'c--', t, yErode, 'b-')  # 腐蚀运算
    plt.subplot(222), plt.title("Gray dilation profile"), plt.xticks([]), plt.yticks([])
    plt.plot(t, y, 'c--', t, yDilate, 'b-')  # 膨胀运算
    plt.subplot(223), plt.title("Gray opening profile"), plt.xticks([]), plt.yticks([])
    plt.plot(t, y, 'c--', t, yOpen, 'b-')  # 开运算
    plt.subplot(224), plt.title("Gray closing profile"), plt.xticks([]), plt.yticks([])
    plt.plot(t, y, 'c--', t, yClose, 'b-')  # 闭运算
    plt.show()

在这里插入图片描述


(本节完)


版权声明:

youcans@xupt 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/123565669)

Copyright 2022 youcans, XUPT
Crated:2022-3-24


举报

相关推荐

0 条评论