图像噪声去除

实验3 图像噪声去除

一、实验目的

1、掌握基于均值平滑操作的信号去噪方法的基本原理(适用于一维或二维信号的情况)。了解加性噪声和乘性噪声各自的特点。
2、掌握均值滤波器的工作原理和算法实现。
3、掌握中值滤波器的工作原理和算法实现。
4、理解边界保持类滤波器的工作原理。
5、掌握KNN(K近邻平滑滤波器)、SNN(对称近邻平滑滤波器)的算法思想及代码实现。

二、实验内容

1、调用matlab自带函数imnoise、medfilt2、filter2实现如下功能:

(1)生成含有高斯噪声、椒盐噪声的图像
(2)使用均值滤波分别对高斯噪声、椒盐噪声的图像进行滤波。
(3)使用中值滤波分别对高斯噪声、椒盐噪声的图像进行滤波。
(代码不需要提交)

function [ output_args ] = Untitled3( impath,n )
%[ output_args ] = Untitled3( 'im\cameraman.tif',3);
I=imread(impath);
J=imnoise(I,'salt & pepper');
figure,imshow(J),title('椒盐图象'); 
G=imnoise(I,'gaussian');
figure,imshow(G),title('高斯图象'); 
ft=ones(n,n)/(n*n);
K1=medfilt2(J);
figure,imshow(K1),title('椒盐均值图象'); 
K2=medfilt2(G);
figure,imshow(K2),title('高斯均值图象'); 
F1=uint8(filter2(ft,J));
figure,imshow(F1),title('椒盐中值图象'); 
F2=uint8(filter2(ft,G));
figure,imshow(F2),title('高斯中值图象'); 



end
2、实现KNN(K近邻平滑滤波器)的代码。

要求:
算法实现为函数[im]=KNN_denoise (I,K,N),其中I为读入的图像矩阵;K为最近邻个数,N为模板大小参数(N*N)。
测试代码如下:

im=imread('im\cameraman.tif');   
im_noise=imnoise(im,'salt & pepper');  %加入椒盐噪声
figure,imshow(im_noise),title('加入椒盐噪声图象'); 
N = 7; K=25;
[im_filered]=KNNFilter(im_noise,N,K);

(代码复制到此处)

function [im_filered]=KNNFilter(im_noise,N,K)
[h,l,c]=size(im_noise);
Y=zeros(h,l);
n=floor(N/2);%向下取整得到前后行
im=double(im_noise);
mid=floor((N*N)/2)+1;
for i=n+1:h-n
    for j=n+1:h-n
        block=im(i-n:i+n,j-n:j+n);%找到以i,j为中心的N*N的矩阵
        blockdelt=abs(block-im(i,j));
        blockdeltline=blockdelt(:);%变成一行
        blockdeltline(mid)=[];%去除中心元素
        [temsort,ind]=sort(blockdeltline);%排序
        block2line=block(:);
        block2line(mid)=[];
        KNNS=block2line(ind(1:K));
        Y(i,j)=mean(KNNS);%求均值
    end
end

Y=floor(Y);

im_filered=uint8(Y);
figure,imshow(im_filered),title('KNNS图象'); 


end
3、实现SNN(对称近邻平滑滤波器)的代码。

要求:
算法实现为函数[im]=SNN_denoise (I,N),其中I为读入的图像矩阵; N为模板大小参数(正方形模板,边长为:2*N+1)。
测试代码如下:

im=imread('im\cameraman.tif');  %%mandi.tif'); 
im_noise=imnoise(im,'salt & pepper');  %加入椒盐噪声
figure,imshow(im_noise),title('加入噪声之后的图象');  
[im_filered]=SNNFilter(im_noise,2);

figure,imshow(im_filered),title(‘SNN滤波图像’); %显示滤波后的图象
(代码复制到此处)

function [im_filered]=SNNFilter(im_noise,n)
[h,l,c]=size(im_noise);
Y=zeros(h,l);
for i=n+1:h-n
    for j=n+1:l-n
        temp=[];
        for r=i-n:i+n
            for c=j-n:j+n
                a0=double(im_noise(i,j));%区中心点
                a1=double(im_noise(r,c));%取当前点
                a2=double(im_noise(2*i-r,2*j-c));%取对称点
                if(abs(a1-a0)>abs(a2-a0))
                    select_a=a2;
                else
                    select_a=a1;
                end
                if~(r==i&&c==j)
                    temp=[temp,select_a];
                end
            end
        end
        Y(i,j)=mean(temp);
    end
end
im_filered=uint8(Y);

end
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值