I've stuck in one problem. I need to perform Fourier Slice Theorem on sinogram of medical image.
I read a lot about this theorem. I write a matlab code but results are always non-sense after inverse fourier transform. But Fourier Space seems alright.
I fill Fourier space with converting polar coordinates to cartesian coordinates. I apply 1 Dimensional Fast Fourier Transform with ftt command on every sinogram lines. After for each angle (I used 180 rotation angle) and radius value I convert it to cartesian coordinates and for each corresponding values G(theta, radius) ==> F(x,y) I filled up Fourier Space. It seems logical but results is not. How can I correct my code to run this algorithm?
Circular shape is Fourier Space, other nonsenseless image is ifft. Original image is binary liver but I can't add it.
Thank you!
Plus, my matlab code!
https://i.stack.imgur.com/Dv0RM.png
https://i.stack.imgur.com/bhxbd.png
I=imread('binaryliver.png');
% I = im2bw(I, 0.1);
%Sinogram was calculated before for 180 angle!
[w,h] = size(I);
theta = 0:1:179;
xorg = floor(h/2);
yorg = floor(w/2); %for find origin of matrix
F = zeros(w,h); %fourier space assigment
for i = 1:length(theta)
E(:,:,i) = fft(sinogram(i,:)); %calculate FFT for each line of sinogram
end
for i = 1:length(theta)
for r = 1: length(E(:,:,1)) %Convert polar coordinates to cartesian coordinates
x = xorg + (r-h/2+1)*cosd(-theta(i));
y = yorg + (r-w/2+1)*sind(-theta(i));
if x == 0 && y == 0 %
else
yy = round(y); xx = round(x);
if yy <= 0
yy = 1;
elseif yy > h
yy = h;
end
if xx <= 0
xx = 1;
elseif xx > w
xx = w;
end
value = E(1,r,i);
F(xx, yy) = value;
end
end
end
Im2=abs(ifft2(F));
figure; imshow(log(1+abs(F)),[]);
figure; imshow(Im2, []);