• MATLAB/Python编程 | 图片的形态学处理


    注1:本文是“MATLAB/Python编程教程”系列的一部分,专注于使用Python和Matlab实现特定的功能。本篇我们将实现的功能是:图片的形态学处理

    形态学处理是一种处理二值图像的方法,主要基于图像的形状和结构来进行操作。其基本操作包括腐蚀(Erosion)、膨胀(Dilation)、开操作(Opening)和闭操作(Closing)。接下来,我们将通过Python和Matlab来实现这些基本操作。

    1. 理解形态学处理

    • 腐蚀(Erosion): 是一种侵蚀图像边界的操作。在二值图像中,它将与结构元素相匹配的所有像素置为0。

    • 膨胀(Dilation): 是一种扩大图像边界的操作。在二值图像中,它将与结构元素有重叠的所有像素置为1。

    • 开操作(Opening): 是先腐蚀后膨胀的操作。这种操作可以消除小物体,保持大物体的形状,并平滑边界。

    • 闭操作(Closing): 是先膨胀后腐蚀的操作。这种操作可以填充小孔,保持大孔的形状,并平滑边界。

    2. Python代码实现

    在Python中,skimage库提供了形态学处理的功能。以下是一个基本的代码示例:

    from skimage import io, morphology
    import matplotlib.pyplot as plt
    
    # 读取图像
    img = io.imread('sample.png', as_gray=True)
    
    # 定义结构元素
    selem = morphology.square(3)
    
    # 进行形态学操作
    eroded = morphology.erosion(img, selem)
    dilated = morphology.dilation(img, selem)
    opened = morphology.opening(img, selem)
    closed = morphology.closing(img, selem)
    
    # 显示结果
    plt.figure(figsize=(12, 8))
    plt.subplot(221); plt.imshow(eroded, cmap='gray'); plt.title('Erosion')
    plt.subplot(222); plt.imshow(dilated, cmap='gray'); plt.title('Dilation')
    plt.subplot(223); plt.imshow(opened, cmap='gray'); plt.title('Opening')
    plt.subplot(224); plt.imshow(closed, cmap='gray'); plt.title('Closing')
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    3. Matlab代码实现

    在Matlab中,图像处理工具箱(Image Processing Toolbox)提供了形态学处理的功能。以下是一个基本的代码示例:

    % 读取图像
    img = imread('sample.png');
    img = im2bw(img);
    
    % 定义结构元素
    se = strel('square', 3);
    
    % 进行形态学操作
    eroded = imerode(img, se);
    dilated = imdilate(img, se);
    opened = imopen(img, se);
    closed = imclose(img, se);
    
    % 显示结果
    subplot(2,2,1); imshow(eroded); title('Erosion');
    subplot(2,2,2); imshow(dilated); title('Dilation');
    subplot(2,2,3); imshow(opened); title('Opening');
    subplot(2,2,4); imshow(closed); title('Closing');
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    4. 结果解读

    通过观察结果,你可以看到各种形态学操作对图像的影响。腐蚀操作可以消除图像中的小物体,膨胀操作可以增大图像中的物体。开操作对于消除小物体和平滑边界特别有效,而闭操作对于填充小孔和平滑边界特别有效。

  • 相关阅读:
    制造业企业如何高效进行生产计划排单?
    elmentui 查看大图组件 点击图片关闭弹窗方法
    C++学习笔记——01
    Linux内存泄露案例分析和内存管理分享
    Compose中的FlowLayout
    【C语言】宏
    使用 matlab 的 Robotics ToolBox 完成5自由雄克机械臂的建模与运动学仿真,并计算8个点的运动轨迹,绘制运动动画
    简单的网页制作期末作业——电影泰坦尼克号(4页)
    第二章:25+ Python 数据操作教程(第十六节PYTHON 列表理解:通过示例学习)持续更新中
    常见排序实现
  • 原文地址:https://blog.csdn.net/qazwsxrx/article/details/132670559