MATLAB 中的形态学操作

17 Mar 2025 | 6 分钟阅读

形态学运算是图像处理的一种方法,它改变图像中对象的形式或组织。这些过程经常用于边缘检测、降噪和图像增强。

MATLAB 中的图像处理工具箱允许您执行形态学运算,并包含用于膨胀、侵蚀、开运算、闭运算等运算的函数。

形态学运算的类型

膨胀: 膨胀会拓宽图像中描绘的对象边界。它涉及将结构元素(一种预定义的形状)在图像上移动,并将每个像素的值更改为其最大值。

  • 结构元素定义的邻域。膨胀可以放大对象、连接损坏的部分以及填充小的间隙。

侵蚀: 侵蚀会使图像中对象的边界变小。

  • 结构元素在图像上移动,每个像素都更改为在结构元素定义的邻域内可能具有的最低值。
  • 侵蚀有效地减小了对象的大小,消除了噪声,并将小对象与大对象分离开来。

开运算: 膨胀之后是侵蚀,这是开运算过程。

  • 它经常用于消除小的噪声并将由细桥连接的对象分开。
  • 开运算允许在保持较大对象的一般形状的同时移除较小的对象。

闭运算: 膨胀和侵蚀是闭运算的两个阶段。

  • 它用于连接几乎接触的对象,并填充对象之间的小间隙。
  • 闭运算在填充小的孔洞的同时,保持了对象的整体轮廓。

梯度: 图像的梯度区分了图像的侵蚀和膨胀。

  • 它引起了图像对象边缘的注意。边缘检测和分割都可以从梯度运算中受益。

顶帽变换: 图像的开运算与其原始版本之间的差被称为图像的顶帽变换。

  • 它比结构元素小,显示小的、明亮的结构或细节。为了改进精细细节,使用了顶帽滤波。

底帽变换: 原始图像与其闭运算之间的差被称为图像的底帽变换。

  • 它引起了比结构元素小的、小的、暗的细节或结构的注意。底帽滤波增强了暗细节。
  • 在为这些过程选择结构元素(大小和形状)时,请考虑您特定图像中对象和噪声的特性。

实施

  • rgb2gray 函数已添加到修改后的代码中,该函数将彩色图像转换为灰度版本,可用于形态学过程。
  • 确保将“flowers.jpg”替换为您的图像文件的正确路径。

输出

Morphological operations in MATLAB

注意

请记住,您选择的结构元素的大小和形状(代码中的 se)可能会影响形态学过程的结果。尝试不同的结构元素,以获得适合您特定图像的理想结果。

原始图像: 此子图将显示加载的 imread 原始彩色图像。

膨胀图像: 此子图将显示通过使用指定的结构元素应用膨胀(立即)创建的灰度图像。在图像中,对象看起来会更大或更粗,尤其是在边缘和边界周围。

侵蚀图像: 此子图将显示使用相同的结构元素通过侵蚀(改进)产生的灰度图像。小的细节可能会丢失,并且图像中的对象看起来更细或更退化。

开运算图像: 此子图将显示开运算(imopen)灰度图像的结果。在此过程中,图像首先被侵蚀,然后被膨胀。它通过移除小的对象和噪声来保留环境。

膨胀实现

该程序将从名为“binary_image.jpg”的文件中读取一个二值图像并将其存储在变量 binary_image 中。

  • steel 函数用于定义一个结构元素(se)。
  • 在这种情况下,会生成一个 3x3 的方形结构元素。结构元素定义了膨胀操作将覆盖的邻域。
  • 使用指定的结构元素 se,imdildate 函数将膨胀操作应用于 binary_image。变量 dilated_image 存储结果。
  • 使用 subplot 和 imshow 工具,在 1x2 的子图网格中并排显示原始二值图像和膨胀图像。
  • 子图的标题通过 title 函数提供。

输出

Morphological operations in MATLAB
  • 代码将并排显示两张图片。右侧的子图将显示膨胀过程的结果,左侧的子图将显示原始二值图像。
  • 左侧子图将显示标题“原始二值图像”,右侧子图将显示“膨胀图像”。

侵蚀: 侵蚀是膨胀的相反操作;它会导致局部对象分离并收缩区域边界。通过侵蚀可以去除小的噪声斑块。您可以使用 MATLAB 中的 imerode 函数。

输出

Morphological operations in MATLAB

使用先前建立的结构元素 se,代码对 binary_image 执行侵蚀操作。变量 eroded_image 包含侵蚀的结果。

  • 使用 imshow 和 subplot 例程,将原始二值图像和侵蚀图像并排显示在子图网格中。
  • 子图的标题通过 title 函数提供。右侧子图将标记为“侵蚀图像”,左侧子图将标记为“原始二值图像”。

闭运算和开运算: 闭运算是膨胀后进行侵蚀,它能有效地保留较大的结构并减少小的噪声。相反,开运算是侵蚀后进行膨胀,并能有效地填充对象中的小间隙。对于开运算和闭运算,MATLAB 提供了 imopen 和 imclose 函数。

输出

Morphological operations in MATLAB
  • 代码使用指定的结构元素 se 对 binary_image 执行开运算。变量 opened_image 包含开运算过程的结果。
  • 同样,代码使用相同的结构元素对 binary_image 执行闭运算。closed_image 变量包含闭运算的结果。
  • 使用 subplot 和 imshow 函数,将原始二值图像、开运算图像和闭运算图像并排显示在 1x3 的子图网格中。
  • 子图的标题通过 title 函数提供。左侧子图将标记为“原始二值图像”,中间子图标记为“开运算图像”,右侧子图标记为“闭运算图像”。

击中或未击中变换: 此过程匹配二值图像中的模式,称为击中或未击中变换。它有助于检测由两个结构元素指示的特定模式。您可以使用 MATLAB 的 bwhitmiss 函数。

Morphological operations in MATLAB

代码中定义了一个用于击中或未击中变换的二值模板。该模板指定了要在二值图像中匹配的模式,这是一个由 1 和 0 组成的 3x3 矩阵。

  • 使用提供的模板,bwhitmiss 函数通过击中或未击中方法转换 binary_image。变量 matched_image 包含变换的结果。
  • 使用 subplot 和 imshow 例程,将原始二值图像和匹配的图像并排显示在子图网格中。
  • 子图的标题通过 title 函数提供。右侧子图将标记为“匹配图像”,左侧子图将标记为“原始二值图像”。