一、形态学操作的MATALB实现
1. 腐蚀操作
IM2=imerode(IM,SE);
IM2=imerode(IM,NHOOD);
IM2=imerode(_,PACKOPT,M);
IM2=imerode(_,SHAPE);
IM2=imerode(gpuarrayIM,_)
其中,IM、IM2分别为输入图像和输出图像;
SE为结构元素,SE可以是一个定义结构元素邻域的二进制矩阵或由strel函数返回的对象;
NHOOD是一个由0和1组成的数组,用来指定结构元素的大小和形状;
PACKOPT、M、SHAPE是可选参数,用来说明输入输出图像的大小、形状信息
e.g. 1 使用圆形结构对一幅二值图像进行腐蚀
% 读入一张图片
originalBW=imread('circles.png');
% 定义结构元素
se=strel('disk',11);
% 施加腐蚀操作
erodedBW=imerode(originalBW,se);
% 显示结果
subplot(121);
imshow(originalBW);title('原图');
subplot(122);
imshow(erodedBW);title('腐蚀后');
e.g.2 使用球形结构对一幅灰度图像进行腐蚀操作
% 读入一张图片
originalI=imread('cameraman.tif');
% 定义结构元素
se=strel('ball',5,5); %创建椭圆体,半径5,高5
% 施加腐蚀操作
erodedI=imerode(originalI,se);
% 显示结果
subplot(121);
imshow(originalI);title('原图');
subplot(122);
imshow(erodedI);title('腐蚀后');
2. 膨胀操作
MATLAB使用imdilate函数对指定的图像进行膨胀操作,参数与imerode中相同。
e.g.1 使用圆形结构对一幅二值图像进行膨胀
% 读入一张图片
originalI=imread('text.png');
% 定义长度为11、与水平方向夹角为90度的线性结构
se=strel('line',11,90);
% 施加膨胀操作
erodedI=imdilate(originalI,se);
% 显示结果
subplot(121);
imshow(originalI);title('原图');
subplot(122);
imshow(erodedI);title('膨胀后');
e.g.2 使用球形结构对一幅灰度图像进行膨胀。
% 读入一张图片
originalI=imread('cameraman.tif');
% 定义半径为5的球形结构
se=strel('ball',5,5);
% 施加膨胀操作
erodedI=imdilate(originalI,se);
% 显示结果
subplot(121);
imshow(originalI);title('原图');
subplot(122);
imshow(erodedI);title('膨胀后');
3.应用
膨胀:桥接裂缝
3. 开运算与闭运算
开运算是先对图像进行腐蚀操作,再对腐蚀结果做膨胀操作;
开运算常用来平滑图像轮廓,断开狭窄的连接和消除细的突出物。
闭运算是先对图像进行膨胀操作,再对膨胀结果做腐蚀操作;
闭运算通过融合缝隙,对图像不平滑的部分进行填补,消除狭窄的间断和细长的鸿沟,消除小的孔洞,并填补轮廓线中的裂痕。