(58)【調査した分野】(Int.Cl.,DB名)
対象物を断層撮影することによって取得した断層画像に対してレイキャスティング法を用いてボリュームレンダリング画像を生成する処理をコンピュータに実行させるレイキャスティングプログラムであって、前記コンピュータに、
前記断層画像のボクセル値を基に設定された色値と不透明度を有する前記対象物のボクセル画像を前記断層画像から作成するボクセル画像作成ステップ、
前記対象物に対する視点(x,y,0)を基準とした3次元(x,y,z)の視点座標系を、前記ボクセル画像の座標系に変換するパラメータであって、同一の前記視点に対して共通に用いる座標変換パラメータを算出する、座標変換パラメータ算出ステップ、
前記視点から前記視点座標系のz方向に沿って、前記座標変換パラメータを用いて座標変換を行いながら前記ボクセル画像を参照することにより、前記視点座標系のz座標のうち不透明度が0ではないものを起点座標として設定する起点座標探索ステップ、
前記起点座標を起点として前記視点座標系のz方向に沿って、前記座標変換パラメータを用いて座標変換を行いながら前記ボクセル画像のボクセルの色値と不透明度を取得して前記ボリュームレンダリング画像の画素(x,y)の画素値を算出するレイキャスティングステップ、
を実行させ、
前記レイキャスティングプログラムは、前記コンピュータにさらに、前記視点を変更する座標変換パラメータを指示する座標変換パラメータの入力を受け取るステップを実行させるとともに
前記座標変換パラメータの入力を受け取るごとに、前記座標変換パラメータ算出ステップ、前記起点座標探索ステップおよび前記レイキャスティングステップを実行させて、前記ボリュームレンダリング画像を繰り返し表示するようにし、
前記起点座標探索ステップおよび前記レイキャスティングステップにおいては、前記コンピュータに、前記座標変換パラメータの入力を受け取っている間の期間においては、前記ボリュームレンダリング画像の画素のうち少なくとも一部を間引く間引き処理を実施したうえで起点座標を設定するとともに画素値を算出させ、
前記起点座標探索ステップおよび前記レイキャスティングステップにおいては、前記コンピュータに、前記座標変換パラメータの入力が停止した時点で前記間引き処理を実施せずに起点座標を設定するとともに画素値を算出させる
ことを特徴とするレイキャスティングプログラム。
対象物を断層撮影することによって取得した断層画像に対してレイキャスティング法を用いてボリュームレンダリング画像を生成する処理をコンピュータに実行させるレイキャスティングプログラムであって、前記コンピュータに、
前記断層画像のボクセル値を基に設定された色値と不透明度を有する前記対象物のボクセル画像を前記断層画像から作成するボクセル画像作成ステップ、
前記対象物に対する視点(x,y,0)を基準とした3次元(x,y,z)の視点座標系を、前記ボクセル画像の座標系に変換するパラメータであって、同一の前記視点に対して共通に用いる座標変換パラメータを算出する、座標変換パラメータ算出ステップ、
前記視点から前記視点座標系のz方向に沿って、前記座標変換パラメータを用いて座標変換を行いながら前記ボクセル画像を参照することにより、前記視点座標系のz座標のうち不透明度が0ではないものを起点座標として設定する起点座標探索ステップ、
前記起点座標を起点として前記視点座標系のz方向に沿って、前記座標変換パラメータを用いて座標変換を行いながら前記ボクセル画像のボクセルの色値と不透明度を取得して前記ボリュームレンダリング画像の画素(x,y)の画素値を算出するレイキャスティングステップ、
を実行させ、
前記起点座標探索ステップにおいては、前記コンピュータに、前記座標変換パラメータを用いて座標変換を行いながら前記ボクセル画像を参照することにより、起点座標を設定する際、前記ボクセル画像のボクセル間の中間座標を加味して座標変換を行い、前記起点座標探索ステップをN(N>1)回実行させ、
前記レイキャスティングステップにおいては、前記コンピュータに、前記座標変換パラメータを用いて座標変換を行いながら前記ボクセル画像の色値と不透明度を取得して前記ボリュームレンダリング画像の画素値を算出する際、前記中間座標を加味して座標変換を行い、前記レイキャスティングステップをN回実行させ、算出されたN個のボリュームレンダリング画像の画素値を平均することにより、前記ボリュームレンダリング画像の画素値を算出する
ことを特徴とするレイキャスティングプログラム。
前記起点座標探索ステップにおいては、前記コンピュータに、前記ボリュームレンダリング画像の全ての画素について前記起点座標を設定した上でその結果を記録する探索制御テーブルを作成させ、
前記レイキャスティングステップにおいては、前記コンピュータに、前記探索制御テーブルが記録している前記起点座標を起点として、前記ボリュームレンダリング画像の画素値を算出させる
ことを特徴とする請求項1から請求項5のいずれか一項に記載のレイキャスティングプログラム。
前記起点座標探索ステップにおいては、前記コンピュータに、前記座標変換パラメータを用いて座標変換を行いながら前記ボクセル画像を参照する際、ボクセルが有する色値を参照することなく不透明度を参照することにより、前記起点座標を探索させる
ことを特徴とする請求項1から請求項6のいずれか一項に記載のレイキャスティングプログラム。
【発明を実施するための形態】
【0012】
<実施の形態1>
図1は、本発明の実施形態1に係るレイキャスティング装置100の構成図である。レイキャスティング装置100は、CT装置やMRI装置によって取得した対象物のスライス画像から、当該対象物の3次元画像(ボリュームレンダリング画像)を生成する装置である。レイキャスティング装置100は、CPU(Central Processing Unit)110、ボクセル画像作成部121、座標変換部122、起点座標探索部123、レイキャスティング処理部124、表示部125、記憶部130を備える。CPU110は演算装置である。表示部125は、作成された情報を出力して表示する表示装置である。記憶部130は、CPU110が用いるデータを格納する記憶装置である。
【0013】
ボクセル画像作成部121、座標変換部122、起点座標探索部123、レイキャスティング処理部124、これらの機能を実装した回路デバイスなどのハードウェアによって構成することもできるし、これらの機能を実装したソフトウェアをCPU110が実行することにより構成することもできる。以下では
図1に示すようにCPU110が実行することを前提として説明する。記載の便宜上、これら機能部を動作主体として説明する場合があるが、実際にこれら機能部を実行するのはCPU110であることを付言しておく。これら機能部の詳細については後述する。
【0014】
図2は、レイキャスティング装置100がボリュームレンダリング画像を生成する手順を説明するフローチャートである。CT装置やMRI装置によって対象物のスライス画像はあらかじめ作成されているものとする。以下
図2の各ステップについて説明する。
【0015】
(
図2:ステップS210)
ボクセル画像作成部121は、スライス画像からボクセル画像を作成する。ボクセル画像の各ボクセルには、ボクセル値としてスライス画像の画素値(信号値、CT画像の場合はCT値とも呼ばれる)を与え、ボクセル値を基に色値(具体的には、RGB値)と不透明度(具体的には、α値)を持たせる。ボクセル値は例えばCT装置によって取得したCT値で一般に16ビットで与えられるのに対し、色値(RGB値)と不透明度(α値)は各々8ビットの値をもたせボクセルあたり32ビットで表現される。各ボクセルに対してカラーマップを割り当てる場合、各ボクセルのボクセル値を基に色値(RGB値)および不透明度(α値)を与える。各ボクセルに対してカラーマップを割り当てない場合でも、各ボクセルのボクセル値を所定の計算式に基づいて、16ビットのボクセル値を8ビットの色値(RGB値)および不透明度(α値)に変換する。
【0016】
(
図2:ステップS220)
座標変換部122は、以後のステップにおいて座標変換を実施する際に用いる座標変換パラメータを算出する。座標変換パラメータの算出S220は、ボクセルに対して仮想光を照射する際、ボクセル単位に逐次座標変換処理を行えるようにするために、視点を基準とする視点座標系を基にボクセル画像が定義されているボクセル座標系にボクセルの3次元座標値を変換し、ボクセル座標系において対応する複数の8近傍のボクセルの色値または/かつ不透明度を補間するための処理である。座標変換の概念図と座標変換パラメータの具体例については後述する。
【0017】
(
図2:ステップS230)
起点座標探索部123は、ボリュームレンダリング画像の各画素において、仮想光の光強度および当該画素の輝度(RGB値)を積算する処理を開始するボクセルの起点座標を、ボリュームレンダリング画像の全画素について算出する。仮想光が通過する全てのボクセルが完全に透明である(不透明度が0である)場合、仮想光の光強度はそのまま維持されてボクセル画像の空間を素通りしてしまうので、レイキャスティング処理は必要ない。したがって本実施形態1においては、視点から見て不透明度が0ではない最初のボクセルの座標を、視線方向に沿って探索することとした。探索により最初に発見される不透明度が0ではないボクセルの座標を起点座標と呼ぶ。本ステップにおいては、ボリュームレンダリング画像の画素(x,y)ごとに、起点座標を探索する。探索結果はボリュームレンダリング画像の画素の座標値(x,y)に対応させて探索制御テーブルとして保持しておく。探索制御テーブルの例については後述する。
【0018】
(
図2:ステップS230:補足その1)
ボリュームレンダリング画像の各画素(x,y)は、2次元座標系で定義されている。これに対して、ボクセルの座標系は3次元座標系で定義されており、3次元のボクセル座標系を2次元座標系に投影変換させることによりボリュームレンダリング画像を算出する。各画素(x,y)に対して投影変換されるボクセルは深さ方向に複数個存在するため、同一の座標(x,y)に対応する視線方向に連続する複数個のボクセルをz方向に配置させたものを視点座標系と称す。各画素の輝度値を算出するにあたり、視点座標系においてz方向に仮想光を投射し、仮想光が通過する各ボクセルに対して座標変換を行い、ボクセル画像が定義されている3次元のボクセル座標系における対応するボクセルの色値と不透明度を取得することになる。この座標変換処理において、ステップS220で算出した座標変換パラメータを用いることができる。座標変換処理は起点座標探索部123の制御の下で座標変換部122が実施する。座標変換処理は本ステップにおいて視点座標系のボクセルを参照するごとに実施する。
【0019】
(
図2:ステップS230:補足その2)
本ステップにおいては、不透明度が0ではないボクセルを探索するので、ボクセルが有するその他の値(色値)を参照する必要はない。すなわち起点座標探索部123は、本ステップにおいて各ボクセルの不透明度のみを参照し、その他の値(色値)は参照しない。座標変換処理は、視点座標系の単一の座標(x,y,z)のボクセルに対して、ボクセル画像が定義されている3次元のボクセル座標系における対応する座標(x’,y’,z’)のボクセルの色値(RGB)および不透明度を取得する処理であるが、座標値(x’,y’,z’)は実数値で端数をもつため、座標値(x’,y’,z’)の8近傍の整数の座標値に対応する各ボクセルの色値(RGB)および不透明度を補間する演算処理を必要とする。色値の参照を行なわずに不透明度のみを参照する方法をとることにより、座標変換処理の演算負荷が1/4に削減される。
【0020】
(
図2:ステップS240)
レイキャスティング処理部124は、ボリュームレンダリング画像の各画素(x、y)において、ステップS230で探索した起点座標を起点として、視点座標系においてz方向に仮想光を投射し、仮想光が通過する各ボクセルに対してボクセル画像が定義されている3次元のボクセル座標系における対応するボクセルの色値と不透明度を用いて仮想光の光強度および当該画素の輝度(RGB値)を積算することにより、ボリュームレンダリング画像の各画素(x,y)の画素値を算出する。本ステップにおいても、視点座標系とボクセル座標系は異なるので、ステップS220で算出した座標変換パラメータを用いて座標変換を行い、視点座標系の各ボクセルに対してボクセル座標系における対応するボクセルの色値と不透明度の双方を算出する必要がある。座標変換処理はレイキャスティング処理部124の制御の下で座標変換部122が実施する。座標変換処理は本ステップにおいても視点座標系のボクセルを参照するごとに実施する。
【0021】
(
図2:ステップS250)
表示部125は、ステップS240において算出した各画素(x,y)の輝度値(RGB値)を用いて、ボリュームレンダリング画像を出力先の装置またはデバイスに応じて出力する。
【0022】
図3は、座標変換の概念図である。ボリュームレンダリング画像は視点から見た画像であるので、ボリュームレンダリング画像の各画素(x,y)の基準となる視点座標系は必ずしもボクセル座標系とは一致していない。そこで座標変換部122は、ボクセル座標系に定義されているボクセル画像を視点座標系に変換する。しかし、例えば、512×512画素のスライス画像が256枚で構成されるボクセル画像を視点座標系に変換すると、後述するZ方向変倍率を2.0として、x:512×y:512×z:512ボクセルの視点座標系に変換されたボクセルデータ構造体を作成する必要があり、512の3乗回の座標変換が必要になる。これに対して、起点座標の探索を行う際は、不透明度が0でないボクセルが即座に見つかれば、z方向に後続するボクセルに対しては参照する必要が無く、レイキャスティング処理を行う際は、仮想光の光強度が所定の値以下に減衰すれば積算処理を打ち切ることができ、z方向に後続するボクセルに対しては参照する必要が無い。即ち、視点座標系に変換された512の3乗個のボクセルの大半は参照されないため、ボクセル画像の全てのボクセルに対して座標変換を行って保持する必要は無い。そこで、
図3の右に示されるような視点座標系に座標変換されたボクセル画像を生成せず、
図3の右の下方向の矢印で示される仮想光が通過して参照されるボクセルに限定して、その都度、ボクセル画像が定義されているボクセル座標系に座標変換処理を実行させるようにした。参照されないボクセルに対しては座標変換処理が実行されないため、あらかじめボクセル座標系から視点座標系に変換された全てのボクセルデータ構造体を作成した上で、起点座標探索とレイキャスティング処理を行う公知の方法に比べ、3次元のボクセルデータ構造体を保持するメモリが不要になるとともに、座標変換の回数を削減することができ、メモリアクセス負荷および演算負荷を抑制することができる。
【0023】
座標変換を実施する際には、様々な座標変換パラメータを用いる。視点座標系とボクセル座標系の位置関係が同じであれば、座標変換パラメータも同じであると考えられる。即ち、起点座標探索部123およびレイキャスティング処理部124において、視点座標系で参照される全てのボクセルに対して、ボクセル座標系に対する座標変換を実施するための座標変換パラメータは同一である。そこで座標変換部122は、ステップS220において座標変換パラメータをあらかじめ算出し、以後のステップにおいてはその座標変換パラメータを共通の座標変換パラメータとして流用する。座標変換パラメータとしては例えば以下のようなものが挙げられる。
【0024】
・X軸周りの回転角をRx(単位:ラジアン)としたとき、sin(Rx)とcos(Rx)をあらかじめ座標変換パラメータとして算出する。YZ軸についても同様にあらかじめ算出する。
・X軸方向のオフセットXoff(単位:ボクセル)をあらかじめ座標変換パラメータとして保持しておく。YZ軸についても同様にあらかじめ保持しておく。
・XYZ軸方向のROI(Region Of Interest)をあらかじめ座標変換パラメータとして保持しておく。ROIはXYZ軸各方向における表示範囲を指示し、指定された範囲外のボクセルがボリュームレンダリング画像において非表示になるように、範囲外のボクセルの不透明度を全て0に設定する作用をもつ。
・拡大縮小倍率Scaleをあらかじめ座標変換パラメータとして保持しておく。XYZ各軸について同じ値を用いてもよいし、それぞれ異なる値を用いてもよい。
・Z方向変倍率:CTまたはMRIスキャンの過程において、スライス画像における2次元XY方向の画素間隔とスライス画像のZ方向(体軸方向)のスライス間隔が一般に異なるため、スライス画像の集合で構成される3次元のボクセル画像のXY方向の画像スケールとZ方向の画像スケールが異なってくる。そのため、画像をZ方向に変倍する必要がある。この場合はXY方向の解像度とZ方向の解像度の間の比率をあらかじめ算出しておき、これを座標変換時に上記拡大縮小倍率に併せて適用する。
【0025】
レイキャスティング処理とは、仮想光を視点からボクセルに対して照射したと仮定して、最深点(仮想光の光強度が所定の値以下に減衰した点)を探索し、最深点から光軌跡を遡って投影面における輝度値を積算することにより、投影面上における画素値を算出する方法が基本である。レイキャスティング処理部124では、最深点を探索する過程で、通過した全てのボクセルの不透明度を基に仮想光の光強度を積算しながら、通過した全てのボクセルの色値と不透明度を基に投影面における輝度値を積算する処理を同時に行う。通過した全てのボクセルの色値と不透明度は、視点座標系から座標変換によりボクセル座標系における対応するボクセルの色値と不透明度にしたがって算出することになるので、ボクセル座標系における8近傍のボクセルの色値と不透明度を補間する必要がある。
【0026】
図4は、ステップS230において起点座標探索部123が探索制御テーブルを作成する手順を説明する図である。起点座標探索部123は、ボリュームレンダリング画像の画素(x,y)ごとに起点座標を記述した探索制御テーブルを作成する。起点座標とは、視点座標系において、視点(z=0)からボクセルをz軸方向(z>0)に探索して最初に見つかった不透明度が0でない値をもつボクセルの視点座標系におけるz座標値(正また0の値)である。探索した結果、不透明度が0でない値をもつボクセルが見つからなかった場合、即ちz方向の末端まで全てのボクセルが透明な場合、起点座標として負値(−1)を設定する。ボリュームレンダリング画像の全ての画素の座標(x,y)について、始めに仮想光を投射する起点座標を探索する必要があるが、この探索処理は座標(x,y)ごとに視点座標系のz軸方向の複数のボクセルの不透明度を参照する必要があり、各ボクセルの不透明度を取得するために座標変換処理を実行して対応するボクセル座標系の複数のボクセルの不透明度の値を補間する処理を実行するため、演算負荷が比較的大きい。そこで、2次元の探索制御テーブルを作成する方法をとることにより、一部の座標に対する起点座標については、近傍の座標において探索された起点座標を流用し、探索処理を省略することができる。本実施形態1においては個々の画素に対して実行される起点座標の探索処理の演算負荷を抑制するため、以下の手順により探索制御テーブルを作成する。
【0027】
起点座標探索部123は、まずボリュームレンダリング画像のx軸方向およびy軸方向の偶数番目の画素(2m,2n)(m=0,1,・・・、n=0,1,・・・)について、起点座標を探索する。
図4左図の塗り潰した部分がこれに相当する。ボリュームレンダリング画像の画素数は一般に512×512など偶数個に設定される場合が多く、後述する補間処理では画像末端部の奇数番目の画素の起点座標を設定できないため、
図4左図のように、x軸方向の右末端の画素およびy軸方向の下端の画素についても起点座標を探索する。
【0028】
起点座標探索部123は、ボリュームレンダリング画像のy軸方向の偶数番目の画素の中で、x方向の奇数番目の画素(2m+1,2n)について、先に探索されたx方向における両隣の偶数番目の画素の起点座標が同じであるか否かをチェックする。例えば画素(1,0)については、両隣である画素(0,0)の起点座標と画素(2,0)の起点座標が同じであるか否かをチェックする。ただし、x方向の右末端の画素は奇数番目であっても、
図4左図の通り既に起点座標が設定されているので、本チェック処理の対象外とする。両隣の起点座標が同じである場合、対象物は当該画素近傍において同様の形状を有していると推定されるので、間に挟まれている画素の起点座標も両隣の起点座標と同じであるとみなすことができる。また、両隣の起点座標が負値となる背景部の画素である場合、間に挟まれている画素も背景部であるとみなすことができる。そこで起点座標探索部123は、画素(2m+1,2n)の両隣の起点座標が同じである場合、画素(2m+1,2n)についても同じ起点座標を設定する。
図4中央図の縦ハッチング部分がこれに相当する。一方、両隣の起点座標が異なる場合、両隣の偶数番目の画素と同様に、起点座標探索部123は、起点座標を探索する処理を実行し、探索した起点座標を設定する。
【0029】
起点座標探索部123は、ボリュームレンダリング画像のy方向が奇数番目でx方向は全ての画素(x,2n+1)について、y方向における両隣の偶数番目の画素の起点座標が同じであるか否かをチェックする。例えば画素(0,1)については、両隣である画素(0,0)の起点座標と画素(0,2)の起点座標が同じであるか否かチェックする。ただし、y方向の下末端行の画素は奇数番目であっても、
図4中央図の通り既に起点座標が設定されているので、本チェック処理の対象外とする。両隣の起点座標が同じである場合は、x方向と同様に、間に挟まれている画素についても同じ起点座標を設定する。そして、両隣の起点座標が異なる場合は、x方向と同様に、起点座標探索部123は、起点座標を探索する処理を実行し、探索した起点座標を設定する。
図4右図の横ハッチング部分がこれに相当する。
【0030】
図4では縦横1画素置きに起点座標の探索を行い、間に挟まれている1画素を両隣の画素を基に補間する方法を示したが、これは一例に過ぎず、縦横M(M>1)画素置きに起点座標の探索を行い、間に挟まれているM個の各画素を両隣の画素を基に補間する方法もとることもでき、その場合は演算負荷を更に抑制することができる。
【0031】
図5は、ステップS230において起点座標探索部123が各画素において起点座標を探索する手順を説明する図である。
図4においては、xy方向の隣接画素において探索された起点座標を基に一部の起点探索の処理を省略することにより起点座標の設定を高速化する手順を説明した。これに代えてまたは併用して、z方向の起点探索の処理自体を高速化することにより、起点探索の演算負荷を二重に抑制することができる。
【0032】
起点座標探索部123は、視点から開始して視線座標系のz方向に沿って各ボクセルの不透明度を参照する。始めに、視点位置(z=0)におけるボクセルの不透明度を確認し、不透明度が0でない場合は被写体の表面(切断面)であるため、起点座標はz=0で探索打ち切りとなり、演算負荷が小さい。しかし、視点位置(z=0)におけるボクセルの不透明度が0である場合(背景部に多い)、z方向に透明なボクセルが連続して存在する可能性が高く、背景部ではz方向の末端部まで全てのボクセルの不透明度が0となり、隣接するボクセルを順次参照する方法をとると、起点座標が負値であることを決定するためにz方向の末端部まで全てのボクセルに対して座標変換を行いながらボクセルの不透明度を参照する必要があり、膨大な演算負荷を伴ってしまう。そこで、視点位置(z=0)におけるボクセルの不透明度が0である場合は、隣接するボクセルを順次参照するのではなく、任意個数のボクセルをスキップしながら不透明度を参照する(
図5左図)。例えばz方向に8ボクセルごとに不透明度を参照する。z方向の終端のボクセルに至っても不透明度が0ではないボクセルが見つからなかった場合は、起点座標として負値を設定して探索打ち切りとする。一方、不透明度が0ではない(完全透明ではない)最初のボクセルが見つかった場合は、起点座標を正確に決定するため
図5右図の工程に移る。
【0033】
起点座標探索部123は、最初に見つかった不透明ボクセルから視点に向かって遡り、不透明度が0である最初のボクセルを探索する(
図5右図)。このときは視点座標系のz方向に隣接するボクセルの不透明度を1ボクセルごとにスキップ幅を上限として順次参照する。不透明度が0である最初のボクセル(
図5右図の白いボクセル)が見つかった時点で、その1つ前のボクセル(視点から遠ざかる方向)の視点座標系におけるz座標を起点座標として、探索制御テーブルに格納する。スキップ幅の上限まで遡って、不透明度が0である最初のボクセルが見つからなかった場合は、最初に見つかった不透明ボクセルの視点座標系におけるz座標を起点座標として、探索制御テーブルに格納する。以上の手順により、z方向の起点探索を高速化することができる。
【0034】
図4と
図5に示す手順において、起点座標探索部123は、視点座標系(x,y,z)を基準としてz方向に配置されたボクセルの不透明度を参照することになる。しかし実際に参照するのはボクセル座標系におけるボクセルが有する不透明度であるので、実際のボクセルが有する不透明度を取得するためには、視点座標系からボクセル座標系への座標変換が必要になる。座標変換のためのパラメータは、ステップS220においてあらかじめ算出しておけばよい。座標変換により算出したボクセル座標系の座標値(x’,y’,z’)は実数値になるが、ボクセル座標系におけるボクセルを参照するためには整数値に変換する必要がある。この時、小数点以下を切り捨てて整数化してボクセル座標系における単一のボクセルを参照する方法をとると、ボリュームレンダリング画像にモアレが発生することが知られているため、算出されたボクセル座標系の実数座標値(x’,y’,z’)に隣接する8近傍の整数座標値のボクセルの不透明度に対して実数座標値の小数点以下の数値に応じて重み付けした値を合算することにより、不透明度を算出する方法が望ましい。後述するレイキャスティング処理においても同様であるが、レイキャスティング処理においてはボクセルの不透明度だけでなくRGB3値からなる色値も参照する必要があるため、起点座標の探索における座標変換の処理負荷はレイキャスティング処理における座標変換の処理負荷に比べ1/4に抑制できる。
【0035】
図6は、起点座標探索部123が各画素において起点座標を探索する手順を説明するフローチャートである。起点座標探索部123は、各対象画素(x,y)について本フローチャートを実施する。以下
図6の各ステップについて説明する。
【0036】
(
図6:ステップS601)
起点座標探索部123は、起点座標を探索する対象画素(x,y)、3次元座標(x,y,z)をセットする。z座標の初期値はz=Zsとする。Zsは視点のz座標である。尚、
図5の説明においては、視点座標系におけるz座標の初期値はz=0とし、z座標の値を増大させる正方向に探索する方法で説明したが、
図6ではソフトウェアの実装形態に基づき、視点座標系におけるz座標の初期値はz=Zs(>0)とし、z座標の値を減少させる負方向に探索する方法で説明する。
【0037】
(
図6:ステップS602)
起点座標探索部123は、3次元座標(x,y,z)について、座標変換を実施して視点座標系に座標変換する前のボクセルに対応する不透明度αを算出する。算出手順としては、例えば上述のように隣接するボクセルの不透明度を重み付け加算する手法を用いることができる。αが0であればステップS603へ進み、αが0でなければステップS605へ進む。
【0038】
(
図6:ステップS603)
起点座標探索部123は、z軸方向に所定個数のボクセルをスキップする。具体的には現在のz座標からm(例えばm=8)減算する。減算した結果、z座標が0未満になった場合は、ステップS604へ進む。z座標が0以上である場合はステップS602へ戻って同様の処理を繰り返す。
【0039】
(
図6:ステップS604)
起点座標探索部123は、現在の対象画素(x,y)に対応する探索制御テーブルの値M(x,y)に対して、起点座標が見つからなかった旨を示す値(例えば−1などの負値)をセットして本フローチャートを終了する。
【0040】
(
図6:ステップS605〜S606)
起点座標探索部123は、変数iを初期化した後(S605)、1ずつインクリメントする(S606)。iがmまで到達した場合、または現在のz座標にiを加算すると視点z座標に達する場合は、ステップS608までスキップする。iがmまで到達しておらず、かつ現在のz座標にiを加算しても視点z座標まで達しない場合は、ステップS607へ進む。
【0041】
(
図6:ステップS607)
起点座標探索部123は、3次元座標(x,y,z+i)について、座標変換を実施して視点座標系に座標変換する前のボクセルに対応する不透明度αを算出する。算出手順はステップS602と同じである。αが0であればステップS608へ進み、αが0でなければステップS606へ戻ってiをインクリメントして同様の処理を繰り返す。
【0042】
(
図6:ステップS608)
起点座標探索部123は、現在の対象画素(x,y)に対応する探索制御テーブルの値M(x,y)に対して、ステップS607の1つ手前のz座標(z+i−1)をセットして本フローチャートを終了する。
【0043】
図7は、ステップS240においてレイキャスティング処理部124がレイキャスティング処理を実施する手順を説明する図である。レイキャスティング処理部124は、求まるボリュームレンダリング画像の各画素の(x,y)座標に対して探索制御テーブルが保持している起点座標を参照して、(x,y,z)視点座標系において起点座標よりz方向に仮想光を投射し、仮想光が通過する各ボクセルに対して(x’,y’,z’)ボクセル座標系における対応するボクセルの色値と不透明度を用いて仮想光の光強度および当該画素の輝度(RGB値)をz方向のボクセルごとに積算し、仮想光の光強度が所定の値以下に減衰するか、z方向の終端のボクセルに至る段階まで積算する処理を継続し、最終的に積算された当該画素の輝度(RGB値)をボリュームレンダリング画像の当該画素(x,y)の画素値として与える。
【0044】
レイキャスティング処理の途上で、あるz座標におけるボクセルの不透明度が0である(すなわち透明である)場合がある。透明ボクセルに対しては仮想光の光強度および画素の輝度(RGB値)の積算処理は行われないため、透明ボクセルはスキップし、次の不透明ボクセルを探索する。このときレイキャスティング処理部124は、視点座標系のz方向において視点からずれたz>0である途中の透明ボクセルから探索を開始して
図5と同様の手法により、不透明度が0でない最初のボクセルを探索することができる(
図7左図〜
図7右図)。レイキャスティング処理においてはボクセルの不透明度だけでなくRGB3値からなる色値も必要になるが、不透明ボクセルを探索する際は、ボクセルの色値は不要なため、座標変換において不透明度だけを算出すればよく、座標変換の演算負荷を1/4に抑制できる。不透明度が0でないボクセルが見つかると、そのボクセルからレイキャスティング処理を再開し、仮想光の光強度が所定の値以下に減衰するか、z方向の終端のボクセルに至るまでレイキャスティング処理を継続する。
図7<まとめ>は、以上の手順によりレイキャスティング処理を実施する不透明なボクセルとスキップする透明なボクセルを区分した結果をまとめたものである。レイキャスティング処理の途中に存在する透明なボクセルに対して座標変換を伴いながら色値および不透明度を参照する処理をスキップすることにより、レイキャスティング処理を高速化することができる。
【0045】
レイキャスティング処理部124が色値や不透明度を参照する際には、視点座標系(x,y,z)を基準として対応するボクセル座標系におけるボクセルのこれら値を参照することになる。したがって視点座標系からボクセル座標系への座標変換が必要になる。座標変換パラメータについては起点座標探索部123が用いるものと同様である。ただし、レイキャスティング処理においてはボクセルの不透明度だけでなくRGB3値からなる色値も必要になる。そのため、座標変換されたボクセル座標系の実数座標値(x’,y’,z’)に隣接する8近傍の整数座標値に対応するボクセルの色値と不透明度に対して実数座標値の小数点以下の数値に応じて重み付けした値を合算することにより、ボクセルの色値と不透明度を取得する方法をとる。
【0046】
<実施の形態1:まとめ>
本実施形態1に係るレイキャスティング装置100は、起点座標探索とレイキャスティング処理において用いる座標変換の座標変換パラメータをあらかじめ算出しておき、これを用いて起点座標探索とレイキャスティング処理の各々において参照が必要な最小限のボクセルに限定して座標変換を実施する。これにより、あらかじめボクセル座標系から視点座標系に変換された全てのボクセルデータ構造体を作成した上で、起点座標探索とレイキャスティング処理を行う公知の方法に比べ、3次元のボクセルデータ構造体を保持するメモリが不要になるとともに、座標変換の回数を削減することができ、メモリアクセス負荷および演算負荷を抑制することができる。例えば、512×512画素のスライス画像が256枚で構成されるボクセル画像を視点座標系に変換すると、Z方向変倍率を2.0として、x:512×y:512×z:512ボクセルの視点座標系に変換されたボクセルデータ構造体を作成する必要があり、512の3乗回の座標変換が必要になる。これに対して、起点座標探索を行う際は、不透明度が0でないボクセルが即座に見つかれば、z方向に後続するボクセルに対しては参照する必要が無く、座標変換を省略することができる。また、レイキャスティング処理を行う際は、仮想光の光強度が所定の値以下に減衰すれば積算処理を打ち切ることができ、z方向に後続するボクセルに対しては参照する必要が無く、座標変換を省略することができる。これらの省略により、座標変換の回数を約1/3程度削減することができる。したがって、パーソナルコンピュータなどの一般的コンピュータであっても、実用的な時間内でレイキャスティング法を用いてボリュームレンダリング画像を生成することができる程度に、演算負荷を抑制することができる。
【0047】
本実施形態1に係るレイキャスティング装置100は、ボリュームレンダリング画像の一部の画素に対してレイキャスティング処理を開始する起点座標をあらかじめ探索し、その結果を探索制御テーブルとして保存しておく。そして、ボリュームレンダリング画像の残りの画素に対しては、探索制御テーブルに記録されている起点座標を基に補間する方法をとる。これにより、ボリュームレンダリング画像の全ての画素に対応して起点座標を探索する必要がなくなるので、起点座標を探索して座標変換を実行する回数を削減し演算負荷を抑制することができる。
【0048】
本実施形態1に係るレイキャスティング装置100は、探索制御テーブルを作成する際に、同じ起点座標を有する2つの画素に挟まれた中間画素については、両隣の画素の起点座標をそのまま用いる。これにより、起点座標を探索するための演算負荷を抑制することができる。
【0049】
本実施形態1に係るレイキャスティング装置100は、探索制御テーブルを作成する際に、z方向に沿ってスキップしながら不透明度が0でない最初のボクセルを探索し、これが見つかった時点でz方向に反対向きに遡って不透明度が0である最初のボクセルを探索する。これにより、対象物の背景に存在する不透明度が0となる透明ボクセルの分布および対象物の内部の不透明度が0でない不透明ボクセルの分布がある程度連続的であることを前提として、起点座標を効率的に探索することができる。
【0050】
本実施形態1に係るレイキャスティング装置100は、レイキャスティング処理を実施する過程において不透明度が0であるボクセルに到達すると、z方向に沿ってスキップしながら不透明度が0でない最初のボクセルを探索し、これが見つかった時点でz方向に反対向きに遡って不透明度が0である最初のボクセルを探索する。これにより、起点座標を探索する処理と同様に、レイキャスティング処理の対象とすべきボクセルを効率的に探索することができる。
【0051】
<実施の形態2>
レイキャスティング処理において、ボリュームレンダリング画像の画質を向上させるため、具体的にはボリュームレンダリング画像中の被写体のエッジ部の段差・ジャギー(エイリアシングという)を除去する処理を行うため、座標変換を行う際、ボクセルの座標値を1ボクセル間の中間座標(サブサンプルという)だけ微小にオフセットを加えて(サブサンプリングという)、座標変換パラメータの算出S220、起点座標の探索S230およびレイキャスティング処理S240を各々複数回実施した上で、得られたボリュームレンダリング画像の画素値を平均化してスムージングする場合がある。これをアンチエイリアシングと呼ぶ。具体的には、座標変換パラメータの算出、起点座標の探索およびレイキャスティング処理を各々2回実行して平均化する場合、2回目の処理を実行する際、参照する視点座標系のボクセルの3次元座標値(x,y,z)の各値に0.5だけ加算して座標変換を行い、ボクセル座標系における不透明度または/かつ色値を取得する。そうすると、2回目の処理で得られるボリュームレンダリング画像における被写体の像が1回目の処理で得られボリュームレンダリング画像に比べ、最大1画素の範囲で位置ずれが生じ、これらを重ねて平均化することによりエッジ部における段差が解消される。実施形態1で説明した手法はサブサンプリングを実施する際にも用いることができる。本発明の実施形態2では、その具体例について説明する。レイキャスティング装置100の構成は実施形態1と同様である。
【0052】
サブサンプリングを実施する場合は、中間座標だけオフセットを加えた上で座標変換を実施する必要がある。通常の整数座標を基準として、中間座標をどの方向に、どの程度の幅で付加するかについては、座標変換パラメータとしてあらかじめ定めておくことができる。例えばx軸、y軸、z軸の各々に沿って3つの中間座標を付加する場合、座標変換処理は(x,y,z)、(x+0.25,y+0.25,z+0.25)、(x+0.5,y+0.5,z+0.5)、(x+0.75,y+0.75,z+0.75)に対して実施することになる。この場合は座標変換パラメータとして、x軸方向、y軸方向、およびz軸方向のサブサンプルオフセットdx=dy=dz=0.25などと定めておけばよい。yz方向については、x方向と異なるサブサンプルオフセットを加えることもできる。ただし、中間座標の種類が多いと処理負荷の増大を招くだけで必ずしも画質改善につながらないため、中間座標としてdx=dy=dz=0.5のみとし、(x,y,z)と(x+0.5,y+0.5,z+0.5)の2通りで座標変換を行い、起点座標探索とレイキャスティング処理を各々2回実行して平均化する方法を用いてもよい。
【0053】
dx=dy=dz=0.25と定めた場合、x方向、y方向、z方向の各々にdx=dy=dz=0.25、0.5、0.75の3つの中間座標を加えてそれぞれ、座標変換パラメータの算出S220、起点座標の探索S230とレイキャスティング処理S240を実施することになるので、3つの中間座標それぞれに対応して同様に起点座標を求め探索制御テーブルを作成し直す必要がある。起点座標探索部123は、3つの中間座標それぞれに対応して起点座標を探索した結果を別の探索制御テーブルに記録する。この場合は4つの探索制御テーブルを作成することになる。yz座標についてx方向と異なる中間座標を加えてサブサンプリングを実施する場合は、これに対応して探索制御テーブルを増やして作成する。中間座標を加味して座標変換を行う場合でも
図4と
図5に示す手順を用いて効率的に起点座標を探索することができる。
【0054】
レイキャスティング処理部124は、ボリュームレンダリング画像の各画素に対して中間座標に対応した探索制御テーブルを参照して起点座標を取得し、中間座標に対しても同様にレイキャスティング処理を実施する。さらに中間座標においても
図7と同様の手法によりレイキャスティング法を効率的に実施することができる。
【0055】
本実施形態2に係るレイキャスティング装置100によれば、サブサンプリングによってボリュームレンダリング画像の画質を向上させる場合においても、起点座標探索やレイキャスティング処理を効率的に実施することができる。これにより、パーソナルコンピュータなどの一般的コンピュータであっても、実用的な時間内でサブサンプリングによりボリュームレンダリング画像の画質を向上させることができる。
【0056】
<実施の形態3>
ユーザがボリュームレンダリング画像を閲覧する際に、視点(座標変換パラメータにおけるX軸周り、Y軸周り、Z軸周りの回転角Rx、Ry,Rz)や倍率(座標変換パラメータにおける拡大縮小倍率Scale)を画面上で連続的に変更する場合がある。レイキャスティング装置100は、変更後の視点や倍率に対応するボリュームレンダリング画像を再描画する。このときユーザは、例えば画面上でマウスをドラッグすることにより視点のパラメータ(X軸周り、Y軸周り、Z軸周りの回転角Rx、Ry,Rz)を変更する。ユーザがマウスをドラッグしている間もボリュームレンダリング画像をリアルタイムに算出し更新し続けることができれば、ユーザにとっての操作感を向上させることができる。しかし、パーソナルコンピュータなどの一般的コンピュータで診断等に活用できるレベルの高精細なボリュームレンダリング画像をリアルタイムで生成するのは演算負荷が重く、ユーザのマウス操作に追従させてボリュームレンダリング画像を更新し続けることは困難である。そこで本発明の実施形態3では、ユーザがマウスドラッグにより視点を変更している間における演算負荷を抑制する手法を説明する。レイキャスティング装置100の構成は実施形態1と同様である。
【0057】
図8は、ユーザがマウスをドラッグすることにより視点を変更するときのレイキャスティング装置100が生成するボリュームレンダリング画像の例である。
図8左図はユーザがマウスをドラッグしている間における画像である。
図8右図はユーザがマウスドラッグを終了した後の画像である。
【0058】
レイキャスティング装置100は、ユーザがマウスをドラッグすることにより視点を変更するよう指示する座標変換パラメータの入力を受け取る。レイキャスティング処理部124および表示部125は、ユーザがマウスをドラッグしている間は、ボリュームレンダリング画像の画素を間引いて画像を生成して、出力先の装置またはデバイスに拡大して表示されるように出力する。例えばxy方向ともに4画素ごとに間引いた画像を生成し、縦横4倍に拡大させて表示する。
図8左図は画素を間引いた画像例である。これにより、ユーザがマウスをドラッグしている間においては、ボリュームレンダリング画像をリアルタイムで生成できる程度に演算負荷を抑制できる。ただし、画素の間引き条件は、パーソナルコンピュータのCPU性能とソースのボクセル画像のボクセル数により適宜変更する必要がある。
図8の例は、ソースのボクセル画像がx:512×y:512×z:370、Z方向変倍率:1.4に対して、
図8右図に示す512×512画素の診断用途のボリュームレンダリング画像を生成する場合で、
図8左図に示す縦横4画素ごとに間引いた128×128画素の画像であれば、演算負荷が1/16に抑制され一般的なパーソナルコンピュータでリアルタイム(0.1秒以下)に生成することができる。
図8左図ではz方向に対しては間引きを行っていないが、z方向に対しても同様に4画素ごとに間引くことができ、その場合は演算負荷が1/64に抑制されるため、一般的なパーソナルコンピュータより処理能力が低いタブレット端末等でもリアルタイムに生成することができる。
【0059】
レイキャスティング装置100は、ユーザがマウスドラッグを完了すると(すなわちユーザがマウスボタンから指を離すと)、その旨の信号を受け取る。レイキャスティング処理部124および表示部125は、ドラッグ完了後は画素を間引かずに
図8右図のようなボリュームレンダリング画像を生成して、出力先の装置またはデバイスに応じて画像データを処理して出力する。
【0060】
<本発明の変形例について>
本発明は上記した実施形態に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施形態は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施形態の構成の一部を他の実施形態の構成に置き換えることが可能であり、また、ある実施形態の構成に他の実施形態の構成を加えることも可能である。また、各実施形態の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【0061】
以上の実施形態において、ボクセル画像作成部121は、ボクセル画像に対してスムージングを実施してもよい。例えばあるボクセルのx方向、y方向、z方向の各方向において隣接するボクセル(例えば、26個の隣接するボクセル)の不透明度の代表値(例えば、平均値)を、中心ボクセルの不透明度として採用した上で、ボクセル画像を作成することができる。この時、色値に対してはスムージングを掛けないようにすると、スムージングの演算負荷を1/4に抑制できるとともに、生成されるボリュームレンダリング画像のボケを抑制することができる。ボクセルを参照する際に座標変換と併せて本発明に係る手法を実施する形態をとることもできるが、その場合、ボクセル座標系において参照されるボクセルに対して重複してスムージング処理が行われるため、演算負荷が却って増大する場合があるので、ボクセルのスムージングは起点座標の探索やレイキャスティング処理よりも前(例えばステップS210)に実施することが望ましい。
【0062】
以上の実施形態において、ボクセル画像作成部121は、ボクセル画像の各ボクセルに対して陰影値を算出し、その陰影値を各ボクセルの色値に乗算することにより、ボリュームレンダリング画像に陰影を付加するようにしてもよい。陰影の中の拡散反射成分は、各ボクセルに隣接する26近傍または6近傍のボクセル(xyz各座標軸方向において2近傍)の不透明度の3次元的な変化を3次元勾配ベクトルとして算出し、その勾配ベクトルの単位ベクトルとあらかじめ定義された光源ベクトル(平行光の3次元的な方向を示す単位ベクトル)との内積をとることにより、計算することができる。不透明度の勾配ベクトルを算出する際に隣接ボクセルを参照する必要があるので、スムージングと同様に陰影計算は起点座標の探索やレイキャスティング処理よりも前(例えばステップS210)で、スムージング処理を実施する場合はスムージング処理を実施した後に実施することが望ましい。
【0063】
以上の実施形態においては、探索制御テーブルのうち奇数番目の画素を補完する例を説明したが、これに代えて偶数番目の画素を補完してもよい。xy方向いずれにおいても同様である。また、縦横1画素置きではなく、縦横M(>1)画素置きに起点座標の探索を行い、間に挟まれているM個の各画素を両隣の画素を基に補間するようにしてもよく、その場合は演算負荷を更に抑制することができる。
【0064】
以上の実施形態においては、ボクセル画像作成部121、座標変換部122、起点座標探索部123、レイキャスティング処理部124を個別のモジュールとして記載したが、これらのうち2以上を一体のモジュールとして構成することもできる。さらにこれらモジュールを全体として1つのレイキャスティングプログラムとしてCPU110が実行することもできる。
【0065】
上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記録装置、または、ICカード、SDカード等の可搬記録媒体に置くことができる。可搬記録媒体にプログラムを格納した場合、その記録媒体をドライブから読み出してプログラムを実行することができる。
【0066】
図9は、各機能部をプログラムとして構成した場合の構成例である。例えば記憶部130として上述した記憶装置または記憶媒体を用い、ボクセル画像作成部121〜レイキャスティング処理部124までの各機能部をプログラムとして構成して記憶部130に格納することができる。CPU110が記憶部130からこれらプログラムを読み出して実行することにより、レイキャスティング装置100の機能を実装することができる。そして、レイキャスティング処理部124で生成されるボリューレムレンダリング画像を表示部125に渡して視覚的に閲覧可能にする。
【解決手段】本発明に係るレイキャスティングプログラムは、ボクセル画像を視点から見た視点座標系の各ボクセルの座標をボクセル画像が定義されているボクセル座標系に座標変換するために用いる座標変換パラメータをあらかじめ算出しておき、その座標変換パラメータを用いてレイキャスティング処理を行うための仮想光の起点座標を事前に探索する際に必要とするボクセルに限定して座標変換を実施し、レイキャスティング処理においてボリュームレンダリング画像の画素値を算出するのに必要とするボクセルに限定して座標変換を実施する方法をとることができ、あらかじめボクセル画像の全てのボクセルを視点座標系に変換して視点座標系に変換されたボクセルデータ構造体を作成した上で、起点座標の探索やレイキャスティング処理を行う公知の方法に比べ、座標変換の回数を削減し演算負荷を抑制することができる。