1 实验目的
1、了解形态学的基本理论和方法。
2、掌握对图像进行膨胀、腐蚀的方法。
3、掌握开闭运算。
2 实验环境
matlab
3 实验内容
1、采用形态学处理方法实现图像去噪。
%(1)lab51.m
close all;
clear;
clc;
I=imread('lab51.jpeg');
I=rgb2gray(I);
I=im2bw(I);
I=double(I);
J1=imnoise(I,'salt & pepper',0.02); %椒盐噪声
se=strel('disk',1);
% se=[0 1 0;1 1 1;0 1 0];
se.Neighborhood
%去掉黑噪声
J2=imdilate(J1,se);
J2=imerode(J2,se);
%二值反转,去掉白噪声
J3=imcomplement(J2);
% J2=dilation(J2,se);
% J2=erosion(J2,se);
J3=dilation(J3,se.Neighborhood);
J3=erosion(J3,se.Neighborhood);
%二值反转
J4=imcomplement(J3);
figure('NumberTitle','off','name','形态学处理去噪'),
subplot(2,3,1);imshow(I);title('原始图像','FontName','宋体');
subplot(2,3,2);imshow(J1);title('添加噪声','FontName','宋体');
subplot(2,3,4);imshow(J2);title('去除黑噪声','FontName','宋体');
subplot(2,3,5);imshow(J3);title('去除白噪声','FontName','宋体');
subplot(2,3,6);imshow(J4);title('去噪后的图像','FontName','宋体');
%(2)自定义图像膨胀函数dilation.m
function j=dilation(i,se)
[w,h]=size(se);
% i=padarray(i,[w-1 h-1],'symmetric');
[width,height]=size(i);
% j=zeros(width,height);
j=i;
for row=1:width-(w-1)
for col=1:height-(h-1)
mark=i(row:row+(w-1),col:col+(h-1));
temp=se.*mark;
if sum(temp(:))>0 %只要卷积结果中有非零元素,则将输出图像的对应位置赋值1
j(row+floor((w-1)/2),col+floor((h-1)/2))=1;
else
j(row+floor((w-1)/2),col+floor((h-1)/2))=0;
end
end
end
%(3)自定义图像腐蚀函数erosion.m
function j=erosion(i,se)
[w,h]=size(se);
% i=padarray(i,[w-1 h-1],'symmetric');
[width,height]=size(i);
j=zeros(width,height);
count_1=0;
for x=1:w
for y=1:h
if se(x,y)==1
count_1=count_1+1;
end
end
end
for row=1:width-(w-1)
for col=1:height-(h-1)
mark=i(row:row+(w-1),col:col+(h-1));
temp=mark.*se;
count=0;
for x=1:w
for y=1:h
if temp(x,y)~=0
count=count+1;
end
end
end
%比较结构元素与c中的1的数量,如果一样多,则该点的值为1
if count==count_1
j(row+floor((w-1)/2),col+floor((h-1)/2))=1;
else
j(row+floor((w-1)/2),col+floor((h-1)/2))=0;
end
end
end
2、对图像分割实验(实验四)得到的分割结果进行形态学处理,对肺部区域的空洞进行填充。
%主函数lab52.m
close all;
clear;
clc;
I=imread('lab52.tif');
se=strel('disk',7);
se.Neighborhood
J1=dilation(I,se.Neighborhood);
J1=erosion(J1,se.Neighborhood);
figure('NumberTitle','off','name','形态学处理去噪'),
subplot(1,2,1);imshow(I);title('原始图像','FontName','宋体');
subplot(1,2,2);imshow(J1);title('填补空洞','FontName','宋体');
4 实验心得
进一步理解了形态学处理图像的方法,实现了图像的膨胀、腐蚀以及开闭运算等操作。实验中没有直接自定义开闭运算函数,在操作过程中,使用同一结构元素对图像先膨胀后腐蚀,相当于闭运算