Voxel(3D Data)を、高速多値ラベリング処理
ボリュームデータ(Voxel)のラベリング処理で内部構造解析 (2010/12/15)
"3次元の多値データを対象とした、高速ラベリング処理(6連結、18連結、26連結)の利用に関して"
ラベリング処理は、2Dの画像処理で頻繁に用いる手法です。2次元の画像は画素(PIXEL)と呼ばれる最小単位の
集まりとして構成されています。 画素は、縦横に広がりのある(大きさを持つ)基本構成単位で、この画素毎に色
情報や、輝度情報が定義されます。 これに対して3Dのデーでは、ボクセル(VOXEL)が基本単位として使われます。
ボクセル(Voxel)は、縦横高さ方向に広がりのある(大きさを持つ)最小単位で、このボクセル毎に色や輝度の情報
が定義されます。 画素(pixel)やボクセル(voxel)に、色や、輝度以外の情報を対応付ける事も当然ですが可能です。
はじめに
ラベリング処理は比較的コスト(リソースを消費する)のかかる重い処理です。2次元や、3次元のデータは、通常
連続したデータの集まりとして表されます。2次元の画像は、画素が縦横に連続して並んだデータとして扱われ、
3次元の立体は、ボクセルが縦横高さ方向に連続して並んだデータとして扱われます。
データが並んでいる事は、ある画素やボクセルと接している画素やボクセルがある事を意味します。それぞれの
基本要素(画素やボクセル)は、固有の値(色や輝度)を保持しています。 連続する基本要素同士が同じ値を
持っている場合は、画像や立体の中で特徴のある領域を構成している要素であると判断できます。
となると、
同じ特徴量を持った基本要素同士が接続している部分を識別したくなるのが人の常です。
この同じ特徴量を持った基本要素が構成する塊(接続している)毎に、識別出来るようにユニークな番号を割り
当てるのが、ラベリング処理です。
ところで、
基本要素同士の接続とは何でしょうか?
基本要素、画素(pixel)やボクセル(voxel)は、正方形或いは立方体として表されます。 正方形のケースでは、
規則正しく並んでいると、画素同士は辺を介して接している場合と頂点を介して接している場合に分けられます。
辺を介して接している場合を4連結と言い、辺或いは頂点を介して接している場合を8連結と言います。
立方体の場合は、面を介して接する場合いと、面と辺を介して接する場合と、面と辺と頂点を介して接する場合
があり、それぞれ 6連結と18連結と26連結と言います。
基準点と近傍点
|
4連結 (■部)
|
8連結 (■部)
|
画像(pixel)データの連結性
|
|
処理用ボクセルデータの用意
Stanford のデータアーカイブから CTデータをダウンロードして使用します
本文中の画像は座標系の違いにより、リンク先の画像と上下が反転していますが意図的な処理です。
頭部の頭頂部から、喉に向かって
aspect has converted 1:1:1. |
Information on original data
See also:
The Stanford volume data archive
Description: CT study of a cadaver head
Dimensions: 113 slices of 256 x 256 pixels,
voxel grid is rectangular, and
X:Y:Z aspect ratio of each voxel
is 1:1:2 Files: 113 binary files,
one file per slice
File format: 16-bit integers (Mac byte ordering),
file contains no header
Data source: acquired on a General Electric
CT Scanner and provided courtesy
of North Carolina Memorial Hospital
|
1、The Stanford volume data archive からgzipped tar file (7.3 MB) をダウンロードし、解凍します。
CThead ディレクトリが作成され、CThead.1 ~ CThead.113 までのファイルが生成されます。
2、CThead2voxel を使って、スライスデータから3次元の voxel データを生成します。
興味のある方が、ボクセルデータを生成する時の参考に、プログラム(CThead2voxel.c)を公開します。
・プログラムの起動時に、ダウンロードし展開したファイルのあるディレクトリを指定します。
書き出すボクセルファイル名の指定も可能です。ボクセルファイルの仕様は、補足情報を参照して下さい。
・各層毎のファイルを読み込み、ビッグエンディアンのデータをリトルエンディアンに変更します。
・アスペクトを 1:1:1 する、補完処理を行います。
・符号なし16ビットデータ中の有効データ範囲(0x000~0xFFF)から、今回の処理では上位の 5ビットをデータ
として使用するので、CTデータと 0x0F80 で and を取り 8ビットの範囲に収める為に4ビットシフトします。
{ ( (unsigned short)(CT_Data) & 0x0F80 ) >> 4 }
・ボクセルのヘッダー情報(補足情報を参照)とコメント(任意)に続け、ボクセルデータの本体を書き出す。
コメントは、XML 又は HTML 形式で記述する事で拡張性を保持します。カラーマップ情報を記録したい
場合など容易に記述できます。(後方の互換性は保障されません。知らない定義は無視されます)
3、
ボクセルファイルの情報は、showVoxelHeader を使って確認できます。
ボクセルデータの処理ソフトを作成する時の参考に、プログラム(showVoxelHeader.c)を公開します。
・以下の利用が出来ます。 (windows 環境で利用可能なバイナリーファイルも同胞)
ボクセルデータの情報のみを表示させる。
showVoxelHeader.exe CThead.vxl >nul
ボクセルデータのコメントのみを表示させる。
showVoxelHeader.exe CThead.vxl 2>nul
出力をリダイレクトしてファイルに書き出し、ブラウザー(一例)で確認する
showVoxelHeader.exe CThead.vxl > voxel_comm.html 2>nul
"C:\Program Files\Mozilla Firefox\firefox.exe" voxel_comm.html
興味のある方は、voxel を扱うプログラムを作成されては如何でしょうか。
補足情報
DICOM 形式のデータを読み込む場合には、ファイル名から推察される位置情報と、実際の位置が異なる
場合があります。 DICOM タグの グループ 0x0020 画像属性の エレメント 0x0013 インスタンス番号等を
参照する事で対処が可能です。
6連結の3次元多値ラベリング処理例
上記手順で作成したボクセルデータに、多値データに対応したラベリング処理を行った結果です。
(画像のラベリングで領域の面積が分かるように、領域の体積や重心が容易にもとまります)
本手法ではシーケンシャルスキャン(ラスタースキャン相当)方式を採用しており、1回のスキャン
で全多値ボリュームデータの連結解析を完了するので、非常に高速なラベリングが可能です。
また、処理時間は処理する連結性に依存し、6連結<18連結<26連結の順で長くなります。
|
2次元の CTデータから生成した
Voxel データを多値データとして、
6連結のラベリング処理した結果
ラベルデータ(自然数)を強制的に
画像に見立てて表示
上記処理手順により作成した
連結部を強調する為に諧調を
下げた Voxel データを使用し
ている事に注意してください
|
|
Voxelのラベリングデータを擬似カラー
表示した例
同じ色の部分は、同一のラベル番号が
付与されている
3次元の連続性が、正しく処理されて
いる事が確認できる。
|
|
擬似カラー表示方向を変更した例
顔の前面方向から、後方にかけての画像
|
参考情報
ボリュームデータの処理例
ラベリング処理性能 (簡易測定であり参考情報として)
|
|
The
Stanford volume data archive terra-cotta bunny を使用した性能テスト
使用環境: Core 2 Duo E7200 @2.53GHz Mem 4G Windows XP SP3
VOXEL: 512 x 512 x 360 ( 94,371,840 Voxel、符号なし16ビット)
処理方法: 26連結の多値データ対応のラベリング処理 (15.6 sec)
シャビーなCPU環境でも、94,371,840 voxel の多値ラベリング処理を 15.6sec
で完了した。 本ラベリング処理の時間は、ボクセル数にほぼ線形比例します
ので、1Kx1Kx1K のデータでも、処理は3分以内での完了が期待できます。 |
補足情報
最後に
ボクセルデータは非常に大きなエリアを使用しますので、各種の処理を施す場合には処理時間が
非常に重要な要素(問題)となります。 ラベリング等の重い処理ではなおさらです。
コストを無視できる軍事用の装置(表面化しないので知る由も無いが)であれば潤沢な資金を利用
してハイスペックなコンピュータや、処理装置を利用できますので容易に実現出来るでしょうが、
汎用のましては、1世代以上前の事務用CPUを使用して実現するにはノウハウが必要となります。
1K x 1K x 1K (1G) 程度のサイズのボクセルであれば、数(2~3)分でラベリングが完了するので、
民生技術の中では性能的にトップクラスの部類だと考えています。医療やGISの世界ではニーズが
高いと理解していますので、今後の、この分野での発展に期待しています。
ここに記載の情報が、少しでも皆様のお役に立てば幸いです。 Are you following me?