inverse filtering image restoration
    8 views (last 30 days)
  
       Show older comments
    
clc;
clear all;
close all;
f=rgb2gray(im2double(imread('cameraman.tif')));
f=imresize(f,[256 256])
figure,(imshow(f))
[M,N]=size(f);
% k=2.5;
%  for i=1:size(f,1)
%      for j=1:size(f,2)
%          h(i,j)=exp((-k)*((i-M/2)^2+(j-N/2)^2)^(5/6));
%       end
%  end
h=fspecial('gaussian',260,2);
g=(imfilter(f,h,'circular'));
figure,imshow(g,[]);
G = fftshift(fft2(g));
figure,imshow(log(abs(G)),[]);
H = fftshift(fft2(h));
figure,imshow(log(abs(H)),[]);
F = zeros(size(f));
R=70;
for u=1:size(f,2)
    for v=1:size(f,1)
        du = u - size(f,2)/2;
        dv = v - size(f,1)/2;
        if du^2 + dv^2 <= R^2;
        F(v,u) = G(v,u)./H(v,u);
        end
    end
end
figure,imshow(log(abs(F)),[]);
fRestored = abs(ifft2(ifftshift(F)));
figure,imshow(fRestored, []);
this is my code for inverse filtering 
in which restored image is getting fragmented into 4 parts and getting aligned arbitrarily can someone help me fix this
0 Comments
Answers (2)
  Robert D Jordan
 on 2 Apr 2020
        
      Edited: Robert D Jordan
 on 2 Apr 2020
  
      It looks like your second last line is out of order.
If the line reads:
fRestored = abs(ifftshift(ifft2(F)));
It works for me.
You were shifting before you did your IFFT.
Rob
0 Comments
  Alex Zhang
 on 12 Sep 2020
        Hi friend, you met this because of the second last code, it should be:
fRestored = abs(ifftshift(ifft2(F)));
I also met similar problems when I do the image restoration. The fftshif() function should always be used after fft2() or ifft2().
0 Comments
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

