clc;
clear;
format long;
yuan=imread('sturn.gif');
yuan=rgb2gray(yuan);
yuan=imresize(yuan,[300,300]);                              
subplot(1,4,1),imshow(yuan),title('原始图像')
psf=fspecial('average',[10,10]);
PSF=fft2(psf);
subplot(1,4,2),imshow(PSF);title('点扩散函数频域图')
mf=imfilter(yuan,psf,'full');
subplot(1,4,3),imshow(mf);title('模糊图像')
mf=im2double(mf);   %将图象数组转换成double精度类型
psf=im2double(psf); 
MF=fft2(mf);
h=ones(4,4);                 %估计点扩散函数
h=im2double(h);
h(size(mf),size(mf))=0; 
n=6   
for w=1:n
    w
H=fft2(h);
 HH=conj(H);                       % 取矩阵 H 的共轭矩阵
r1=16;                             
O=(HH.*MF)/((det(H))^2+r1);
% o=abs(ifft2(O));
% subplot(1,4,4),imshow(o);title('恢复图像')      % 恢复图像
% df
o=abs(ifft2(O));
O=fft2(o);
OO=conj(O);
r2=1;
H=(OO.*MF)/((det(O))^2+r2);
% h=abs(ifft2(H));
% subplot(1,4,4),imshow(h);title('点扩散函数图像')      % 外形相似
% df
h=abs(ifft2(H));
end
subplot(1,4,4),imshow(o);title('恢复图像')      % 恢复图像
以上程序是维纳滤波迭代算法的一个例子,但是只有n=1即在第一次迭代时候才会出现恢复图像,其它情况下是恢复不了,还有我是在模糊图像已知和点扩散函数估计的前提下进行图像的盲反卷积的。为什么迭代次数不为1的话就不能够恢复出图像呢???望高手赐教!谢谢!