基于维纳滤波的图像复原算法

维纳滤波也称最小均方误差滤波,它能处理被退化函数退化和噪声污染的图像。该滤波方法建立在图像和噪声都是随机变量的基础之上,目标是找到未污染图像I(x,y)的一个估计。

clear all;clc;
I = imread('Lena.tif');
I=im2double(I);
noise = 0.1*randn(size(I));
% PSF = fspecial('motion',21,11);
PSF = fspecial('gaussian',[5,5],0.05);
Blurred = imfilter(I,PSF,'circular');
BlurredNoisy = Blurred + noise;
%求NSR方法一
%NSR = sum(noise(:).^2)/sum(I(:).^2);% 噪声功率比

NP = abs(fftn(noise)).^2;%噪声功率
NCORR = fftshift(real(ifftn(NP)));% 噪声自相关(噪声功率谱)
IP = abs(fftn(I)).^2;% 原始图像的功率
ICORR = fftshift(real(ifftn(IP)));%图像自相关(图像功率谱)

NPOW = sum(NP(:))/prod(size(noise));
IPOW = sum(IP(:))/prod(size(I));
%求NSR方法二
NSR = NPOW/IPOW;

ICORR1 = ICORR(:,ceil(size(I,1)/2));

subplot(221);imshow(BlurredNoisy,[]);
title('A = Blurred and Noisy');
subplot(222);imshow(deconvwnr(BlurredNoisy,PSF,NSR),[]);
title('deconvwnr(A,PSF,NSR)');
subplot(223);imshow(deconvwnr(BlurredNoisy,PSF,NCORR,ICORR),[]);
title('deconvwnr(A,PSF,NCORR,ICORR)');
subplot(224);imshow(deconvwnr(BlurredNoisy,PSF,NPOW,ICORR1),[]);
title('deconvwnr(A,PSF,NPOW,ICORR_1_D)');

基于维纳滤波的图像复原算法_第1张图片

你可能感兴趣的:(图像处理算法)