我需要使用fftw庫在C++中執行兩步ifft3d。fft3d,交換切片,需要轉置?
1st step: a one dimensional ifft across third dimension, creating a "hybrid_kspace"
...
[some operations with hybrid_kspace]
...
2nd step: a two dimensional ifft over horizontal slices of hybrid_kspace.
根據這個(https://cmb.ornl.gov/members/z8g/csproject-report.pdf)我必須執行某種置操作的,但我真的不明白這一點。
所以我試圖在Matlab中研究這個問題,併發生了一些相當奇怪的事情(見代碼)。第一張和最後一張Clown3D圖像被交換,我不明白爲什麼。
load clown;
Z=5;
Clown3D=repmat(X,[1,1,Z]);
white=max(Clown3D(:));
Clown3D(100,:,1)=white; %1 white row
Clown3D([70,130],:,2)=white; %2 white row
Clown3D([50 100 150],:,3)=white; %3 white row
Clown3D([40 80 120 160],:,4)=white; %4 white row
Clown3D([30 60 90 120 150],:,5)=white; %5 white row
%Original 3d image
for ii=1:Z
figure, imagesc(Clown3D(:,:,ii)), colormap gray
end
%into fourier space
Kspace=fftshift(fftn(fftshift(Clown3D)));
%2-step ifft3d
K_hybrid3D = fftshift(ifft(fftshift(Kspace,3),[],3),3);
ReconClown3D=zeros(size(Clown3D));
for ii=1:Z
B=squeeze(K_hybrid3D(:,:,ii));
A = fftshift(ifftn(fftshift(B)));
ReconClown3D(:,:,ii)=A;
end
for ii=1:Z
figure, imagesc(abs(ReconClown3D(:,:,ii))), colormap gray
end
%classic ifft3d
ReconClown3DCalssic=fftshift(ifftn(fftshift(Kspace)));
for ii=1:Z
figure, imagesc(abs(ReconClown3DCalssic(:,:,ii))), colormap gray
end
你是什麼意思「交換」? –
I ment「交換」 – Giorgio