分水岭分割图像去噪

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

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

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))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值