inverse filtering image restoration
25 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
Categories
Find more on Frequency Transformations in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!