医学データ処理概論
3. 画像処理入門


0. 実習の準備

 実習を始める前に,実習に使用するプログラムとデータをダウンロードします。
ここをマウス・クリックするとimage_proc.dmgがダウンロードされ(数分かかる),デスクトップ上に image_procという ディスクイメージ が現れます。
Finder窓を自分で開き,自分のホーム・ディレクトリに,このimage_proc ディスクイメージoptionキーを押しながらドラッグしてコピーします。
コピーし終わったら,ダウンロード内のimage_proc.dmgやデスクトップ上の image_procはDock内のゴミ箱にドラッグして捨てる(image_proc ディスクイメージのときは「ゴミ箱」の表示が「取り出し」に変わる)。

[注意] コピーしないで,デスクトップ上の image_proc 内で以下の実習を行なうと,ログアウト/シャットダウンした時にすべて自動的に消去され,それまで行った作業内容は消えます。

1. 画像データの計算機上での表現

 医用データ(CT, MRI画像など)は通常ビットマップ型式で表現される。ここではビットマップ型式について説明する。ビットマップ(bitmap)型式 は,新聞の写真のように図を濃淡のある点の集合として表現する。Mac上ではPaint型式と呼ばれることもある。

注) 他にベクター(vector)型式がある。図を基本要素(点、線、楕円、長方形、等)の集合として表現し,要素の種類と,その座標や大き さを記憶する。あとで図の大きさや要素の位置を変更する必要のあるときなどに便利である。 Mac上ではDraw型式やObject型式と呼ばれることも ある。

1) 3次元画像:脳のMRI(磁気共鳴画像)を例にして

 上図は,以降の実習で用いる脳の3D(3次元)データの例である。x, y, z 軸がそれぞれ256, 256, 124点からなる。
x, y 軸の撮像野(FOV : Field of View)はともに24cmである。したがって,x,y 軸の分解能は240mm/256=0.9375mmである。
z 軸の分解能は1.3mm(撮像時に指定した値)である。
 3次元上の各点は0.9375mm x 0.9375mm x 1.3mmの大きさの直方体で表される。
このような3次元空間上での直方体のユニット(画素)をvoxel(ボクセル)と呼ぶ。
3次元画像からz 軸のある面で切り出して得られた2次元の図を考えた場合,画素はz 軸方向の情報を持たずx, y 軸が0.9375mm x 0.9375mmの正方形である。
2次元の場合の画素はpixel(ピクセル)と呼ばれる。
 voxelまたはpixelは,その体積または面積内の平均的な濃度を持つ。
 MRI画像はモノクロ画像なので,濃度は計算機上では一般に2bytes (16bits, word, short) または 1byte(8bits)で表現される。
2bytesの場合,その取り得る値は65,536段階であり,また1byteの場合,その取り得る値は256段 階である。
この値を量子化レベル数,階調数などと呼ぶ。voxelまたはpixelがもつ濃度の値をvoxel値,pixel値またはグレーレベル (gray level)という。

 本実習のデータは1byte(=256段階)で表されている。3Dデータのサイズは256(点)x256(点)x124(点)x1(byte) = 8126464 bytes (>8MB)とかなり大きなものとなる。
計算機のメモリ上では,3Dデータは1次元で扱われ,x, y, z方向の順に並べられる場合が多い。{(0,0,0)...(255,0,0), (0,1,0)...(255,1,0), ...... (255,255,123)}
 画像データの場合も,画素が2bytes以上で表現されている場合には,Endian の異なる機種間でデータをやり取りする場合には注意を要する。Endianの説明は,前回も行なったが,重要なので再掲する。

複数byteデータとエンディアン (endian)
 エンディアンについては前回も述べたが,画像データにおいても重要なので再掲する。
 計算機のメモリはbyte単位でaddressが振られている(要するに0から何番目のbyteであるかということ)。
数値を 2byte以上で表現する場合,上位の桁(byte)が若い(0に近い)addressになるようにして順に並べる方法と,下位の桁(byte)が若い addressになるようにして順に並べる方法とがあり得る。
このbyteを並べる順序をバイト・オーダーと言い,計算機の機種(アーキテクチャー)によ り異なる。それぞれ Big Endian, Little Endian という。
画像処理のプログラムにはバイト・オーダーを変換する機能がある場合が多い。
 例えば数値が4byteで表現されている場合は,下図のようになる。 本実習で用いているMacOS XではBig Endian を採用している。

