📅  最后修改于: 2023-12-03 14:44:11.737000             🧑  作者: Mango
形态运算是数字图像处理领域中常用的一种处理方法,可以用来提取图像的特征、消除噪声、改善图像质量等。MATLAB中也提供了丰富的形态运算函数,包括膨胀、腐蚀、开运算、闭运算、顶帽运算和底帽运算等。
形态运算是基于图像形态学的一种图像处理方法,其本质是将一个特定的结构元素应用于待处理的图像,通过结构元素和像素之间的逻辑运算来改变图像的形态。基本的形态运算包括膨胀和腐蚀两种,其它形态运算都是在这两种基本运算的基础上演变而来的。
膨胀:将结构元素沿着边界向外膨胀,即将结构元素覆盖在图像上,只要有一个像素点在结构元素内,那么该像素点就被赋值为1.
腐蚀:将结构元素沿着边界向内腐蚀,即将结构元素覆盖在图像上,只有结构元素内的所有像素点都为1,才将该像素点赋值为1.
开运算:先对图像进行腐蚀操作,再在腐蚀的基础上进行膨胀操作。
闭运算:先对图像进行膨胀操作,再在膨胀的基础上进行腐蚀操作。
顶帽运算:通过在原图像和开运算之间进行差分得到的图像,可以突出比原图像亮的特征。
底帽运算:通过在闭运算和原图像之间进行差分得到的图像,可以突出比原图像暗的特征。
下面是MATLAB中常用的形态运算函数,具体用法可以参见MATLAB官方文档。
BW2 = imdilate(BW,SE)
其中,BW为二值化图像,SE为选择的结构元素。比如选择一个10x10的矩形:
SE = strel('rectangle',[10 10]);
BW2 = imerode(BW,SE)
其中,BW为二值化图像,SE为选择的结构元素。
BW2 = imopen(BW,SE)
其中,BW为二值化图像,SE为选择的结构元素。
BW2 = imclose(BW,SE)
其中,BW为二值化图像,SE为选择的结构元素。
BW2 = imtophat(BW,SE)
其中,BW为二值化图像,SE为选择的结构元素。
BW2 = imbothat(BW,SE)
其中,BW为二值化图像,SE为选择的结构元素。
下面是一个简单的实例演示,将结构元素分别设置为音符和圆形,对图像进行膨胀操作,可以看到音符的横线和圆形的圆心得到了放大。
% 使用不同的SE对图像进行膨胀操作
img = imread('music.png');
SE1 = strel('line', 11, 90);
SE2 = strel('disk', 5);
img_d1 = imdilate(img, SE1);
img_d2 = imdilate(img, SE2);
subplot(1,3,1), imshow(img), title('原图');
subplot(1,3,2), imshow(img_d1), title('音符结构元素膨胀');
subplot(1,3,3), imshow(img_d2), title('圆形结构元素膨胀');