形态学中两种基本的操作是膨胀和腐蚀,膨胀是指在图像中为其边界添加像素点,而腐蚀是其逆过程。对应的添加和移除像素点数依赖于处理图像结构元素矩阵的大小和形式。
一.膨胀处理
膨胀的运算符为⊕, A用B来膨胀写作A⊕B,MATLAB中提供了预定义的形态函数bwmorph,imdilate函数用于实现膨胀处理。
1.利用预定义的形态函数bwmorph对二值图像进行膨胀处理
clc; %clc的作用就是清屏幕clear; %clear是删除所有的变量close all; %close all是将所有打开的图片关掉。I=imread('4.jpg'); %读取图像subplot(1,3,1);subimage(I);title('原始图像');J=im2bw(I);BW1=bwmorph(J, 'dilate'); %对二值图像进行膨胀处理subplot(1,3,2);subimage(J);title('二值处理的图像');subplot(1,3,3);subimage(BW1);title('使用bwmorph函数膨胀')
2.对灰度图像进行膨胀处理。
clc; %clc的作用就是清屏幕clear; %clear是删除所有的变量close all; %close all是将所有打开的图片关掉。I=imread('4.jpg'); %读取图像i=rgb2gray(I);se=strel('ball',6,6);i2=imdilate(i, se); %进行膨胀处理subplot(1,2,1);imshow(i);title('原始图像') ;subplot(1,2,2);imshow(i2);title('膨胀处理后的图像')
二、腐蚀处理
腐蚀的运算符为Θ, A用B来腐蚀,写作AΘ B,imerode函数用于实现腐蚀处理。
1.对二值图像进行腐蚀处理。
clc; %clc的作用就是清屏幕clear; %clear是删除所有的变量close all; %close all是将所有打开的图片关掉。I=imread('4.jpg'); %读取图像i=im2bw(I);se=strel('line',11,90);bw=imerode(i, se); %进行腐蚀处理subplot(1,2,1);imshow(i);title('原始图像') ;subplot(1,2,2);imshow(bw);title('二值图像腐蚀处理后') ;
2.对灰度图像进行腐蚀
clc; %clc的作用就是清屏幕clear; %clear是删除所有的变量close all; %close all是将所有打开的图片关掉。I=imread('4.jpg'); %读取图像i=rgb2gray(I);se=strel('ball',5,5);i2=imerode(i, se); %对灰度图像进行腐蚀subplot(1,2,1);imshow(i);title('原始图像') ;subplot(1,2,2);imshow(i2);title('灰度图像腐蚀处理') ;
三.膨胀和腐蚀组合
膨胀和腐蚀是两种基本的形态运算,它们可以组合成复杂的形态运算,比如开启和闭合运算等。使用同一个结构元素对图像先进行腐蚀运算然后再进行膨胀的运算称为开启。先进行膨胀运算然后再进行腐蚀的运算称为闭合。
1.图像的开运算
先腐蚀后膨胀的运算称为开运算。开启的运算符为“◦”, A 用 B 来开启记为 A◦B。imopen函数用于实现图像的开运算。
clc; %clc的作用就是清屏幕clear; %clear是删除所有的变量close all; %close all是将所有打开的图片关掉。I=imread('1.jpg'); %读取图像i=rgb2gray(I);subplot(1,2,1);imshow(i);title('原始图像') ;se=strel('disk',7);i0=imopen(i, se);subplot(1,2,2);imshow(i0); %开运算title('开运算') ;
2.图像的闭运算
A被B闭运算就是A被B膨胀后的结果再被B腐蚀。设A是原始图像B是结构元素图像,则集合A被结构元素B作闭运算,记为A· B。imclose函数用于实现图像的闭运算。
clc; %clc的作用就是清屏幕clear; %clear是删除所有的变量close all; %close all是将所有打开的图片关掉。i=imread('1.jpg'); %读取图像subplot(1,2,1);imshow(i);title('原始图像') ;se=strel('disk',10);bw=imclose(i, se); %闭运算subplot(1,2,2);imshow(bw);title('闭运算') ;
3.将开启和闭合结合起来构成形态学噪声滤除器对图像进行除噪
clc; %clc的作用就是清屏幕 clear; %clear是删除所有的变量 close all; %close all是将所有打开的图片关掉。 I1=imread('2.jpg'); %读取图像 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('关闭操的图像')
4.对图像分别进行膨胀和腐蚀处理、开闭运算
clc; %clc的作用就是清屏幕 clear; %clear是删除所有的变量 close all; %close all是将所有打开的图片关掉。 I=imread('4.jpg'); %读取图像 level=graythresh(I); %得到合适的阈值 bw=im2bw(I, level); %二值化 SE=strel('square',3); %设置膨胀结构元素 BW1=imdilate(bw, SE); %膨胀 SE1=strel('arbitrary', eye(5)); %设置腐蚀结构元素 BW2=imerode(bw, SE1); %腐蚀 BW3=bwmorph(bw, 'open'); %开运算 BW4=bwmorph(bw, 'close'); %闭运算 subplot(2,3,1); imshow(I); title('原始图像') ; subplot(2,3,2); imshow(bw); title('二值处理的图像'); subplot(2,3,3); imshow(BW1); title('膨胀处理的图像'); subplot(2,3,4); imshow(BW2); title('腐蚀处理的图像'); subplot(2,3,5); imshow(BW3); title('开运算'); subplot(2,3,6); imshow(BW4); title('闭运算');