inverse filtering image restoration
25 次查看(过去 30 天)
显示 更早的评论
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 个评论
回答(2 个)
Robert D Jordan
2020-4-2
编辑:Robert D Jordan
2020-4-2
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 个评论
Alex Zhang
2020-9-12
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 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Frequency Transformations 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!