matlab数字图像处理----形态学图像处理

一、基本形态学运算

文章目录

(1)概念部分

%形态学:通常指生物学中对动植物的形状和结果进行处理的一个分支
%数学形态学:是根据形态学概念发展而来的具有严格数学理论基础的科学,并在图像处理和模式识别领域得到了成功应用
%基本思想是:
%用具有一定形态的结构元素去度量和提取图像中的对应形状以达到对图像分析和识别的目的
%形态学图像处理表现为一种领域运算形式:
%一种特殊定义的邻域称之为“结构元素”,在每个像素位置上它与二值图像对应的区域进行特定的逻辑运算,逻辑运算的结果为输出图像的相应像素
%形态学运算的效果取决于结构元素的大小,内容以及逻辑运算的性质
%用途是:
%简化图像数据,保持它们基本的形状特性,并出去不相干的结构
%基本运算包括:
%二值腐蚀和膨胀,二值开闭运算

%二值图像中的基本逻辑操作:与、或、非(补)
%尽管逻辑操作与集合操作存在一一对应关系,但逻辑操作只是针对二值图像

%二值形态学基本运算:膨胀、腐蚀、开和闭
%开操作opening:B对A进行的开操作就是先用B对A腐蚀,然后用B对结果进行膨胀;开运算平滑了对象的轮廓,断开了
%狭窄的连接,去掉了细小的突出部分和噪声
%闭操作closing:B对A进行的闭操纵就是先用B对A膨胀,然后用B对结果进行腐蚀;闭运算使物体的轮廓线变得光滑,
%将狭窄的缺口连接起来,并填充比结构元素小的洞口

%开操作的作用:
%使轮廓平滑,抑制A物体边界的小的离散点或尖峰
%用来消除小物体、在纤细点处分离物体、平滑较大物体的边界的同时并不改变其面积
%闭操作的作用:
%用来填充物体内细小空洞、连接邻近物体、平滑其边界的同时并不明显改变其面积

%函数Strel用来构造各种形状和大小的结构元素 Se = strel(shape, parameters)
%Se = strel(‘diamond’, R)创建一个平坦的菱形结构元素,其中R是从结构元素原点到菱形的最远点距离
Se = strel(‘diamond’,5)
%Se = strel(‘disk’,R)创建一个平坦的圆盘形结构的元素,其中半径是R
Se = strel(‘disk’, 5)
%Se = strel(‘line’,LEN,DEG)创建一个平坦的线性元素,其中LEN表示长度,DEG表示线的角度
Se = strel(‘line’,9,0)

(2)实验代码部分

%练习:创建图像并进行膨胀操作
bw = zeros(9,9);
bw(3:5, 4:6)=1;%置白
se = strel(‘square’,3)%矩形结构元素
bw2 = imdilate(bw,se)%进行膨胀操作
subplot(1,2,1),imshow(bw);
subplot(1,2,2),imshow(bw2);

%练习:对二值图像进行膨胀
bw = imread(‘text.png’);%读入图像
se = strel(‘line’,11,90);%线性结构元素
bw2 = imdilate(bw, se);
subplot(1,2,1),imshow(bw);
subplot(1,2,2),imshow(bw2)

%练习:对灰度图像进行膨胀
bw = imread(‘cameraman.tif’);
se = strel(‘ball’,5,5);%球形结构元素
bw2 = imdilate(bw,se);
subplot(1,2,1),imshow(bw);
subplot(1,2,2),imshow(bw2);

%练习:对灰度图像进行腐蚀
bw = imread(‘circles.png’);
se = strel(‘disk’,11)%盘型结构元素
bw2 = imerode(bw,se);
subplot(1,2,1),imshow(bw);
subplot(1,2,2),imshow(bw2);

%练习:对图像进行腐蚀和膨胀操作
se = strel(‘rectangle’,[40,30])%矩形结构元素
bw = imread(‘circbw.tif’);
bw1 = imerode(bw,se);
bw2 = imdilate(bw1,se);
subplot(1,3,1),imshow(bw);
subplot(1,3,2),imshow(bw1);
subplot(1,3,3),imshow(bw2);

%练习:对图像进行开运算(先腐蚀再膨胀)
I = imread(‘snowflakes.png’)%读入图像
se = strel(‘disk’,5);%盘型结构元素
I1 = imopen(I,se);
subplot(1,2,1),imshow(I);
subplot(1,2,2),imshow(I1,[]);

%练习:对图像进行闭运算
I = imread(‘circles.png’)%读入图像
se = strel(‘disk’,10);%盘型结构元素
I1 = imclose(I,se);
subplot(1,2,1),imshow(I);
subplot(1,2,2),imshow(I1,[]);

上一篇:MATLAB绘制三角网及三维网线


下一篇:8. matlab图像处理基础——边缘检测+形态学变换+图像增强