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('使用自相关函数的维纳滤波结果');
?
|