Big Endian
最上位桁 中の上桁 中の下桁 最下位桁
Mac(PowerPC, 680x0), unix(Sun, SGI, HP)
Little Endian
最下位桁 中の下桁 中の上桁 最上位桁
Windows, Mac(Intel)


 2) 画像ファイルのフォーマット

  3次元画像データをファイルとしてしまっておく場合,種々の保存すべき情報がある。

(a) データの実体(raw)(画像そのもの)

(b)  x,y,z軸の点数,画素のバイト数,FOV,分解能,バイト・オーダ(エンディアン)等,画像の情報。

(c) 頭の向き:L-R(Left-Right左右) A-P (Anterior-Posterior前後),S-I(Superior-Inferior上下) と,x,y,z軸との関係( Coordinate system)。

(d) データの名前,撮像日,撮像場所,撮像機械,患者名,等

これらのデータがどのようにしまわれているかを,画像ファイルのフォーマットという。(a)のデータの実体はraw data と呼ばれる。残りの(b)〜(d)はヘッダ (Header) と呼ばれる部分に記述される。データの実体とヘッダとは同一のファイルに書かれる場合と,異なるファイルに書かれる場合がある。MRIデータでよく使われ ているDICOM フォーマットは前者,Analyze は後者の場合である。他にも様々なフォーマットが使われているが,画像処理プログラムは,すべてのフォーマットを扱えるわけではない。
 ここでは,画像データについての理解を深めるため,3D画像データをraw data として取扱う。

(注)DICOM(Digital Imaging and Communications in Medicine)は,異なった製造業者の,異なった種類のディジタル医用画像機器を,ネットワークまたは画像保存媒体で相互に接続して,患者の検査情報 のやりとりや画像データの伝送を可能にするために決められた規格である。画像ファイルの規格と通信の規格がある。これらは膨大な規格であり,市販の画像処 理プログラムでは自動的に処理されるので,通常,規格の内容を詳しく知る必要はない。詳しく知りたい場合は http//medical.nema.org/な どを参照のこと。
 
 

2.ImageJによる実習(脳のMRI データを用いる)

    パソコン上での医用画像処理には NIH-Image がよく用いられてきた。 NIH-Image は 古いMacOS用に開発され,センター端末の MacOS X には対応していない。本実習では,その後継の ImageJ を用いることにする。 ImageJ は java言語で書かれており,種々のOS(MacOS X, Windows, Linux, unix など)上で動く。

1) ImageJ の実行

 Finder窓を開いてimage_procフォルダのアイコンをダブル・クリックし,image_procフォルダに移る。
ImageJ64 のアイコンダブル・クリックして

が現れるまでしばらく待つ。

2) データの読み込みと表示

データはraw形式で開く。

brain.raw を開く。

rawデータのパラメタを指定。(各枠内でマウス・ボタンを押してから数字をタイプする。)


Little-Endian Byte Order については、上記 複数byteデータとエンディアン (endian) を参照のこと。

 Offset と Gap の説明.

Offset と Gapは,ファイルにヘッ ダやサブ・ヘッダが含まれている場合に,それらを読み飛ばしてデータの実体だけをプログラムに読み込むために使用する。

ここでの Image とは2D画像のことである。
Header, Sub Header は,無いこともある。(raw data では無いのが普通。)
Sub Header には,x, y軸のサイズや,z軸の座標が入れられる。(無いことが多い。) 


しばらく待つと画像が表示される。(画像の下にあるスライダを動かすと,
表示されるスライスが変わる。右下の三角を押すと一枚ずつ変わる。)
ここでは,脳の矢状断(Sagittal)のみ表示される。
以下,(正中に近い)62枚目を使用する。

画像のコントラストが良くないときは


(Auto)ボタンをクリックする。
試しに Brightness や Contrast のスライダをマウスで動かしてみる。


3) ROIの設定と面積計算

