数学形态学处理
二值图像的腐蚀、膨胀、开运算和闭运算操作
1.准备图像
bw_im=imread('Electronic.jpg');
imshow(bw_im);
2.膨胀操作
bw=imread('Electronic.jpg');
se = strel('line',11,90);
BW2 = imdilate(bw,se);
imshow(BW2);
3.腐蚀操作
bw=imread('Electronic.jpg');
se = strel('line',11,90);
BW2 = imerode(bw,se);
imshow(BW2);
4.开运算
bw=imread('Electronic.jpg');
se = strel('disk',5);
BW2 = imopen(bw,se);
imshow(BW2);
5.闭运算
bw=imread('Electronic.jpg');
se = strel('disk',15);
BW2 = imclose(bw,se);
imshow(BW2);
习题
1.使用不同形状和大小的结构元素,做以下处理
对Electronic.jpg做腐蚀运算处理
disk,5;disk,15
bw=imread('Electronic.jpg');
se = strel('disk',5);
se2 = strel('disk',15);
BW1 = imerode(bw,se);
BW2 = imerode(bw,se2);
subplot(1,3,1);imshow(bw);title('Electronic.jpg');
subplot(1,3,2);imshow(BW1);title('disk,5');
subplot(1,3,3);imshow(BW2);title('disk,15');
对Text.jpg做膨胀运算处理
disk ,1
bw=imread('Text.jpg');
bw2=im2bw(bw,0.3);
se = strel('disk',1);
BW1 = imdilate(bw2,se);
subplot(1,2,1);imshow(bw2);title('Text.jpg');
subplot(1,2,2);imshow(BW1);title('disk,1');
对Bubble.jpg 用来做开运算处理
disk,10
bw=imread('Bubble.jpg');
se = strel('disk',10);
BW1 = imopen(bw,se);
subplot(1,2,1);imshow(bw);title('Bubble.jpg');
subplot(1,2,2);imshow(BW1);title('disk,10');
对Stamper.jpg做闭运算处理
square,3;square,7
bw=imread('stamper.jpg');
bw2=im2bw(bw,0.3);
se = strel('square',3);
se2 = strel('square',7);
BW1 = imclose(bw2,se);
BW2 = imclose(bw2,se2);
subplot(1,3,1);imshow(bw2);title('stamper.jpg');
subplot(1,3,2);imshow(BW1);title('square,3');
subplot(1,3,3);imshow(BW2);title('square,7');
2.利用1个半径为r/4的圆形结构元素膨胀1个半径为r的圆
自定义r
bw=imread('circle.jpg');%二值化
bw2=im2bw(bw,0.4);%定义结构元素
se = strel('disk',15,0);%膨胀操作
BW1 = imdilate(bw2,se);%出图
subplot(1,2,1);imshow(bw2);title('circle.jpg');
subplot(1,2,2);imshow(BW1);title('disk,15');
经过半径为r/4的圆形结构元素的膨胀处理后,圆的半径增大
3.给cameraman.jpg加上椒盐噪声,然后自选结构元素和形态学处理方法对其进行平滑去噪,并和中值滤波做对比
腐蚀与闭运算去噪
bw=imread('cameraman.jpg');
bw2=imnoise(bw,'salt & pepper',0.05); %定义结构元素
se = strel('disk',1);
se2 = strel('disk',1);
%闭运算
BW1 = imclose(bw2,se);
%腐蚀运算
BW2 = imerode(BW1,se2);
%出图
subplot(1,2,1);imshow(bw2);title('cameraman.jpg');
subplot(1,2,2);imshow(BW2);title('处理后');
中值滤波去噪:
主函数
bw=imread('cameraman.jpg');
bw2=imnoise(bw,'salt & pepper',0.05); %中值滤波处理
G=med(bw2,3);%出图
subplot(1,2,1);imshow(bw2);title('cameraman.jpg');
subplot(1,2,2);imshow(G);title('中值滤波处理后');
med函数
function G=med(F,k)
[m,n]=size(F);
G=uint16(zeros(m,n));Ft=uint16(F);M=uint16(ones(k,k));
h=(k+1)/2;
for i=1:m
for j=1:n
if((i<h)||(j<h)||(i>m-h+1)||(j>n-h+1))
G(i,j)=Ft(i,j);continue;
end
T=Ft(i-(k-1)/2:i+(k-1)/2,j-(k-1)/2:j+(k-1)/2);
T=T.*M;
T=T(:);
G(i,j)=median(T);
end
end
腐蚀和闭运算因为使用了腐蚀,部分白色像素会过渡腐蚀,因此造成去噪结果会有呈现边缘不清晰的状态。而中值滤波是通过模板内取中值来代替,因而不会呈现这种特点。
代码文件可以从主页发布里面找
万水千山都是情,路过点个赞行不行!
希望看见的都可以帮忙点个赞!拜托了!
觉得还可以的动动手指帮忙点个赞!呜呜~