马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
图片贴不上。。。。。。
这是一个图形去噪的实验,先用分水岭分割图像,然后再对分割的每一块用维纳滤波进行去噪。我知道可以直接对整幅图形去噪,这样做只是个实验,结果去噪后的图像有很多因为分割产生的小方格。
大家帮我看看是怎么回事?应该怎么样修正?不胜感激
clear all
% global kw kh
% kw=5;
% kh=5;
ima = imread('lena.pgm');
imac=ima;
ima=imnoise(ima,'gaussian',0.0096);
imn=ima;
figure, imshow(ima);
se = strel('disk', 15);
Itop = imtophat(ima, se); % 高帽变换
Ibot = imbothat(ima, se); % 低帽变换
%figure, imshow(Itop, []); % 高帽变换,体现原始图像的灰度峰值
%figure, imshow(Ibot, []); % 低帽变换,体现原始图像的灰度谷值
Ienhance = imsubtract(imadd(Itop, ima), Ibot);% 高帽图像与低帽图像相减,增强图像
%figure, imshow(Ienhance);
Iec = imcomplement(Ienhance); % 进一步增强图像
Iemin = imextendedmin(Iec, 20);
%figure,imshow(Iemin) % 搜索Iec中的谷值
Iimpose = imimposemin(Iec, Iemin);
wat = watershed(Iimpose); % 分水岭分割
figure,imshow(wat),title('water');
% rgb = label2rgb(wat); figure, imshow(rgb); % 用不同的颜色表示分割出的不同区域
cn=max(wat(:));%分割区域个数
[w,h]=size(ima);
for s=1:cn
wat1=zeros(w,h);
[r v t]=find(wat==s);
% mx=max(r)-min(r)+1;
% my=max(v)-min(v)+1;
% M=mx*my;
mc=ima(min(r):max(r),min(v):max(v));%提取分割区域
% if IsMani(mc)
% mr=RIlle(mc);
% else
% mr=wiener2(mc,[3 3]);
% end
mr=wiener2(mc,[3 3]);
ima(min(r):max(r),min(v):max(v))=mr;%将滤波后的区域还原到原位置
end
figure,imshow(ima);
[nx,ny]=size(ima); % calculate psnr value
ima=im2double(ima);
imac=im2double(imac);
imn=im2double(imn);
y1 = -10.0*log10(norm(imac-ima,'fro')^2/(nx*ny))
y2 = -10.0*log10(norm(imac-imn,'fro')^2/(nx*ny)) |