Tool Barの左から4つ目の自由曲線のボタンを押す。

脳のイメージ上で関心領域(ROI : Region of Interest)の周りをマウス・ボタンを押しながらカーソルでなぞると黄色い線で その軌跡が示される。この線が閉曲線になるまでなぞる。
 次にAnalyze->Measureを実行するとメッセージ領域(ImageJウインドウの下側の白い部分)に閉曲線内の面積,レベル(白黒の 濃度値)の平均値,最小値,最大値が表示される。体積を測る場合は,スライスをずらしながら順に面積を測り, あとで加算する。
下図は脳梁の正中面(矢状断の中央)での面積を測った例である。各自試してみること。


4) フィルタの使用(Smooth, Sharpen, Find Edges)

   注意)この処理を実行するときは,処理を変える度に元画像を読み込むこと。
   処理画像のsaveはしないこと。(次のメッセージが表示された場合は常に (Don't Save) を押すこと。)



 
Smooth フィルタを用いる場合

これが表示されたら Yes を押す。


元画像

Smooth

Smooth, Sharpen, FInd Edges の処理にはフィルタが用いられる。2次元上のあるpixelの値は,その近傍の3x3個のpixel値に荷重を掛け合わせた荷重平均値に置き換えられる。

Smoothは,ノイズの低減などに用いられる。荷重は,

1 1 1
1 1 1
1 1 1

Sharpen

Sharpenは,画像のコントラストを増し,ディーテイルを強調するが,ノイズも強調する。
 
-1 -1 -1
-1 -12 -1
-1 -1 -1

Find Edges

Find Edgesは,濃度の急峻な変化を強調する。Sobelエッジ検出操作を行う。下の2つの荷重を用い,垂直および水平の微分を求める。その自乗和の平方根 をとりpixel値とする。 (この図はBrightness とContrastを調整して見やすくしたもの。)
 1  2  1
 0  0  0
-1 -2 -1

  1   0 -1
  2   0 -2
  1   0 -1


5) ヒストグラム

 現在表示されている画像の濃度値の頻度分布,濃度の平均値,最頻値,最小値,最大値などを求める。元画像を再度読み込んだ後,[Histgram] メニューを選択。



が現れたら ( No )を押す。(現在表示されている62枚目の画像のヒストグラムだけを表示する。)


画面内にマウス・カーソル(矢印)を持っていくと+型に変化する。これを動かすと,
濃度値(横軸 Value)に対する頻度(その値をもつピクセルの数 Count)が右下(2行)に表示される。

6) Threshold処理

 ヒストグラムから指定した濃度値の範囲だけを取り出して表示する。
brain.raw の図をクリックしてから,




上下2つのスライド・バーを動かすと,取り出す濃度値の範囲が変わる。
*


ImageJ には今回紹介した以外にも色々便利な機能がある。詳しくは ImageJ のホームページを参照されたい。
使用例が http://rsb.info.nih.gov/ij/docs/examples/index.html にある。

演習課題

 
はじめにダウンロードしたimage_procフォルダ内に what_is_this.raw.zip ファイルがある。これをダブル・クリックして解凍すると what_is_this.raw ファイルができる。これは内容が不明の3D画像データファイルある。ファイルの頭にヘッダ がついているかどうかも分からない。ただし,3Dデータのx,y 軸は,128x128, 256x256, 512x512 のいずれかであることが分かっている。画素のバイト数は1byteか2bytesのいずれかである。また,x, y, z 軸のサイズは大きくは違わない。通常,ヘッダは10kBを超えない。このファイルを ImageJ で読み,中身を正しく表示し,これがどんなデータか,x, y, z 軸のサイズとともに明らかにすること。ファイルのサイズ(バイト数)を知る必要がある。Endianにも注意が必要。

 ファイルのサイズは,ターミナル窓内でunix のコマンドを使って,
cd image_procimage_proc directory (実はimage_procフォルダと同じ) に移り,
ls  -l  <File名> を実行する。
  (エル)
または,Finderでwhat_is_this.rawを指定し,[ファイル->情報を見る] サイズを調べてもよい。

 電卓は,アプリケーション内の電卓が使える。