CTスキャンと三角関数【ラドン変換】

今回はCTスキャンという、お腹の輪切り画像を計算する数学の話です。CTスキャン自体はそこそこ難しい数学の内容ではありますが、今回はその導出などではなく、知られている数式を眺めて話題を知るのを目的とします。

CTスキャンは、病院等にある次のような雰囲気の機械です(画力があまりないので伝わるか自信がないのですが)。

 :20180717230800j:plain

丸っこい穴が特徴的ですね。この機械に体を通すと、体を”輪切りにした”画像を得ることができます。もちろん実際に輪切りにしているわけではなく(死んでしまう!)、次のようなアイディアで”輪切り画像”を計算しています。

CTスキャンでは微弱のX線を利用します。X線は様々な物体を通り抜ける性質がありますが、物質によって通り抜けやすさが異なります。そこで実際にX線を体内を通過するように放出し、その体内通過後のデータを計測します。これにより体内の何らかの情報がわかるのでは?、というわけです。

 :20180717230903j:plain

しかしもちろん、一方の方向からX線を当てるだけだと、深さの情報が失われます。X線を通しにくい何か異質な物体があったとしても、それがお腹側にあるのか、背中側にあるのかについては分からないのです。そこで、より詳しい情報を得るために

「X線の体内通過後の計測を、グルグル回りながらいろんな角度でやったらいいんじゃね?」

となるのは自然な発想ですよね。実は、このアイディアで体の断面図が”完全に”求められるのです。

 :20180717232806j:plain

上図にあるように\( \displaystyle  (Rf)(u,\theta) \)は角度\(  \theta \)のときのX線体内通過後の1次元データです(これは観測で求められる!)。これを各角度で計測し、次のような計算によって体の断面図の2次元データ\(  f(x,y) \)が計算できます。

CTスキャンの原理

お腹の輪切り画像\(  f(x,y) \)は、観測値\(  (Rf)(u,\theta) \)から次のように計算できる(横スクロールします)。

\( \displaystyle  {\small f(x,y)=(2\pi)^{-\frac32}\!\int_{0}^{2\pi}\!\int_{0}^{\infty}\! \mathcal{F}_u(Rf)(r,\theta)e^{ir(x\cos\theta+y\sin\theta)}r dr d\theta} \)

ここで右辺の\( \displaystyle \mathcal{F}_u (r, \theta ) \)は関数\( \displaystyle (Rf)(u,\theta) \)を変数\(  u \)についてフーリエ変換した

\( \displaystyle  \frac{1}{\sqrt{2\pi}}\int_{-\infty}^{\infty}(Rf)(u,\theta)e^{-iru}du \)

を表す。

観測値\(  (Rf)(u,\theta) \)から元の画像\(  f(x,y) \)が復元できるので、輪切り画像を見たいときに、本当に人体を輪切りにする必要がないのです。ありがとうCTスキャン!ありがとう三角関数!(無理やりまとめた)

では今回はこの辺で。

(参考)

杉山健一『フーリエ解析講義』

★★★

今回の内容を話した動画です(前半は別の話をしています)