subplot(1,2,2); subimage(BW1);
title('使用bwmorph函数膨胀') 图像处理结果如图5-3所示
图5-3膨胀处理后
5.2.2 腐蚀
腐蚀的算符为?,A用B来腐蚀写作A?B。其定义为
A?B?{x|(B)x?A}
用B来腐蚀A得到集合是B完全包括在A中时B的中心像素位置的集合。MATLAB中用erode函数来实现腐蚀操作。 MATLAB代码如下:
I=imread('cameraman.tif'); J=im2bw(I);
36
SE=eye(5); BW1=erode(J,SE); subplot(1,2,1); subimage(J);
title('二值处理的图像'); subplot(1,2,2); subimage(BW1);
title('使用erode函数腐蚀') 图像处理结果如图5-4所示
图5-4腐蚀处理后
5.3 二值分析进行图像处理综合应用
5.3.1 噪声滤除
将开启和闭合结合起来可构成噪声滤除器。开启就是先对图像进行腐蚀后膨胀其结果。闭合就是先对图像进行膨胀后腐蚀其结果。
37
开启和闭合这两种运算都可以除去比结构元素小特定图像细节,同时保证不产生全局几何失真。开启运算可以把结构元素小的突刺滤掉,切断细长搭接而起到分离作用。闭合运算可以把比结构元素小的缺口或孔填充上,搭接短的间断而起到连通的作用。
将开启和闭合结合起来可构成形态学噪声滤除器。开启结果将背景上的噪声去除了;再进行闭合则将噪声去掉。 MATLAB代码:
I1=imread('saturn.tif'); I2=im2bw(I1); I2=double(I2);
I3=imnoise(I2,'salt & pepper'); I4=bwmorph(I3,'open'); I5=bwmorph(I4,'close'); subplot(2,2,1); subimage(I2);
title('二值处理的图像'); subplot(2,2,2); subimage(I3);
title('加入椒盐噪声的图像') subplot(2,2,3); subimage(I4);
title('开启操作所得的图像'); subplot(2,2,4); subimage(I5);
title('再关闭操作所得的图像')
38
图像处理如图5-5所示
图5-5 噪声滤除处理
5.3.2 边界提取
二值图像中,所谓的对像就是值为1的连接在一起的像素的集合。例如以下的代表了一个简单的3*3的方形对像
0 0 0 0 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 0 0 0 0 0
有4-连接和8-连接边沿
对于大多数操作来说,二值图像中对像的识别依赖于确定图像中相邻像素是否连接的约定方式。
39
边界提取实际上就是掏空内部点:如果原图中有一点为黑,且它的8个相邻点都是黑色时(此时该点是内部点),则将该点删除。
在MATLAB中提供了bwperim(I,n)函数来提取二值图像中对像的边界像素。其中n表示采用何种连接,默认为4-连接。 MATLAB代码所示: I1=imread('blood1.tif'); I2=im2bw(I1); I3=bwperim(I2); subplot(1,2,1); subimage(I2);
title('二值处理的图像'); subplot(1,2,2); subimage(I3);
title('边界处理的图像') 图像处理结果如图5-6所示:
40