差不多就是这个理论,傅里叶变换之后除掉退化函数的傅里叶变换,就变回来了。
说是这么说,写出来就是这样。手写公式简单得多,人懒就是任性。
matlab代码。
clcI=imread('src.png');I0=rgb2gray(I);subplot(231);imshow(I0);title('src');[m,n]=size(I0);F=fftshift(fft2(I0));k=0.0025;H=[];for u=1:m for v=1:n q=((u-m/2)^2+(v-n/2)^2)^(5/6); H(u,v)=exp((-k)*q); endendG=F.*H;I1=abs(ifft2(fftshift(G)));subplot(232);imshow(uint8(I1))title('退化');I2=imnoise(uint8(I1),'gaussian',0,0.001);subplot(233);imshow(uint8(I2));title('加噪声');F0=fftshift(fft2(I2));F1=F0./H;I3=ifft(fftshift(F1));subplot(236);imshow(uint8(I3));title('退化噪声复原')F2=fftshift(fft2(I1));F3=F2./H;I4=ifft(fftshift(F3));subplot(235);imshow(uint8(I4));title('退化复原')F4=fftshift(fft2(I0));I5=ifft(fftshift(F4));subplot(234);imshow(uint8(I5));title('直接傅里叶变换回来')
上面主要是傅里叶除的矩阵要一样维度,所以给了个[m,n]的矩阵,好像局限性有点大。
我个人想是不是逆卷积的效果更好一点,主要是傅里叶变来变去的相位难以控制。
参考《MATLAB图像处理超级学习手册》