一、 问题描述
对一副二值图像进行膨胀、腐蚀、开、闭操作,提取边缘;
二、 求解思路
利用MATLAB中自带的imdilate函数进行膨胀操作,利用imerode函数进行腐蚀操作,利用imopen函数进行开操作,利用imclose进行闭操作,利用公式
把原图减去腐蚀后的图像获取边缘图像
三、 程序代码
clear;
clc;
close all
%对一副二值图像进行膨胀、腐蚀、开、闭操作,提取边缘
im=imread('1.png');
suj1=strel('line',10,90);
suj2 = strel('line',10,180);
subplot(3,3,1)
imshow(im)
title('原图像')
%% 膨胀
subplot(3,3,2)
im1=imdilate(im,suj1);
imshow(im1)
title('被竖线膨胀')
subplot(3,3,3)
im2=imdilate(im,suj2);
imshow(im2)
title('被横线膨胀')
%% 腐蚀
subplot(3,3,4)
im3=imerode(im,suj1);
imshow(im3)
title('被竖线腐蚀')
subplot(3,3,5)
im4=imerode(im,suj2);
imshow(im4)
title('被横线腐蚀')
%% 开
subplot(3,3,6)
im5=imopen(im,suj1);
imshow(im5)
title('被竖线开运算')
subplot(3,3,9)
im6=imopen(im,suj2);
imshow(im6)
title('被横线开运算')
%% 闭
subplot(3,3,7)
im6=imclose(im,suj1);
imshow(im6)
title('被竖线闭运算')
subplot(3,3,8)
im7=imclose(im,suj2);
imshow(im7)
title('被横线闭运算')
%% 提取边缘
figure(2)
suj3=strel('square',10);
imm=imread('xiongmao.jpeg');
subplot(3,1,1)
imshow(imm)
subplot(3,1,2)
imm1=imerode(imm,suj3);
edge1=imm-imm1;
imshow(edge1)
四、 实验结果
如图为原图被横线和竖线分别膨胀,腐蚀,开,闭后的实验结果,可以看见原图配竖线膨胀后,横线消失了,被横线膨胀后,竖线消失了;被竖线腐蚀后,横线加粗,被横线腐蚀后竖线加粗;被竖线开运算后,在A的竖线方向增加了一条竖线,在被竖线闭运算后,横向的线消失,A也只剩下模糊的两个支脚;在被横线闭运算后,只剩下横着的部分,在被横线开运算后,A的内部填充。
如图为提取图像边缘的结果
五、 实验心得
数学形态学提供了图像处理的新思路和新方法,合理使用这些方法将可以拓展出许多新的优秀的功能