四畳間

幼女の備忘録と感想文

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

CTスキャンアルゴリズムを実装した。
CTスキャンってあれね。
病院で脳の断面とかを撮るために使うやつ。
wikiペディアから引用。)

f:id:shirashinomiya:20151229160321j:plain

ここでは、そのアルゴリズムについて要点をまとめてみます。
「二分の一」でふわっとした説明をして、「二分の二」で実装なんかの話をします。
 
0章 CTスキャンの心
CTスキャンがどういうものかというと、
「見たいものを直接みることはできないが、好きな方向からシルエット(影)は見る事ができる。
 いろんな方向から見たシルエットから、全体を推定(復元)する。」
というものです。
 
「上から見たら円、横から見たら長方形です。どんな立体でしょう?」
というクイズと似ています。
 

f:id:shirashinomiya:20151229160411p:plain

 

1章 CTスキャンの理論的説明
1.1 都合の良かった人体、次節へのつなぎ
まず、人体が都合がよかったという話をします。
それは「人体は、組織が違うとX線の透過率が異なる」ということです。
 

f:id:shirashinomiya:20151229160504p:plain

 

 これは、

X線の透過率の分布が分かれば、それはすなわち組織の分布が分かるということ」
を意味します。
実際のところ、X線の透過率の分布は(これから説明することですが)比較的簡単に知る事ができるのです。CTスキャンは、これを愚直に実行します。
 
以下の節では、そのために必要な数学について説明します。
1.2では二次元フーリエ変換について、1.3ではラドン変換について、1.4では1.2と1.3で説明した内容がCTスキャンでどのように用いられるのかについて説明します。
 
余談ですが、CTスキャンは人間の内部の組織に関する知識を持ちません。
というか、検査対象が人間であるという事すら知りません。
ただ、検査対象が入っていく“あの円形の空間”内部のX線透過率分布を可視化しているだけなのです。人間の場合は、たまたま組織ごとにX線の透過率が違ったために、組織を見るという問題を、X線の透過率分布を知るという(より簡単な)問題に置き換えられただけなのです。
 
「ある関数を周波数空間に写像する」
という操作のことです。
ここで重要なのは、もとの関数とその周波数空間への写像は情報を失うことなく行き来できるということです。
 

f:id:shirashinomiya:20151229160807p:plain

 

1.3 ラドン変換
ラドン変換は、
「ある関数をある方向から見たときの投影を計算する」
という操作のことです。
投影というと何か難しい感じがしますが、「できた影をみる」程度に思ってください。
 

f:id:shirashinomiya:20151229160908p:plain

 
1.4 投影定理で人体・ラドン変換・フーリエ変換がつながる
1.2と1.3で必要な数学を説明しました。
これらが投影定理によってつながることを説明します。
 
投影定理とは、
「元の二次元関数fのθ方向のラドン変換g(θ)のフーリエ変換G(θ)は、
 fの二次元フーリエ変換Fのθ方向の断面と等しい」
ということです。
 

 f:id:shirashinomiya:20151229161057p:plain

 

もったいぶった感じがしますが、ひとまず分かったことを整理しましょう。
・人間の体の断面は二次元のX線透過率分布関数fだ
・fはそのまま体の組織の分布として考える事ができる
・ある方向θからX線を当てれば、fの投影(ラドン変換)g(θ)を得ることができる
・g(θ)から簡単にフーリエ変換G(θ)を得ることができる
・G(θ)はfの二次元フーリエ変換Fのθ方向の断面と等しい
・fとFは二次元(逆)フーリエ変換により自由に行き来できる
 
それでは、人間の体の断面を見るための手順を示しましょう
① 人間の体にθ方向からX線を当て、X線の透過率g(θ)を得る
  ---これは人間の体の断面を二次元X線透過率分布関数fとして見たときの、
   θ方向の投影(ラドン変換)g(θ)を得ることに相当する。
② g(θ)をフーリエ変換してG(θ)を得る
③ ①と②の処理を全方向に対して行う
④ ③の操作によって得られたGはFに等しいので、これを二次元逆フーリエ変換してfを得る。
  すなわち、人間の断面がえられたことになる。