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!

enter image description here

enter image description here


% I = im2bw(I, 0.1);
%Sinogram was calculated before for 180 angle!
\[w,h\] = size(I); 

theta = 0:1:179;][1]][1]

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


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   %                               

            yy = round(y); xx = round(x);

            if yy <= 0

                yy = 1;

            elseif yy > h
                yy = h;


            if xx <= 0

                xx = 1;

            elseif xx > w

                xx = w;

        value = E(1,r,i);
        F(xx, yy) = value;


figure; imshow(log(1+abs(F)),[]);

figure; imshow(Im2, []);
  • $\begingroup$ Welcome to SE.DSP! Please edit your question and add the actual image. You will need to delete one of the others, but one of the higher-rep users can then edit it and allow three images in the question. Ping me once you're done. $\endgroup$
    – Peter K.
    May 26 '17 at 20:47
  • $\begingroup$ Ok, sir. I did it. $\endgroup$
    – muygun
    May 26 '17 at 21:20

Fourier slice theorem states that Fourier Transform of your projections are equal to slices of 2D Fourier transform.

When you sample the projections over discrete angles the FT of projections become samples of 2D Fourier transform.

So you have to use your obtained samples to interpolate the remaining points.

in your code you put the samples in their position but the remaining points remain zero.

  • $\begingroup$ You can find the Cartesian coordinate of your obtained samples then use it to interpolate the Fourier transform over its Cartesian grid. $\endgroup$
    – Mohammad M
    May 26 '17 at 21:39
  • $\begingroup$ ı understant. actually I tried before all over process that I took 2D fourier transform and I deleted other angles and points except 180 rotation degree. and I get meaningful data, I could see borders of liver. But now, I see image like an interference pattern. So, I'll try interpolate. Could you recommend method in matlab for this process? $\endgroup$
    – muygun
    May 26 '17 at 21:41
  • 1
    $\begingroup$ MATLAB has interp2 function. I suggest using Cartesian coordinate for interpolation because interp2 treat both variables the same. $\endgroup$
    – Mohammad M
    May 26 '17 at 21:44
  • $\begingroup$ Also be careful about number of points used for FFT and the coordinate of grid. $\endgroup$
    – Mohammad M
    May 26 '17 at 21:45
  • $\begingroup$ Sorry sir, it's not work on my situation. I used this solution at link. now, I'll try back two dimensional fft because of verification of interpolation $\endgroup$
    – muygun
    May 26 '17 at 22:12

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.