【数字图像处理】基于Matlab的图像形态学运算的基本操作


1.找到一副具有多形状特征的图像;

2.选取合适的阈值,得到二值化图像;

%% 基础实验部分
Img=imread('Test_bw.jpg');%多形状特征的图像
Img_Gray=rgb2gray(Img);
figure;imhist(Img_Gray);
level=125/255;%选取合适阈值(波谷)
%level=graythresh(Img_Gray);%使用 Otsu 方法计算全局图像阈值
I=im2bw(Img,level);%#ok %得到二值化图像(im2bw是指导书中要求,建议使用imbinarize)
figure,subplot(221.5),imshow(Img),title('原图');
subplot(223),imshow(Img_Gray),title('灰度图');
subplot(224),imshow(I),title('二值化');

3.分别设置不同的结构元素(圆形,方形,两种线形),大小根据自己的图像进行设置;

%% 创建结构元素
Strel_Disk=strel('disk',10);%结构元素为半径10的圆
Strel_Rectangle=strel('rectangle',[3 4]);%结构元素为大小为[3 4]的矩形
Strel_Square=strel('square',5);%结构元素为边长5的方形
Strel_Line=strel('line',10,45);%结构元素为长10角度45的线

4.对得到的二值图像,利用不同的结构元素进行腐蚀运算,并分析得到结果;

%% 腐蚀运算
Erode_Disk=imerode(I,Strel_Disk);
Erode_Rectangle=imerode(I,Strel_Rectangle);
Erode_Square=imerode(I,Strel_Square);
Erode_Line=imerode(I,Strel_Line);
figure,subplot(231),imshow(Img),title('原图');
subplot(232),imshow(I),title('二值化图');
subplot(233),imshow(Erode_Disk),title('圆型腐蚀');
subplot(234),imshow(Erode_Rectangle),title('矩形腐蚀');
subplot(235),imshow(Erode_Square),title('方形腐蚀');
subplot(236),imshow(Erode_Line),title('线性腐蚀');

5.对得到的二值图像,利用不同的结构元素进行膨胀运算,并分析得到结果;

%% 膨胀运算
Dilate_Disk=imdilate(I,Strel_Disk);
Dilate_Rectangle=imdilate(I,Strel_Rectangle);
Dilate_Square=imdilate(I,Strel_Square);
Dilare_Line=imdilate(I,Strel_Line);
figure,subplot(231),imshow(Img),title('原图');
subplot(232),imshow(I),title('二值化图');
subplot(233),imshow(Dilate_Disk),title('圆型膨胀');
subplot(234),imshow(Dilate_Rectangle),title('矩形膨胀');
subplot(235),imshow(Dilate_Square),title('方形膨胀');
subplot(236),imshow(Dilare_Line),title('线性膨胀');

6.对得到的二值图像,利用不同的结构元素进行开运算,并分析得到结果;

%% 开运算
Open_Disk=imopen(I,Strel_Disk);
Open_Rectangle=imopen(I,Strel_Rectangle);
Open_Square=imopen(I,Strel_Square);
Open_Line=imopen(I,Strel_Line);
figure,subplot(231),imshow(Img),title('原图');
subplot(232),imshow(I),title('二值化图');
subplot(233),imshow(Open_Disk),title('圆型开运算');
subplot(234),imshow(Open_Rectangle),title('矩形开运算');
subplot(235),imshow(Open_Square),title('方形开运算');
subplot(236),imshow(Open_Line),title('线性开运算');

7.对得到的二值图像,利用不同的结构元素进行闭运算,并分析得到结果;

%% 闭运算
Close_Disk=imclose(I,Strel_Disk);
Close_Rectangle=imclose(I,Strel_Rectangle);
Close_Square=imclose(I,Strel_Square);
Close_Line=imclose(I,Strel_Line);
figure,subplot(231),imshow(Img),title('原图');
subplot(232),imshow(I),title('二值化图');
subplot(233),imshow(Close_Disk),title('圆型闭运算');
subplot(234),imshow(Close_Rectangle),title('矩形闭运算');
subplot(235),imshow(Close_Square),title('方形闭运算');
subplot(236),imshow(Close_Line),title('线性闭运算');

8.每幅图像均需有含义明确的图题。