4.2. Carry out morphological operations on the input image, namely corrosion, expansion, open operation and close operation, change the shape and size of structural elements, repeat the above experiment, compare the experimental results, and analyze the influence of structural elements on the operation;
(1)输入“1”,进行膨胀操作
(2)输入“2”,进行腐蚀操作
(3)输入“3”,进行开运算操作
(4)输入“4”,进行闭运算操作
更改参数后:
膨胀:
腐蚀:
开运算:
闭运算:
改变形状后:
膨胀:
腐蚀:
开运算:
闭运算:
4.3. Take figp0936 (bubbles_on_black_background) Take TIF as an example to complete the following work respectively
Can:(1) Extracting particles fused with image boundary
(2) Extract overlapping particles
(3) Extract non overlapping particles
五、conclusions
(1)学会了使用function newbuf=BwFilter(oldbuf,select)二值图像形态学变换函数。
(2)在第二个实验中,更改结构元素的大小(膨胀腐蚀的参数改小,开闭运算的参数调大),发现,膨胀图像的改变不大,腐蚀的图像程度加深,开运算的图像腐蚀程度加深,闭运算的腐蚀程度减弱;更改结构元素的形状(将两组处理的元素形状互换,即膨胀腐蚀的形状设为“square”,开闭运算设为“disk”),发现膨胀图像的腐蚀程度加强,腐蚀图像的腐蚀程度减弱,开运算图像的腐蚀程度加强,闭运算图像的腐蚀程度减弱。
六、全部代码
%8.2 对输入图像进行形态学操作,即腐蚀、膨胀、开运算和闭运算,改
%变结构元素形状、大小,重做上述实验,比较实验结果,分析结构元素
%对运算的影响;
clear all; %清除
a=imread('C:\PICTURE_YUWEI\lax.tif'); %载入图像
addpath('C:\PICTURE_YUWEI\dipum_toolbox_2.0.2');%添加相应的.p文件
m=input(''); %m代表select的种类,1,2,3,4分别代表膨胀、腐蚀、开运算和闭运算
a1=im2bw(a); %将原图转化为二值图像
a2=BwFilter(a1,m); %调用BwFilter函数进行低通滤波
subplot(131) %显示原图
imshow(a);title('原图');
subplot(132) %显示二值图像
imshow(a1);title('原图的二值图像');
subplot(133) %显示转化后图像
imshow(a2);title('变换后的图像');
%8.1 二值图像的形态学变换;BwFilter子程序,功能是进行低通滤波,实现不同的四个功能
function newbuf=BwFilter(oldbuf,select)
if select==1 %select==1,膨胀
A=strel('disk',1); %结构元素
newbuf=imdilate(oldbuf,A);%膨胀处理
else
if select==2 %select==2,腐蚀
B=strel('disk',1);
newbuf=imerode(oldbuf,B);
else
if select==3 %select==3,开运算
C=strel('square',7);
newbuf=imopen(oldbuf,C);
else D=strel('square',7); %select==4,闭运算
newbuf=imclose(oldbuf,D);
end
end
end
end
%以图 FigP0936(bubbles_on_black_background).tif 为例完成分别以下功
%(1)提取与图像边界融合的颗粒
%(2)提取彼此交叠的颗粒
%(3)提取不交叠的颗粒
clear all; %清空
addpath('C:\PICTURE_YUWEI\dipum_toolbox_2.0.2');%添加相应的.p文件
a=imread('C:\PICTURE_YUWEI\FigP0936(bubbles_on_black_background).tif');%读图像
%(1)提取与图像边界融合的颗粒
a1=im2bw(a); %将原图转化为二值图像
a2=~a1; %对图像取反
figure(1);
subplot(1,3,1);imshow(a2);title('取反后图像'); %显示取反图像
a3=imfill(a2,'holes'); %区域填充
subplot(1,3,2);imshow(a3);title('区域填充后图像'); %显示区域填充后的图像
g=a; %将原图备份
[m,n]=size(g); %取原图备份的大小
for i=1:m %将区域填充的结果与原图逐点比较
for j=1:n %若在填充结果时为白,该点在新图像中,为黑点
if a3(i,j)==1
g(i,j)=0;
end
end
end
subplot(1,3,3);imshow(g);title('与边界相连的颗粒图像');
%(2)提取彼此交叠的颗粒
%(3)提取不交叠的颗粒
mask1=strel(ones(15,15)); %构造结构元素mask1
mask1f2=imerode(a,mask1); %对原图进行腐蚀
a4=filter2(fspecial('average',7),im2double(a2));%对腐蚀结果进行滤波
a4=medfilt2(a4); %中值滤波
a4=im2uint8(a4); %将滤波结果转化为uint8形式
figure(2);subplot(2,2,1);imshow(a4);title('腐蚀并滤波后图像');%显示腐蚀并滤波后的图像
mask2=strel('ball',12,12); %构造结构元素mask2
a5=imdilate(a4,mask2); %将uint8形式的图像再进行膨胀
subplot(2,2,2);imshow(a5);title('膨胀后图像');%显示膨胀后的图像
a6=a; %将原图备份
[m,n]=size(a); %得到原图大小
for i=1:m %将处理后的图像与原图逐点进行比较
for j=1:n
if a5(i,j)<=40 %做限幅处理,若处理后的图像中<=40,则去掉
a6(i,j)=0;
else a6(i,j)=a(i,j); %若处理后的图像中>40,则取原图中的白点
end
end
end
subplot(2,2,3);imshow(a6);title('交叠颗粒图像');%显示限幅比较后的图像
f6=a-a6; %将原图和交叠图像相减,得到独立分布颗粒图像
subplot(2,2,4);imshow(f6);title('独立分布颗粒图像');%显示相减后的图像