2015-12-31 CTスキャンのアルゴリズムを実装しよう(二分の二) DIY 2章実装 2.1 概要 ここでは 「画像を読み込んで、CTスキャンのアルゴリズムで復元する」 というコードをかいてみましょう。 次の図で示される機能を実装します。 ただし、ラドン変換は実際のものとは異なるものになっています。 実際のCTスキャンでは人体にX線を照射しその反対側でX線の透過率(影に相当するもの)を計測することを行うのですが、今はハード(CTスキャン装置)がないので、人体の代わりに画像を対象とすることにします。 2.2 ラドン変換 さて、実際のCTスキャンでのラドン変換は、X線を当てた時の影を計測するのですが、今回は画像でそれをやると述べました。 実装の方針としては、画像の各ピクセルの輝度をその場所でのX線吸収率とみなします。すると、画像と交差する線分上でのピクセル輝度の積分値が、その線分上をX線が進んだときのX線減衰度すなわち影になります。 図に、読み込んだ画像の周囲に仮想的なX線源と検出器を配置します。この図は角度θにおいてラドン変換を行うときの図です そして、X線源のA点からX線源と直行する方向に線分をのばし、検出器と交差するまで画像のピクセル輝度を積分していきます。 積分の式とその離散式は次のようになります。 に対して、 一行目が理論式で、二行目が実装用の離散式です。 2.3 ラドン変換のフーリエ変換 先ほどのラドン変換を公式に従ってフーリエ変換するだけですが、計算機で計算するために少しだけ工夫をする必要があります。 理論式 実装用の離散式 2.4 二次元逆フーリエ変換 公式に従って二次元逆フーリエ変換を実行するだけですが、ここでも、計算機で計算するために少しだけ工夫をする必要があります。理論式では、X線の透過率分布fがxとyの関数としてもとまるのですが、コンピュータで数値計算する場合は、xとyを代入してから計算するという実装をする必要が有ります。 理論式 実装用の離散式 結果