[数图] 实验八 形态学图像处理

一.实验目的
1 .利用 MATLAB 研究二值形态学图像处理常用算法;
2 .掌握 MATLAB 形态学图像处理基本操作函数的使用方法;
3 .了解形态学的基本应用。
二、实验内容
1 .编程实现二值图像的基本形态学处理(腐蚀、膨胀、开运算和闭运
算);选择不同结构元素筛选图像目标。
2 .用形态学运算实现灰度图像的噪声平滑和图像边缘提取。
三、实验步骤
1 、二值图像的形态学变换
需要编写的二值图像形态学变换函数:
function newbuf=BwFilter(oldbuf,select)
该函数调用 MATLAB 关于膨胀、腐蚀和图像筛选算法的相关函数,对二
值图像进行相应的处理,最后结果存放在 newbuf 数组中。
编程实现 BwFilter() 函数的功能。结构元素也可以用 ones 函数和 zeros
函数创建。
2 、对输入图像进行形态学操作,即腐蚀、膨胀、开运算和闭运算,改
变结构元素形状、大小,重做上述实验,比较实验结果,分析结构元素
对运算的影响;
3 、以图 FigP0936(bubbles_on_black_background).tif 为例完成分别以下功
能:
(1 )提取与图像边界融合的颗粒
(2 )提取彼此交叠的颗粒
(3 )提取不交叠的颗粒
提示:(1 )可利用区域填充算法。如图所示为源图像,可将图像先转换
为二值图像,然后对其进行取反,这样进行区域填充的结果将为与边界
相连的颗粒,再与源图像进行比较,即可得出在源图像中与边界相连的
颗粒图像。
(2 )可利用图像的腐蚀与膨胀操作。先用模板对图像进行腐蚀操作,
由于相交叠的颗粒面积必然比独立的颗粒大,因此腐蚀操作之后剩下的
部分为交叠颗粒的部分,再对其进行膨胀,将其与源图像进行比较操作,
则可得出交叠的颗粒图像。
(3 )得出交叠的颗粒之后,用源图像对其相减,则得出的为独立分布
的颗粒图像。
[数图] 实验八 形态学图像处理_第1张图片
四、实验结果
4.1. Morphological transformation of binary image
[数图] 实验八 形态学图像处理_第2张图片

 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”,进行膨胀操作

 [数图] 实验八 形态学图像处理_第3张图片

 

(2)输入“2”,进行腐蚀操作

[数图] 实验八 形态学图像处理_第4张图片

(3)输入“3”,进行开运算操作

 [数图] 实验八 形态学图像处理_第5张图片

 (4)输入“4”,进行闭运算操作

[数图] 实验八 形态学图像处理_第6张图片

 更改参数后:

[数图] 实验八 形态学图像处理_第7张图片

膨胀:

[数图] 实验八 形态学图像处理_第8张图片

 腐蚀:

[数图] 实验八 形态学图像处理_第9张图片

 开运算:

[数图] 实验八 形态学图像处理_第10张图片

 闭运算:

[数图] 实验八 形态学图像处理_第11张图片

 改变形状后:

[数图] 实验八 形态学图像处理_第12张图片

 膨胀:

[数图] 实验八 形态学图像处理_第13张图片

腐蚀:

[数图] 实验八 形态学图像处理_第14张图片

 开运算:

[数图] 实验八 形态学图像处理_第15张图片

 闭运算:

[数图] 实验八 形态学图像处理_第16张图片

 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

[数图] 实验八 形态学图像处理_第17张图片

 [数图] 实验八 形态学图像处理_第18张图片

 五、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('独立分布颗粒图像');%显示相减后的图像

你可能感兴趣的:(数字图像处理实验,图像处理,matlab)