四畳間

幼女の備忘録と感想文

CTスキャンのアルゴリズムを実装しよう(二分の二)

2章実装
2.1 概要
ここでは
「画像を読み込んで、CTスキャンアルゴリズムで復元する」
というコードをかいてみましょう。
次の図で示される機能を実装します。
 

f:id:shirashinomiya:20151231180240p:plain

 

ただし、ラドン変換は実際のものとは異なるものになっています。
実際のCTスキャンでは人体にX線を照射しその反対側でX線の透過率(影に相当するもの)を計測することを行うのですが、今はハード(CTスキャン装置)がないので、人体の代わりに画像を対象とすることにします。
 
 
2.2 ラドン変換
さて、実際のCTスキャンでのラドン変換は、X線を当てた時の影を計測するのですが、今回は画像でそれをやると述べました。
実装の方針としては、画像の各ピクセルの輝度をその場所でのX線吸収率とみなします。すると、画像と交差する線分上でのピクセル輝度の積分値が、その線分上をX線が進んだときのX線減衰度すなわち影になります。
 

f:id:shirashinomiya:20151231180330p:plain

 

図に、読み込んだ画像の周囲に仮想的なX線源と検出器を配置します。この図は角度θにおいてラドン変換を行うときの図です
そして、X線源のA点からX線源と直行する方向に線分をのばし、検出器と交差するまで画像のピクセル輝度を積分していきます。
積分の式とその離散式は次のようになります。
 

f:id:shirashinomiya:20151231180438p:plain

に対して、

f:id:shirashinomiya:20151231180502p:plain

一行目が理論式で、二行目が実装用の離散式です。

 

 
先ほどのラドン変換を公式に従ってフーリエ変換するだけですが、計算機で計算するために少しだけ工夫をする必要があります。
 
理論式
f:id:shirashinomiya:20151231180734p:plain
 
実装用の離散式

f:id:shirashinomiya:20151231180818p:plain

 

2.4 二次元逆フーリエ変換
公式に従って二次元逆フーリエ変換を実行するだけですが、ここでも、計算機で計算するために少しだけ工夫をする必要があります。理論式では、X線の透過率分布fがxとyの関数としてもとまるのですが、コンピュータで数値計算する場合は、xとyを代入してから計算するという実装をする必要が有ります。
 
理論式

f:id:shirashinomiya:20151231181017p:plain

 
実装用の離散式

f:id:shirashinomiya:20151231181036p:plain

 

 

結果

f:id:shirashinomiya:20151231181334p:plain