座標変換で視点を変える手法を説明してきましたが、いよいよその応用例です。 X線CTやMRIと同じように画像処理するPETの事例です。PETと聞くとペットボトルを連想するかもしれませんが、「Positron Emission Tomography:陽電子放射断層撮影」のことです。脳の腫瘍やガン細胞を検出する診断装置です。
資料をご覧ください。 → PET画像
p.1 ガン細胞は正常の細胞に比較してブドウ糖を多く取り込もうとするようですね。このブドウ糖に放射性物質を添加して注入すると、ガン細胞での放射能が高くなります。3次元物体(例えば脳)から出ている放射能を角度を変えて検出し、そのデータを蓄積します。全てのデータを足し合わせたものが「Sinogram」という真中の図が描かれます。放射能が高い部分は足し合わせることにより強調されることになります。 この操作は、いろいろな波を合成波を算出するフーリエ級数に似ています。 次はこのデータを逆変換して2次元の画像にします。 X線CTの場合は、X線を角度を変えて3次元物体に照射して、透過X線の強度を検出して、データを集めます。
資料の引用はこちら → PET検査
このWebサイトにpythonを用いたプログラムが掲載されています。直ぐ試したくなりましたので、簡単な図形で実行してみました。
p.2 実行結果です。ペイントで原画を200×200ピクセルで予め描いてファイルを保存しておきます。この際のファイル名と保存先を覚えておいてください。次に上述のプログラムにそのファイル名と保存先を入れて実行します。データは、黒白で数値化し、角度を変えて読み込み積算します。 この積算結果がSinogramです。これを逆変換したものが右下の図です。完全に再現されておらず、円の内部は再現されていますが、その外側は像が消えてしまっています。おそらく、回転させてデータを積算する時に、左下の青枠内のデータのみが有効になるからであると思われます。
なお、上述のWebサイトにあるpythonをそのまま実行すると途中で止まってしまいます。 元データと再現データの誤差を算出する部分でエラーになってしまいます。原因は不明ですが、元データと再現データのデータ数が一致していない可能性があります。 そこで、次のファイルのように、誤差に関するプログラムの前に「#」をつけて、その部分を実行しないようにしたところ、再現した画像は描いてくれました。「●●」の部分は画像ファイルの保存フォルダ名とファイル名を入れてください。
pythonのプログラムはこちら → PET(python)
いかがですか? pythonのライブラリは豊富ですね。しかも「radon」と「iradon」のコマンドで計算してしまいます。素晴らしい!!