144. 基于灰度形态学的纹理分割

2025-10-06  本文已影响0人  大龙10

8. 形态学图像处理索引

一、灰度形态学之纹理分割

二、例程

    # 10.35: 基于灰度形态学的纹理分割
    imgGray = cv2.imread("../images/Fig0943a.tif", flags=0)  # flags=0 灰度图像

    # 根据小斑点直径(25) 设计圆形结构元,用闭运算删除小斑点
    kSize = (20, 20)  # 结构元半径 10,小于小斑点半径
    element = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, kSize)  # 圆形结构元
    imgClose1 = cv2.morphologyEx(imgGray, cv2.MORPH_CLOSE, element)  # 灰度闭运算

    kSize = (60, 60)  # 结构元半径 30,大于小斑点半径
    element = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, kSize)  # 圆形结构元
    imgClose2 = cv2.morphologyEx(imgGray, cv2.MORPH_CLOSE, element)  # 灰度闭运算

    kSize = (120, 120)  # 结构元半径 60,大于大斑点半径
    element = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, kSize)  # 圆形结构元
    imgOpen = cv2.morphologyEx(imgClose2, cv2.MORPH_OPEN, element)  # 灰度开运算

    # 形态学梯度得到区域分割的边界
    kSize = (5, 5)  # 结构元的尺寸
    element = cv2.getStructuringElement(cv2.MORPH_RECT, kSize)  # 矩形结构元
    imgGrad = cv2.morphologyEx(imgOpen, cv2.MORPH_GRADIENT, element)  # 形态学梯度

    # 纹理分割图像重建
    imgRebuild = cv2.bitwise_or(imgGray, imgGrad)  # 计算交集

    plt.figure(figsize=(10, 6))
    plt.subplot(231), plt.axis('off'), plt.title("Origin")
    plt.imshow(imgGray, cmap='gray', vmin=0, vmax=255)
    plt.subplot(232), plt.title("Closing (r=10)"), plt.axis('off')
    plt.imshow(imgClose1, cmap='gray', vmin=0, vmax=255)
    plt.subplot(233), plt.title("Closing (r=30)"), plt.axis('off')
    plt.imshow(imgClose2, cmap='gray', vmin=0, vmax=255)
    plt.subplot(234), plt.title("Region connected"), plt.axis('off')
    plt.imshow(imgOpen, cmap='gray', vmin=0, vmax=255)
    plt.subplot(235), plt.title("Region segmented"), plt.axis('off')
    plt.imshow(imgGrad, cmap='gray', vmin=0, vmax=255)
    plt.subplot(236), plt.title("Region rebuilt"), plt.axis('off')
    plt.imshow(imgRebuild, cmap='gray', vmin=0, vmax=255)
    plt.tight_layout()
    plt.show()

三、资料

youcans_的博客:
https://blog.csdn.net/youcans/article/details/123786155
上一篇 下一篇

猜你喜欢

热点阅读