数学形态学基本运算(腐蚀、膨胀、开运算和闭运算)概念和MATLAB应用实例

     一、 MATLAB中数学形态学基本命令简介

          数学形态学在数字图像处理中发挥着重要作用。它基于形状和结构元素,通过膨胀、腐蚀、开运算和闭运算等基本操作,有效提取图像中的有用信息,改善图像质量。在MATLAB中,提供了一组函数用于基于数学形态学的图像处理和分析,其中最基本的运算包括腐蚀(imerode)、膨胀(imdilate)、开运算(imopen)和闭运算(imclose)。这些操作主要基于集合论,用于处理二值图像或灰度图像,以提取图像特征、消除噪声或填充小孔等。

1. 腐蚀(imerode)

腐蚀操作通过比较图像中的每个像素及其邻域,对图像进行“腐蚀”处理。它使用结构元素(一个小的矩阵)来定义邻域,只有当结构元素完全包含在图像的前景(通常为1的像素)中时,中心像素才被保留。这有助于去除小的噪声点、断开物体间的细连接以及使物体边界收缩。为了更好地理解腐蚀运算,下面给出一个基于MATLAB的腐蚀运算程序示例:

clear all;              %清除所有变量
close all;              %关闭所有图形窗口
clc;                    %清屏
% 生成一副二值图像 
BW = zeros(100,100); 
BW(30:70,30:70) = 1; 
BW(20:30,52:54) = 1; 
BW(70:80,50:60) = 1;
figure;
imshow(BW); 
title('原始二值图像');% 显示原始图像? 
se=strel('square',8);
BW_eroded=imerode(BW,se);
figure,imshow(BW_eroded);
figure('Name','腐蚀运算示例','NumberTitle','off');
subplot(1,2,1),imshow(BW),title('原始图像');
subplot(1,2,2),imshow(BW_eroded),title('使用边长为8的正方形结构原始进行腐蚀后的图像');
部分运行结果:

    由上图运行结果可以看出,通过腐蚀运算,原始图像进行了“瘦身”,并且消除了上部小矩形。

2.膨胀(imdilate)

膨胀操作与腐蚀相反,它是对图像进行“膨胀”处理。如果结构元素的至少一个像素与图像的前景重叠,那么中心像素就被标记为前景。这有助于填补小孔、连接相近的物体以及扩展物体边界,常用于增强图像中的亮区域。为了更好地理解膨胀运算,下面给出一个基于MATLAB的膨胀运算程序示例:

clear all;              %清除所有变量
close all;              %关闭所有图形窗口
clc;                    %清屏
% 读入一副二值图像 
I=imread('MT1.png');%读入图像
BW=im2bw(I);%图像二值化
figure;
imshow(BW),title('二值图像');%二值图像
se=strel('square',15);
BW_eroded=imerode(BW,se);
figure,imshow(BW_eroded);
figure('Name','膨胀运算示例','NumberTitle','off');
subplot(1,2,1),imshow(BW),title('二值图像');
subplot(1,2,2),imshow(BW_eroded),title('使用边长为15的正方形结构原始进行膨胀后的图像');

原始图像:

运算结果:

     由上图运行结果可以看出,通过膨胀运算,可对二值图像的分离部分进行连接。

3. 开运算(imopen)

开运算是先腐蚀再膨胀的复合操作。它能够有效去除图像中的小对象(噪声),同时保留较大的结构不受影响。开运算还能平滑物体边界,断开细长的连接,是形态学滤波中常用的一种手段。

4. 闭运算(imclose)

闭运算是先膨胀再腐蚀的复合操作。它的作用是填充图像中的小孔或细长通道,连接邻近的物体,同时保持物体总体形状和大小不变。闭运算常用于填补由于图像采集或预处理过程中产生的不期望的空洞。

       下面给出一个基于MATLAB的数学形态学基本运算(膨胀、腐蚀、开运算和闭运算)综合应用的程序实例。

二、数学形态学基本运算综合应用示例程序代码

% 清除所有变量,关闭所有图形窗口,清空命令窗口  
clear all;    
close all;    
clc;    
% 生成一副二值图像  
BW = zeros(100,100);  
BW(30:70,30:70) = 1;  
BW(20:30,40:60) = 1;  
figure;  
imshow(BW);  
title('原始二值图像');% 显示原始图像   
se = strel('square',10);%结构元素的选取要依据待处理图像特点进行选取
%se = strel('disk', 8);  % 创建结构元素:圆盘,半径为3
%se = strel('disk', 3);  %结构元素的尺寸对处理效果有影响
 
BW_dilated = imdilate(BW, se);  % 膨胀运算
% 显示膨胀后的图像  
figure;  
imshow(BW_dilated);  
title('膨胀后的图像');  % 膨胀操作通常使得图像中的白色区域变大,,连接了原本相近但不相连的区域。。  

BW_eroded = imerode(BW, se); % 腐蚀运算   
 
figure,imshow(BW_eroded),title('腐蚀后的图像');  % 显示腐蚀后的图像  
% 腐蚀操作使得图像中的白色区域变小,分开了原本相连但不太紧密的区域。  
 
 
% 开运算:先腐蚀后膨胀  
BW_opened = imopen(BW, se);  
 
% 显示开运算后的图像  
figure;  
imshow(BW_opened);  
title('开运算后的图像');  
%开运算通常用于去除小的对象或噪声,同时保留较大的结构。  
 
% 闭运算:先膨胀后腐蚀  
BW_closed = imclose(BW, se);  
figure,imshow(BW_closed),title('闭运算后的图像');  % 显示闭运算后的图像  
% 闭运算通常用于填充小的黑洞或连接狭窄的间断,同时保留整体形状。
figure('Name', '选择正方形结构元素w=8', 'NumberTitle', 'off', 'Color', 'w');
subplot(2,3,1),imshow(BW),title('原始图像');
subplot(2,3,2),imshow(BW_dilated ),title('膨胀图像');
subplot(2,3,3),imshow(BW_eroded ),title('膨胀图像');
subplot(2,3,4),imshow(BW_opened ),title('开运算图像');
subplot(2,3,5),imshow(BW_closed ),title('闭运算图像');

三、部分运行结果

四、分析和讨论

    从运行结果可知,采用不同形状结构元素和尺寸进行数学形态学图像处理,对结果有较大的影响,在具体的图像处理实践中,依据待处理的图像和处理目标进行结构元素形状和尺寸的合理选择。

   如果大家觉得本文对大家学习和研究有所帮助,请关注、点赞和收藏,谢谢大家!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值