Pythonを使ったDICOM画像のMPR
はじめに
この記事ではPythonを使った医療画像処理の方法について紹介しています。
初めてPythonに触れる方でも学びやすいようにGoogle Colaboratoryを使った例を示しています。
Google Colaboratoryの基本的な使い方については、たくさん解説記事があると思うのでそちらを参考にしてみてください。
無料部分はどういった流れで処理を行い、どのような結果が得られるのかだけを見ることができます。
(具体的な処理コードの記載なし)
有料部分では以下の例はもちろんAxial→Saggitalの場合の例も含めたNotebookがDLできますのでよろしければご利用ください。
Pythonを使ったMR画像のMPR
ここではPythonを使ったMPR(Multi Planar Reconstruction)の方法について紹介します。
以下の例では"Structural MRI datasets"のデータを利用しています。
お持ちのデータを利用する場合はファイルの読み込みの箇所を変えるといったように適宜修正してお使いください。
準備
以下のようなフォルダの階層構造のもとで行っています。
自分で追加しているものはすべて"Structural MRI datasets"のものです。
home(デフォルトのフォルダ)
┗ sample_data(デフォルトで読み込まれるもの)
┗ DICOM(自分で追加したもの)
┗ FLAIR(自分で追加したもの)
┗ T1(自分で追加したもの)
┗ T2(自分で追加したもの)
┗ ROI(自分で追加したもの)
┗ NIfTI(自分で追加したもの)
Colaboratoryのデフォルト環境では、医療画像を処理するのに必要なパッケージがインストールされていません。
そのため、まずは必要なパッケージをインストールします。
!pip install pydicom
DICOMファイルの読み込み
今回は例としてFLAIR画像を使います。
例として使っているこのデータの場合、ファイルを名前順にソートすればSlice Locationについてもソートされる並びになっています。
しかし、自分で用意したデータを使う場合はいつもこのように整頓されるとは限りません。
そのため、まずはSlice Locationに基づいて順番に並べる方法を紹介します。
Sliceがきちんと順番に並んでいない例をつくるために、一旦ファイル順をシャッフルします。
Slice Locationでソートする
順番に並べる方法は単純で、
DICOMファイル名とSlice Locationとの値のペアをつくる
Slice Locationでソートする
ソート後の順番で処理する
これだけです。
以下の例ではファイル名ではなく何番目のファイルなのかでやっています。
Slice Locationの降順でソートされた結果が表示されたと思います。
ここではファイル名順に並べたときの結果にあわせて降順にしましたが、昇順で並べたいときは"reverse=False"にすればできます。
では、ソートした結果が正しいか確認してみましょう
ファイル名順に出力されており、Slice Locationできちんとソートされていることがわかりました。
MPR(Multi Planar Reconstruction)
Slice Location順に並べる方法がわかるとできるようになることの1つとして、MPR(Multi Planar Reconstruction)があります。
ここでは元々AxialだったものをCoronalへ変換する例を紹介します。
まずは空(要素ががすべて0)の3次元arrayをつくります。
きちんとできていれば、画像サイズの縦横とファイル数になっているはずです。
次にSlice Locationでソートした順にファイルを読み込んで値を入れていきます。
3次元arrayをつくったあとは、元と違う切り口で任意のSlice番号を指定すれば異なる断面の画像が得られます。
ここではCoronalで101枚目(index=100)を指定してみます。
まだ補間(補正)処理を行っていないのでつぶれた画像が表示されたと思います。
各Slice間の距離(Slice Between Slices)がない分つぶれてしまっているので、y軸の長さをそれにあわせて補正します。
元の長さより長くなるので補間処理が入りますが、ここでは単純にOpenCVのresize()を使ったものを紹介します。
縦横比は補正されましたがぼやけた画像になっていると思います。
例として使っている"Structural MRI datasets"のものは22枚しかない(Slice間隔が厚い)ためなにか高度な補間方法を用いない限りはこのようになってしまいます。
逆を言えば、枚数が多ければ(Slice間隔が薄ければ)OpenCVの単なるresizeでも鮮明な画像が得られます。
ここから先は
¥ 200
この記事が気に入ったらサポートをしてみませんか?