一、实验任务与要求
- 实现一个自适应局部降噪滤波器;
- 在一幅测试版图像中加入运动模糊和高斯噪声,产生一幅退化图像,采用 deconvwnr 函数实现逆滤波及维纳滤波。
二、实验报告
(一)实现一个自适应局部降噪滤波器
1、自适应局部降噪滤波器函数
%自适应局部降噪滤波器函数 adpfilter
function g=adpfilter(f,nhood,noise_var)
f=im2double(f);
local_mean=filter2(ones(nhood),f)/prod(nhood); %局部均值 u=(1/mn)*∑f(x,y) 模板滤波,重叠区相*然后相加
local_var=filter2(ones(nhood),f.^2)/prod(nhood)-local_mean.^2; %局部方差 σ^2=(1/mn)*∑f^2(x,y)-u^2
g=f-local_mean; %g(x,y)=f(x,y)-u
f=local_var-noise_var; %局部方差-噪声方差
f=max(f,0);
g=local_mean+((g./max(local_var,noise_var)).* f);
end
2、处理代码
f=imread('circuitboard.tif');
f=imnoise(f,'gaussian',0,0.01); %添加高斯噪声
g=adpfilter(f,[3,3],1000);%自适应局部降噪滤波器
subplot(1,2,1);
imshow(f);title('原图');
subplot(1,2,2);
imshow(g);title('自适应局部降噪');
3、处理效果
(二)在一幅测试版图像中加入运动模糊和高斯噪声,产生一幅退化图像,采用 deconvwnr 函数实现逆滤波及维纳滤波
1、给图像加上运动模糊
f=imread('checkerboard-clean.tif');
f=im2double(f);
PSF=fspecial('motion',45,45); %运动滤波器
gb=imfilter(f,PSF,'circular'); %运动模糊
2、继续加上高斯噪声
noise=imnoise(zeros(size(f)),'gaussian',0,0.001); %均值为0,方差为0.001的高斯噪声
g=gb+noise; %运动模糊+高斯噪声
subplot(4,2,1);
imshow(f);title('原图');
subplot(4,2,2);
imshow(gb);title('运动模糊图像');
subplot(4,2,3);
imshow(noise);title('高斯噪声图像');
subplot(4,2,4);
imshow(g);title('模糊图像+噪声图像');
3、处理效果
4、实现逆滤波(忽略噪声)
default_nsr=0;
r1=deconvwnr(g,PSF,default_nsr);
subplot(4,2,5);
imshow(r1);title('逆滤波');
5、实现维纳滤波(考虑噪声)
signal_var=var(f);
noise_var=var(noise);
estimate_nsr=noise_var/signal_var;
r2=deconvwnr(g,PSF,estimate_nsr);
subplot(4,2,6);
imshow(r2);title('考虑噪声的维纳滤波');
6、处理效果