renrj 发表于 2007-6-2 18:18

大家帮忙看看这个去噪实验

图片贴不上。。。。。。
这是一个图形去噪的实验,先用分水岭分割图像,然后再对分割的每一块用维纳滤波进行去噪。我知道可以直接对整幅图形去噪,这样做只是个实验,结果去噪后的图像有很多因为分割产生的小方格。
大家帮我看看是怎么回事?应该怎么样修正?不胜感激

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(:));%分割区域个数
=size(ima);
for s=1:cn
    wat1=zeros(w,h);
    =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,);
%   end
    mr=wiener2(mc,);
    ima(min(r):max(r),min(v):max(v))=mr;%将滤波后的区域还原到原位置
end
figure,imshow(ima);
=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))
页: [1]
查看完整版本: 大家帮忙看看这个去噪实验