%实现去噪处理的三个小算法,并显示噪声图。
map1=imread('p.jpg');
[row,col,dep]=size(map1); %行,列,深度值
map=zeros(row,col);
map=uint8(map);
pixsum=row*col; %像素总数
%灰度化
for i=1:row
for j=1:col
map(i,j)=0.11*map1(i,j,1)+0.59*map1(i,j,2)+0.3*map1(i,j,3);
end
end
%灰度化完成,输出灰度图
figure(1)
imshow(map)
title('原始灰度图像')
%@@@@@@@@@@@@@@@@@@@@@均值滤波,存储在fig1中
fig1=zeros(row,col);
for i=2:row-1
for j=2:col-1
fig1(i,j)=1/9*sum(sum(map(i-1:i+1,j-1:j+1)));
% fig1(i,j)=1/9*(map(i-1,j-1)+map(i-1,j)+map(i-1,j+1)+map(i,j-1)+...
% map(i,j)+map(i,j+1)+map(i+1,j-1)+map(i,j+1)+map(i+1,j+1));
end
end
%滤波完成,边缘处理,直接将原图边缘加入
fig1(1,:)=map(1,:);
fig1(row,:)=map(row,:);
fig1(:,1)=map(:,1);
fig1(:,col)=map(:,col);
fig1=uint8(fig1);
%边缘处理完成
figure(2)
subplot(2,1,1)
imshow(fig1)
title('均值去噪')
fig11=map-fig1;
subplot(2,1,2)
imshow(fig11)
title('噪声图像')
%@@@@@@@@@@@@@@@@@@@@@加权滤波,存储在fig2中
fig2=uint8(zeros(row,col));
model=uint8([1 2 1;2 4 2;1 2 1]);
for i=2:row-1
for j=2:col-1
fig2(i,j)=sum(sum(map(i-1:i+1,j-1:j+1).*model))/16;
%fig2(i,j)=1/16*(map(i-1,j-1)+2*map(i-1,j)+map(i-1,j+1)+2*map(i,j-1)+...
%4*map(i,j)+2*map(i,j+1)+map(i+1,j-1)+2*map(i,j+1)+map(i+1,j+1));
end
end
%滤波完成,边缘处理,直接将原图边缘加入
fig2(1,:)=map(1,:);
fig2(row,:)=map(row,:);
fig2(:,1)=map(:,1);
fig2(:,col)=map(:,col);
figure(3)
subplot(2,1,1)
imshow(fig2)
title('加权去噪')
fig21=map-fig2;
subplot(2,1,2)
imshow(fig21)
title('噪声图像')
%@@@@@@@@@@@@@@@@@@@@@中值滤波,存储在fig3中
fig3=uint8(zeros(row,col));
sortmap=uint8(zeros(1,9));
for i=2:row-1
for j=2:col-1
sortmap=sort([map(i-1,j-1:j+1),map(i,j-1:j+1),map(i+1,j-1:j+1)]);
fig3(i,j)=sortmap(5);
end
end
%滤波完成,边缘处理,直接将原图边缘加入
fig3(1,:)=map(1,:);
fig3(row,:)=map(row,:);
fig3(:,1)=map(:,1);
fig3(:,col)=map(:,col);
figure(4)
subplot(2,1,1)
imshow(fig3)
title('中值去噪')
fig31=map-fig3;
subplot(2,1,2)
imshow(fig31)
title('噪声图像')