傅里叶切片定理 - 重建傅里叶空间

信息处理 图像处理 傅立叶
2022-02-14 10:48:02

我陷入了一个问题。我需要对医学图像的正弦图执行傅里叶切片定理。

我读了很多关于这个定理的文章。我写了一个 matlab 代码,但结果在傅立叶逆变换后总是无意义的。但傅立叶空间似乎没问题。

我通过将极坐标转换为笛卡尔坐标来填充傅立叶空间。我在每条正弦图线上使用 ftt 命令应用一维快速傅里叶变换。在每个角度(我使用 180 旋转角度)和半径值之后,我将其转换为笛卡尔坐标,并且对于每个对应的值 G(theta, radius) ==> F(x,y) 我填充了傅立叶空间。这似乎合乎逻辑,但结果却不是。如何更正我的代码以运行此算法?

圆形是傅立叶空间,其他无意义的图像是ifft。原始图像是二元肝脏,但我无法添加它。

谢谢!

另外,我的matlab代码!

在此处输入图像描述

在此处输入图像描述

[![I=imread('binaryliver.png');

% 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

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, []);
1个回答

傅里叶切片定理指出,投影的傅里叶变换等于二维傅里叶变换的切片。

当您对离散角度的投影进行采样时,投影的 FT 将成为 2D 傅里叶变换的样本。

所以你必须使用你获得的样本来插值剩余的点。(插值必须是某种类型的插值,它是 Lanczos 插值的周期性和 2D 版本)

在您的代码中,您将样本放在它们的位置,但其余点保持为零。