数字图像处理实验九维纳滤波

1、运动模糊图像

2、逆滤波结果

3、计算噪信比K值滤波结果

4、调节噪信比K参数,显示不同的维纳滤波结果

clear;
clc;
close all;

f = checkerboard(8);                  %调用棋盘板图像

%%将图像的数据格式转换为double型
f=im2double(f);                       %将灰度图像由uint8转为double

%%建立退化模型
PSF = fspecial('motion',27,55);          %对图像进行27个像素点,55度角的模糊建模                     
gb = imfilter(f,PSF,'circular');         %将图像与退化模型叠加 

%%添加噪声
noise = imnoise(zeros(size(f)),'gaussian',0,0.0001);%高斯噪声。均值为0,方差0.002  
g = gb + noise;                         %添加噪声的退化图像

%%当K=0时,相当于直接逆滤波
fr1 = deconvwnr(g,PSF);    %%逆滤波 {维纳滤波(退化图像,点扩散函数(退化模型),噪信比为0)}

%%通过比率进行维纳滤波
Sn = abs(fft2(noise)).^2;                %噪声功率谱                   
nA = sum(Sn(:))/numel(noise);            %噪声平均功率                   
Sf = abs(fft2(f)).^2;                    %图像功率谱                   
fA = sum(Sf(:))/numel(f);                %图像平均功率   
K = sum(noise(:).^2)/sum(f(:).^2);       %计算常数比率K                 
fr2 = deconvwnr(g,PSF,K);                %使用常数比率的维纳滤波复原

%%通过将自相关函数进行维纳滤波
NCORR = fftshift(real(ifft2(Sn)));       %噪声自相关函数
ICORR = fftshift(real(ifft2(Sf)));       %原图像自相关函数
fr3 = deconvwnr(g,PSF,NCORR,ICORR);      %使用自相关函数的滤波结果

%%形成一个3×3得窗口
subplot(2,3,1);imshow(f);title('原图像');
subplot(2,3,2);imshow(gb);title('运动模糊图像');
subplot(2,3,3);imshow(noise,[ ]);title('高斯噪声图像');
subplot(2,3,4);imshow(fr1);title('逆滤波结果(有噪声)');
subplot(2,3,5);imshow(fr2);title('计算噪信比K值滤波结果');
subplot(2,3,6);imshow(fr3);title('使用自相关函数的维纳滤波结果');

 

你可能感兴趣的:(Matlab数字图像处理实验,数字图像处理实验,Matlab,维纳滤波)