3
フーリエ法による断層再構成のこのコードの何が問題になっていますか?
私は最近、断層撮影再構成アルゴリズムで遊んでいます。私はすでに、FBP、ART、SIRT / SARTのような反復スキーム、および直線線形代数(遅い!)を使用した素晴らしい実装を持っています。 この質問はそれらのテクニックのどれについてもありません ; 「誰がそのようにするのか、代わりにいくつかのFBPコードがある」という形式の答えは、私が探しているものではありません。 このプログラムで次にやりたいことは、「セットを完了し」、いわゆる「フーリエ再構成法」を実装することでした。これについての私の理解は、1D FFTをサイノグラムの「露出」に適用し、それらを2Dフーリエ空間の放射状の「車輪のスポーク」として配置することです(これは、中央スライス定理から直接従うのが便利なことです) 、それらのポイントからその2D空間の通常のグリッドに内挿し、逆フーリエ変換して元のスキャンターゲットを復元できるようにする必要があります。 簡単に聞こえますが、元のターゲットのように見える再構築を得ることができなかったのです。 以下のPython(numpy / SciPy / Matplotlib)コードは、私がやろうとしていることを思いつくことができる最も簡潔な表現です。実行すると、次が表示されます。 図1:ターゲット 図2:ターゲットのサイノグラム 図3:FFT処理されたサイノグラムの行 図4:一番上の行は、フーリエ領域のサイノグラムの行から補間された2D FFT空間です。一番下の行は(比較のため)ターゲットの直接2D FFTです。これが、私が疑わしくなり始めた時点です。サイノグラムFFTから補間されたプロットは、ターゲットを直接2D-FFTすることによって作成されたプロットに似ていますが、まだ異なっています。 図5:図4の逆フーリエ変換。これが実際よりもターゲットとしてもう少し認識できることを望んでいました。 私が間違っていることは何ですか?フーリエ法の再構築に関する私の理解が根本的に不備なのか、コードにバグがあるのかはわかりません。 import math import matplotlib import matplotlib.pyplot as plt import numpy as np import scipy.interpolate import scipy.fftpack import scipy.ndimage.interpolation S=256 # Size of target, and resolution of Fourier …