以下、本開示の実施の形態を図面に基づいて説明する。図1は本実施の形態の画像処理装置としてのレイキャスティング装置100の構成の一例を示すブロック図である。本実施の形態のレイキャスティング装置100は、入力部10、記憶部11、出力部12、画像処理部20などを備える。画像処理部20は、階調圧縮処理部21、平滑化処理部22、ボクセル構造体生成部23、座標変換処理部24、レイキャスティング処理部25、探索制御マスク生成部26、座標値算出部27、サブサンプル・オフセット設定部28、補間処理部29、ROI(Region of Interest)クリッピング処理部30などを備える。
入力部10は、取得部としての機能を有し、z方向に沿って所定間隔で撮像された複数のxy平面画像の画像データを取得する。より具体的には、入力部10は、観察対象物(例えば、臓器、脳、骨、血管などを内部に含む人体・動物の様々な部位)に対して所定の間隔で断層撮影された複数の2次元の断層画像のDICOM(Digital Imaging and COmmunications in Medicine)形式の画像データを取得する。
図2はDICOM形式の断層画像の一例を示す模式図である。図2に示すようにxyz軸を設定した場合、xy平面画像であるスライス画像(2次元の断層画像)が、z方向に沿って複数並んでいる。Sxはx軸方向の画素数であり、Syはy軸方向の画素数であり、Szはスライス画像の枚数である。なお、3次元ボクセル空間では、SxとSyは各々x軸方向とy軸方向のボクセル数を表し、Szはz軸方向のボクセル数に対応する。Rxyはx方向及びy方向の解像度であり、画素の間隔の逆数、すなわち単位距離あたりの画素数を示す。x方向とy方向の解像度は等しいが、異なっていてもよい。Rzはz方向の解像度であり、隣り合うスライス画像の間隔の逆数、すなわち単位距離あたりのスライス数を表す。各スライス画像の座標(x,y,z)での画素値をDo(x,y,z)で現す。Do(x,y,z)は、−32768以上、32767以下の値を取り得る。画素値Do(x,y,z)は、例えば、CT画像の場合、水が0を示し、水よりも密度の高い組織(例えば、骨など)は正値となり、水よりも密度の低い組織(例えば、脂肪組織など)は負値となる。ボクセル画像の座標(x,y,z)において、x座標は0以上、Sx−1以下の値をとり、y座標は0以上、Sy−1以下の値をとり、z座標は0以上、Sz−1以下の値をとる。
また、入力部10は、画素値に対応付けてRGB値及び不透明度が定義されたカラーマップデータを取得する。
図3は本実施の形態のカラーマップデータの第1例を示す説明図である。第1例のカラーマップデータをCmap(v,c)で示す。変数vは、Do(x,y,z)の画素値を示し、Do(x,y,z)の範囲と同様に、−32768以上、32767以下の範囲内の数値を表す。変数cは、0、1、2、3の値を含み、c=0は、RGBのR値を示し、c=1はG値を示し、c=2はB値を示す。c=3は不透明度αを示す。Cmap(v,c)は、0以上、255以下の数値を取り得る。図3に示すように、カラーマップデータは、スライス画像の画素値Do(x,y,z)とRGB値及び不透明度αとの関係を定義するものである。例えば、画素値Do(x,y,z)が32767の場合、R値はR(32767)となり、G値はG(32767)となり、B値はB(32767)となり、不透明度はα(32767)となる。ここで、R(32767)、G(32767)、B(32767)、及びα(32767)は、画素値32767に対応していることを便宜上示すものであり、実際には適切な数値となる。また、カラーマップデータは、−32768から32767までの全ての画素値に対して定義する必要はなく、CT画像の場合、通常は−2048から2048の範囲をとるように調整されるため、−32768から−2048の範囲、および2048から32767の範囲のRGB値及び不透明度は全て0に設定するようにしてもよい。
図4は本実施の形態のカラーマップデータの第2例を示す説明図である。第2例のカラーマップデータをCmap8(v,c)で示す。後述するように、DICOM画像を、例えば、16ビットから8ビットへ階調圧縮した場合、画素値を、−32768以上、32767以下の範囲から、0以上、255以下の範囲とすることができる。Cmap8(v,c)の変数vは、0以上、255以下の範囲内の数値となる。変数cは第1例と同様である。
カラーマップデータCmap(v,c)、Cmap8(v,c)を用いることにより、例えば、人体の部位毎に異なる色を付すだけでなく、部位ごとに不透明度を設定することができ、手前に位置する臓器を透明にして奥に隠れている臓器を描出するなど、観察対象を認識しやすくすることができる。
また、入力部10は、xyz軸の回転角、xyz軸方向のオフセット値、xyz軸方向の拡大又は縮小倍率、z軸方向の変倍率、注視点から視点までの距離を含む座標変換のパラメータ、座標変換サブサンプル・オフセットの初期値、及びxyz方向のROI(Region of Interest:関心領域)の値を取得する。座標変換のパラメータ、ROI値の詳細は後述する。
記憶部11は、入力部10で取得したデータ、画像処理部20での処理結果などを記憶することができる。なお、カラーマップデータ、座標変換パラメータ、ROI値などを予め記憶部11に記憶する構成でもよい。
出力部12は、画像処理部20での処理結果、例えば、レイキャスティング処理部25で生成したレンダリング画像の画像データを表示装置(不図示)に出力する。
階調圧縮処理部21は、DICOM形式の断層画像を、例えば、8ビットの階調圧縮断層画像にする。
図5は本実施の形態のレイキャスティング装置100による階調圧縮処理の一例を示す説明図である。階調圧縮処理部21は、複数のスライス画像のうちの所定のスライス画像の画素の最小値及び最大値を特定する。例えば、1からSzまでのスライス画像のうち、Sz/2番目の中間のスライス画像における全ての画素の最小値Dmin及び最大値Dmaxを特定することができる。なお、所定のスライス画像としては、本来は全てのスライス画像における全ての画素の最小値及び最大値を特定する方法が正確である。しかし、その場合は、一旦全ての大容量の16ビットのDICOM形式の断層画像をメモリに保持する必要が生じ、階調圧縮効果が半減する。また、この最小値Dmin及び最大値Dmaxは階調圧縮のパラメータに使用するだけで、8ビットの階調圧縮断層画像の精度には直接影響しない。そこで、単一のスライス画像の画素の最小値及び最大値を用いて、おおまかに特定する方法をとる。ただし、先頭のスライス画像では被写体が適切に映っていない場合が多いため、中間のスライス画像だけで最小値Dmin及び最大値Dmaxを特定する方法をとる。これにより、大容量の16ビットのDICOM形式の断層画像をメモリに保持することなく8ビットの階調圧縮断層画像だけをメモリに直接構築することができる。
8ビットの階調圧縮断層画像D8(x,y,z)は、D8(x,y,z)=(Do(x,y,z)−Lmin)・255/(Lmax−Lmin)という式により生成することができる。ただし、D8(x,y,z)>255の場合は、D8(x,y,z)=255とし、D8(x,y,z)<0の場合は、D8(x,y,z)=0とする。ここで、Lmin=(Dmax−Dmin)・γ+Dmin、Lmax=(Dmax−Dmin)・(1−γ)+Dminである。γは階調圧縮画像のコントラスト調整幅で、0に近いほどコントラストは増大するが輝度は小さくなる。通常は、γ=0.1に設定する。レンダリング像の輝度コントラストは、例えば、カラーマップデータなどの種々の設定で調整することができるので、γは固定値でよい。また、0≦D8(x,y,z)≦255、0≦x≦Sx−1、0≦y≦Sy−1、0≦z≦Sz−1である。また、xy方向の解像度はRxy、z方向の解像度はRzである。
なお、8ビットの階調圧縮断層画像D8(x,y,z)に対しては、図4に示すカラーマップCmap8(v,c)を適用することができる。
上述のように、階調圧縮処理部21は、複数のxy平面画像のうちの所定のxy平面画像の画素の最小値Dmin及び最大値Dmaxを特定し、特定した最大値よりも小さい上限値Lmax及び特定した最小値よりも大きい下限値Lminを算出する。階調圧縮処理部21は、複数のxy平面画像の各画素の画素値の上限値Lmax及び下限値Lminの範囲内を圧縮する。すなわち、階調圧縮処理部21は、上限値Lmax及び下限値Lminの範囲を、例えば、256段階に圧縮し、上限値Lmax以上は255にし、下限値Lmin以下は0にする。
ボクセル構造体生成部23は、ボクセル画像生成部としての機能を有し、RGB値及び不透明度αが定められ、複数のxy平面画像それぞれの各画素に対応するボクセルで構成される3次元ボクセル画像を生成する。より具体的には、ボクセル構造体生成部23は、複数のxy平面画像それぞれの各画素の画素値に対応するカラーマップデータのRGB値及び不透明度を対応付けてRGB値及び不透明度αを設定し、3次元ボクセル画像を生成する。以下、3次元ボクセル画像をボクセル構造体とも称する。
図6は本実施の形態のボクセル構造体の一例を示す模式図である。図6Aは、後述の座標変換前のボクセル構造体を示し、図6Bは、座標変換後のボクセル構造体を示す。まず、座標変換前のボクセル構造体について説明する。ボクセル構造体は、RGB値及び不透明度αの要素で構成されるベクトル値が3次元的に詰まったボリュームデータを格子状に離散化して配置したボクセルの集合である。一つのボクセルには、例えば、DICOM画像Do(x,y,z)の一つの画素が対応する。座標変換前のボクセル構造体をV(x,y,z,c)で表すと、V(x,y,z,c)=Cmap(Do(x,y,z),c)で表すことができる。ここで、0≦x≦Sx−1、0≦y≦Sy−1、0≦z≦Sz−1、0≦c≦3である。上述の式が意味するところは、DICOM画像Do(x,y,z)の画素値にカラーマップCmap(v,c)を適用してボクセル構造体V(x,y,z,c)を生成するということである。
また、ボクセル構造体V(x,y,z,c)は、階調圧縮処理部21により階調圧縮された階調圧縮断層画像D8(x,y,z)からも生成でき、V(x,y,z,c)=Cmap8(D8(x,y,z),c)で表すことができる。この式が意味するところは、階調圧縮断層画像D8(x,y,z)の画素値にカラーマップCmap8(v,c)を適用してボクセル構造体V(x,y,z,c)を生成するということである。
平滑化処理部22は、生成された3次元ボクセル画像に対して平滑化を行う。これは、複数のスライス画像に知覚可能な不規則なパターンが回転によりずれて重なり連結することにより発生するモアレを抑制するためである。平滑化は、3次元ボクセル画像の各ボクセルV(x,y,z,c)のRGB値及び不透明度を、当該ボクセル及び当該ボクセルの26近傍ボクセルのRGB値及び不透明度の平均値に置換することにより行う。
3次元ボクセル画像の各ボクセルV(x,y,z,c)に対して、当該ボクセル及び当該ボクセルの近傍に存在する26個の近傍ボクセルである、V(x−1,y−1,z−1,c)、V(x,y−1,z−1,c)、V(x+1,y−1,z−1,c)、V(x−1,y,z−1,c)、V(x,y,z−1,c)、V(x+1,y,z−1,c)、V(x−1,y+1,z−1,c)、V(x,y+1,z−1,c)、V(x+1,y+1,z−1,c)、V(x−1,y−1,z,c)、V(x,y−1,z,c)、V(x+1,y−1,z,c)、V(x−1,y,z,c)、V(x,y,z,c)、V(x+1,y,z,c)、V(x−1,y+1,z,c)、V(x,y+1,z,c)、V(x+1,y+1,z,c)、V(x−1,y−1,z+1,c)、V(x,y−1,z+1,c)、V(x+1,y−1,z+1,c)、V(x−1,y,z+1,c)、V(x,y,z+1,c)、V(x+1,y,z+1,c)、V(x−1,y+1,z+1,c)、V(x,y+1,z+1,c)、V(x+1,y+1,z+1,c)の平均値で0≦c≦3の値を置換する。即ち、ボクセルV(x,y,z,c)に対して平滑化されたボクセルをV‘(x,y,z,c)とすると、平滑化されたボクセルV‘(x,y,z,c)は、式(1)で算出することができる。
式(1)では0≦c≦3の4つの値を平滑化しているが、RGB値(c=0、1、2)に対しては平滑化を行わず、不透明度(c=3)の値のみを平滑化するようにしてもよい。そうすると、処理負荷が1/4に削減され、平滑化に伴う画像のボケが軽減される。
このようにして、3次元ボクセルV(x,y,z,c)に対してxyz方向の26近傍平均値で等方性に平滑化処理を行うことにより、複数のスライス画像に知覚可能な不規則なパターンが回転によりずれて重なり連結することにより発生するモアレを抑制することができる。尚、以降の説明では、平滑化した3次元ボクセルV‘(x,y,z,c)を改めてV(x,y,z,c)と表す。
座標変換処理部24は、変換後ボクセル画像生成部としての機能を有し、生成した3次元ボクセル画像に対して、入力部10で取得した座標変換パラメータを用いて所定の座標変換を行って変換後ボクセル画像を生成する。すなわち、座標変換処理部24は、ボクセル構造体V(x,y,z,c)に対して、所定の座標変換処理を施して、変換後のボクセル構造体を生成する。変換後のボクセル構造体をV′(x,y,z′,c)と表す。変換後のボクセル構造体V′(x,y,z′,c)は、V′(x,y,z′,c)=Matrix(4×4)・V(x,y,z,c)で表すことができる。ここで、0≦x≦Sx−1、0≦y≦Sy−1、0≦z′≦Sz′−1、0≦c≦3である。なお、z′は、z軸に対して解像度をxy軸と一致させるような補正を施したもので、z′=z・Rxy/Rz、Sz′=Sz・Rxy/Rzである。Matrix(4×4)は、座標変換を施すための変換行列であり、具体的な変換式は後述する。
図6Aに示すように、レンダリング像が生成される投影面の向きと、ボクセル構造体V(x,y,z,c)のz軸方向が一致していないと、後述のレイキャスティング処理が複雑になる。そこで、図6Bに示すように、ボクセル構造体V(x,y,z,c)のxyz軸を回転させて、例えば、座標変換後のz′軸が投影面に対して垂直方向にすることにより、レイキャスティング処理を簡単にすることができる。
図7は本実施の形態のレイキャスティング装置100による座標変換処理の一例を示す説明図である。図7に示すように、変換後のボクセル構造体V′(x,y,z′,c)は、変換前のボクセル構造体をV(x,y,z,c)に対して、ROIによるクリッピングを行い、関心領域を設定し、その後座標変換を行うことにより求めることができる。ROIクリッピング処理部30は、x軸方向のROIとして、Xs−Xeを設定し、y軸方向のROIとして、Ys−Yeを設定し、z軸方向のROIとして、Zs−Zeを設定する。ここで、0≦Xs<Xe≦Sx−1、0≦Ys<Ye≦Sy−1、0≦Zs<Ze≦Sz−1である。変換前のボクセル構造体において、関心領域以外のボクセルRGB値および不透明度は全て0であるとみなして、座標変換処理を行う。
座標変換は、例えば、スケーリング、z方向変倍処理、オフセット、回転、透視変換の順番で行うことができるが、4×4の変換行列で定義可能な範囲であれば、各処理の順番は、図7の例に限定されない。なお、後述の逆変換における各処理の順番は、座標変換での各処理の順番と逆の順番とし、前記変換行列の逆行列を施すことになる。
スケーリングは、xyz軸方向で同一の拡大縮小倍率Scaleを用いる。
z方向変倍処理は、z方向の画素の物理的な間隔をxy方向の画素の物理的な間隔に合わせるための処理である。z方向変倍処理では、z方向変倍率Scz(=Rxy/Rz)を用いる。
オフセットは、x軸方向、y軸方向、z軸方向に平行移動させるための処理である。オフセットでは、x軸方向のオフセットXoff、y軸方向のオフセットYoff、z軸方向のオフセットZoffを用いる。
回転は、x軸回り、y軸回り、z軸回りに回転させるための処理である。回転では、x軸中心の回転角Rx、y軸中心の回転角Ry、z軸中心の回転角Rz(角度の単位は全てラジアン)を用いる。
透視変換は、いわゆる内視鏡モードで画像を表示させるための処理である。透視変換では、注視点(原点、なお、オフセットがある場合、オフセット後の原点)からz軸方向の視点までの距離Distを用いる。なお、平行投影の場合には、Dist=0と設定する。
上述のクリッピング、座標変換により、変換後のボクセル構造体V′(x,y,z′,c)の値が決定される。なお、スケーリング、z方向変倍処理、オフセット、回転、透視変換の各処理は、変換行列Matrix(4×4)に纏めることができる。
本実施の形態では、座標変換サブサンプル・オフセットを加えながら、座標変換処理及び後述のレイキャスティング処理を複数回(少なくとも2回)行う。座標変換の際には、前述のx軸方向、y軸方向、z軸方向に平行移動させるオフセットに加え、座標変換サブサンプル・オフセット(請求項記載の座標オフセット値)も用いられる。前述のx軸方向、y軸方向、z軸方向に平行移動させるオフセットは、数画素単位に視覚的に判別可能なレベルに被写体を移動させるために用いるマクロな移動であるのに対し、座標変換サブサンプル・オフセットは、最大1画素の範囲で視覚的に判別不可能なレベルに被写体を微小に移動させるために用いるミクロな移動で、被写体のエッジ部に発生する画素単位の階段状のギザ(ジャギー、エリアシングと呼ばれる)を軽減するために行う。座標変換サブサンプル・オフセットは、x軸方向の値をdx、y軸方向の値をdy、z軸方向の値をdzで表すことができる。
サブサンプル・オフセット設定部28は、座標変換サブサンプル・オフセットの初期値(例えば、dx=dy=dz=0)を座標変換の都度、既に設定された座標変換サブサンプル・オフセットの値と異なる値に更新して座標変換サブサンプル・オフセット値を設定する。座標変換の回数をL(>1)とすると、座標変換の都度、dx=dx+1/L、dy=dy+1/L、dz=dz+1/Lという式で座標変換サブサンプル・オフセットを更新することができる。
座標変換処理部24は、複数画像生成制御部としての機能も有し、ボクセル構造体生成部23で生成された3次元ボクセル画像のボクセルの座標値に所定の座標変換サブサンプル・オフセットを加えて、入力部10で取得した座標変換パラメータを用いて所定の座標変換を複数回(L回)行って、複数の変換後ボクセル画像を生成する。例えば、座標変換の回数を2回(L=2)とすると、1回目の座標変換では、座標変換サブサンプル・オフセットの値はdx=dy=dz=0(初期値)となり、2回目の座標変換(座標変換サブサンプル・オフセットの値の更新の1回目)では、dx=dy=dz=0.5となる。これにより、背景との境界や画像上のコントラストがはっきりしている箇所等のエッジ部に現れるジャギー(階段状の段差やギザギザなど)の発生を抑制することができる。
ただし、座標変換を複数回(L回)同時に実行して複数の変換後ボクセル画像を一度に生成する方法は、複数の変換後ボクセル画像(3次元の配列データ)を保持するための巨大なメモリ容量を必要とし、処理速度の大幅な低下を招くため現実的ではない。そこで、座標変換は1回だけ実行して、単一の変換後ボクセル画像を生成し、後述のレイキャスティング処理を行って暫定レンダリング画像の生成が終了した後に、座標変換サブサンプル・オフセットを既に設定された座標変換サブサンプル・オフセットの値と異なる値に更新した上で2回目以降の座標変換を実行し、再度、変換後ボクセル画像を生成し直す方法をとる。暫定レンダリング画像は2次元の配列データであるため、複数個保持してもメモリを圧迫することはないが、暫定レンダリング画像が生成される毎に、平均化された画素値で更新する方法をとれば、複数個の暫定レンダリング画像を保持することなく、最終的なレンダリング画像を生成することもできる。
3次元ボクセル画像のボクセルの座標間隔を1で表すと、座標変換サブサンプル・オフセットdx、dy、dzは、−0.5≦dx,dy,dz≦0.5とすることができる。すなわち、座標変換処理部24は、3次元ボクセル画像のボクセルの座標値に当該ボクセルの座標間隔の2分の1以下の座標変換サブサンプル・オフセットを加えることができる。座標変換サブサンプル・オフセットが、1画素の範囲内であるので、座標変換による画像のぼけの発生を抑制することができる。
座標変換サブサンプル・オフセットは、x軸方向、y軸方向及びz軸方向の全ての方向に加えることができるが、これに限定されない。座標変換処理部24は、ボクセル構造体生成部23で生成された3次元ボクセル画像のボクセルの座標値の少なくとも一つの座標値に座標変換サブサンプル・オフセットを加えて、所定の座標変換を行って、変換後ボクセル画像を生成してもよい。例えば、座標変換サブサンプル・オフセットをz軸方向にだけ加える構成でもよい。特にz軸方向は、xy軸方向に比べて単位距離あたりの画素数が少ないので、座標変換サブサンプル・オフセットをz軸方向に加えるだけでも、ジャギーの発生を抑制することができる。
探索制御マスク生成部26は、変換後ボクセル構造体V′(x,y,z′,c)のxy座標毎に、変換後ボクセル構造体V′(x,y,z′,c)のボクセルの不透明度αが0(透明)でない視線上の最小値及び最大値を特定する。
図8は本実施の形態のレイキャスティング装置100による探索制御マスクデータ生成処理の一例を示す説明図である。図8では、変換後のボクセル構造体V′(x,y,z′,c)をxz′平面から見た場合を示す。投影面はxy平面となる。探索制御マスク生成部26は、探索制御マスクデータM(x,y,s)を生成する。ここで、s=0(有効なボクセルの範囲の開始点)又は1(有効なボクセルの範囲の終了点)である。
図8に示すように、2次元座標(x,y)毎に、z軸方向に探索対象とする有効なボクセルの範囲を設定する。有効なボクセルとは、不透明度αが0でない値を有するボクセルである。不透明度αが0とは、透明であるということであり、レンダリング像において当該ボクセルは計算対象から外され表示されない。
0≦x≦Sx−1、0≦y≦Sy−1の座標(x,y)毎に、z′=0からz′=Sz′−1に向かってz′を一つずつ増やして、最初にV′(x,y,z1,3)>0を満たすz1を探索する。また、同じ座標(x,y)について、z′=Sz′−1からz′=0に向かってz′を一つずつ減らして、最初にV′(x,y,z2,3)>0を満たすz2を探索する。すなわち、z′が、少なくともz1とz2では、V′(x,y,z′,3)>0を満たし、ボクセルの不透明度αは0でないが、z′がz1とz2の間では、V′(x,y,z′,3)=0となることもある。即ち、z1は有効なボクセルが存在するz′の最小値であり、z2は最大値となる。探索制御マスクデータM(x,y,s)は、M(x,y,0)=z1となり、M(x,y,1)=z2となる。
なお、z1=z2、あるいは、z1、z2が見つからない場合、M(x,y,0)=M(x,y,1)=−1とする。
探索制御マスクデータM(x,y,s)を生成することにより、有効でないボクセルを除外して、後続のレイキャスティング処理を行うことができるので、レイキャスティング処理の負荷を軽減することができ、ボリュームレンダリング処理を高速化することができる。
レイキャスティング処理部25は、暫定レンダリング画像生成部としての機能を有し、座標変換により生成された変換後のボクセル構造体V′(x,y,z′,c)に対してレイキャスティング法を用いて暫定レンダリング画像を生成する。すなわち、便宜上、暫定レンダリング画像は、複数回の座標変換及びレイキャスティング処理によって、その都度生成されるレンダリング画像をいう。
レイキャスティング処理部25は、レンダリング画像生成部としての機能を有し、生成した複数の暫定レンダリング画像に基づいてレンダリング画像を生成する。例えば、レイキャスティング処理部25は、複数の暫定レンダリング画像の対応する各画素(各暫定レンダリング画像においてxy座標が同じ各画素)の画素値を平均化してレンダリング画像を生成することができる。すなわち、複数回の座標変換とレイキャスティング処理によって生成される複数の暫定レンダリング画像を平均化(具体的には、各暫定レンダリング画像の対応する各画素の画素値の平均化)することによって、最終的な単一のレンダリング画像を生成する。この時、後述する図12のステップS28のように、暫定レンダリング画像が生成される毎に、保持されているレンダリング画像(初期状態は全ての画素の値を0に設定)と平均化しながら更新する方法をとることもでき、生成される複数の暫定レンダリング画像を全て保持する必要はない。
より具体的には、暫定レンダリング画像は、以下のようにして生成することができる。すなわち、レイキャスティング処理部25は、所定の視点から所定の透過強度を有する仮想光線を変換後のボクセル構造体V′(x,y,z′,c)に向かってz′方向に照射したときに、z′軸上のボクセル毎に当該ボクセルの不透明度αに基づく仮想光線の吸収・減衰度を考慮しながらボクセル通過後の強度を算出し、透過強度が所定の下限以下になる最深点のボクセルを決定する。そして、最深点のボクセルより視点方向に仮想光線が通過した各ボクセルを逆に辿りながら、各ボクセルのRGB値及び不透明度αを基にRGB値を、当該視線が投影面と交差する画素の画素値として暫定レンダリング画像を生成する。仮想光線を変換後のボクセル構造体V′(x,y,z′,c)に向かってz′方向に照射し、最深点のボクセルを決定する過程で、各ボクセルのRGB値及び不透明度α並びに仮想光線の透過強度の積を累積加算することにより、投影面と交差する画素の画素値を同時に算出する方法もとれる。本願では後者の方法に基づいて以下説明する。
図9は本実施の形態のレイキャスティング装置100による平行投影の場合のレイキャスティング処理の一例を示す説明図である。図9では、変換後のボクセル構造体V′(x,y,z′,c)を3次元的にボクセルデータが詰まった立方体として図示している。変換後のボクセル構造体V′(x,y,z′,c)のxy軸に平行な投影面(レンダリング像)が、変換後のボクセル構造体V′(x,y,z′,c)から所要距離だけ離隔して配置されているとする。図9のように、視点が無限遠点に位置する場合が一般的に使用される平行投影で(本来はDist=∞であるが、本願ではDist=0と設定)、視点からボクセル構造体内部に向かう全ての視線がz′軸と平行になる。レイキャスティング処理(ボリュームレンダリング)では、不透明度αに基づいて半透明表示(αブレンディング)を行うことによって、変換後のボクセル構造体V′(x,y,z′,c)の内部を可視化する。すなわち、可視化は、変換後のボクセル構造体V′(x,y,z′,c)のボクセルが有するボクセル値(RGB値及び不透明度α)によって実現される。
図10は本実施の形態のレイキャスティング装置100による透視投影の場合のレイキャスティング処理の一例を示す説明図である。図10のように視点が投影面に比較的接近している場合(本願ではDist>0)が透視投影で、内視鏡表示の際は、投影面や視点がボクセル構造体V′(x,y,z′,c)の内部に没入することもある。図9の場合と同様に、レイキャスティング処理(ボリュームレンダリング)では、不透明度αに基づいて半透明表示(αブレンディング)を行うことによって、変換後のボクセル構造体V′(x,y,z′,c)の内部を可視化する。すなわち、可視化は、変換後のボクセル構造体V′(x,y,z′,c)のボクセルが有するボクセル値(RGB値及び不透明度α)によって実現される。
図9及び図10に示すように、視点から視線を変換後のボクセル構造体V′(x,y,z′,c)の内部に伸ばし、視線上にあるサンプリング点(ボクセル)において当該ボクセルのRGB値と不透明度αに基づいてRGB輝度値を視線に沿って累積計算し、累積計算した値を、当該視線が投影面と交差する位置のピクセル(画素の画素値)として暫定レンダリング像を生成する。この際に、前述の探索制御マスクM(x,y,0)とM(x,y,1)との間のz′について累積計算を行う。レイキャスティング処理の詳細は後述する。
次に、本実施の形態のレイキャスティング装置100の動作について説明する。
図11及び図12は本実施の形態のレイキャスティング装置100によるレイキャスティング処理の手順の一例を示すフローチャートである。以下では、便宜上、処理の主体を画像処理部20として説明する。画像処理部20は、DICOM画像の画像データを取得し(S11)、カラーマップデータを取得する(S12)。なお、カラーマップデータは、図3、図4で例示したものである。
画像処理部20は、座標変換パラメータを取得し(S13)、xyz方向のROI値を取得する(S14)。なお、座標変換パラメータ、ROI値は、図7で例示したものである。画像処理部20は、DICOM画像の階調圧縮処理を行い(S15)、階調圧縮断層画像D8に対してカラーマップ定義を行う(S16)。カラーマップ定義は、階調圧縮断層画像D8の画素値に対して、RGB値及び不透明度αを定義する。なお、ステップS15の処理は必須ではなく、ステップS15の処理を実施しない場合には、DICOM画像に対してカラーマップ定義を行えばよい。ただし、カラーマップはCT画像の場合、見たい部位ごとに汎用的に定義することが可能で、与えられたDICOM画像に依存して定義されるものではないため、ステップS16の処理を省略し、あらかじめ定義されたカラーマップを流用することもできる。
画像処理部20は、ボクセル構造体V(x,y,z,c)を生成し(S17)、生成されたボクセル構造体V(x,y,z,c)に対して平滑化処理を行う(S18)。なお、ステップS18の処理は必須ではなく、不透明度αの値に対してのみ平滑化処理を行ってもよい。画像処理部20は、陰影計算を行うか否かを判定する(S19)。陰影計算はオプションとすることができる。陰影計算を行う場合(S19でYES)、画像処理部20は、陰影計算(ボクセルの陰影値の算出)を行う(S20)。陰影計算を行わない場合(S19でNO)、画像処理部20は、後述のステップS21の処理を行う。
ボクセルの陰影値の算出は、以下のようにすることができる。すなわち、画像処理部20は、ボクセル構造体のボクセルの不透明度に関する勾配ベクトルを算出し、算出した勾配ベクトル及び所定の光源ベクトルに基づいてボクセルの陰影値を算出する。
より具体的には、画像処理部20は、ボクセル構造体のボクセルの不透明度と、当該ボクセルの近傍に位置する複数の近傍ボクセルそれぞれの不透明度との差分を算出する。画像処理部20は、ボクセルと近傍ボクセルとの距離並びにボクセル及び近傍ボクセルそれぞれの不透明度の差分に基づいてボクセルの勾配ベクトルを算出する。この場合、近傍ボクセルとの距離を用いるにあたり、XY方向とZ方向の解像度が異なることを考慮し、画像処理部20は、勾配ベクトルのz軸方向の成分をz軸方向の変倍率Rxy/Rzで補正することが必要である。
光源ベクトル(Lx,Ly,Lz)は、例えば、(Lx,Ly,Lz)=(0.57735,0.57735,0.57735)の如く、平行光源で単位ベクトルとして指定する。また、環境光成分をAbとする。ここで、0≦Ab≦1である。例えば、Ab=0.2とする。
0≦x≦Sx−1、0≦y≦Sy−1、0≦z≦Sz−1の範囲のボクセル(x,y,z)の勾配ベクトル(Gx,Gy,Gz)は、式(2)、(3)、(4)で算出することができる。本実施の形態では、近傍ボクセルとして26近傍のボクセル値と中央のボクセルのボクセル値との差分により高精度に勾配ベクトルを算出することができる。近傍ボクセルは26近傍に限らず、例えば6近傍(xyz各座標軸方向において2近傍)としてもよい。勾配ベクトルを算出する際に、ボクセルは座標変換前でz方向変倍処理が行われていないため、xy方向とz方向とでは解像度が異なる点に留意し、勾配ベクトルのz方向成分Gzの変倍補正(Rxy/Rzの乗算)を行う。
G={Gx2 +Gy2 +Gz2 }1/2 とする(Gxの2乗とGyの2乗とGzの2乗との和の平方根をGとする)。G≧1の場合、陰影値S(x,y,z)は、拡散反射成分のみ算出し、式(5)で与えられる。これにより、視線ベクトルを変更してボクセルを回転させると、立体感を表現することができる。なお、視線を変えても、座標の回転処理を行う前であり、勾配ベクトルは変化しないので、鏡面反射成分は加えない。
G<1の場合、あるいは、x=0またはx=Sx−1またはy=0またはy=Sy−1またはz=0またはz=Sz−1(すなわち、境界部のボクセル)の場合、陰影値S(x,y,z)として0(所定値)を与える。
画像処理部20は、算出した陰影値に基づいてボクセルのRGB値を補正する。陰影計算後のボクセルをV′(x,y,z,c)で表すと、ボクセルのRGB値の補正は、0≦c≦2の範囲で式(6)を適用することにより行うことができる。すなわち、ボクセル構造体のc=0,1,2の成分を改変する。なお、陰影計算を行わない場合には、式(6)において、陰影値S(x,y,z)は、1となる。
座標変換は一般に実数演算で行われるが、座標変換後の座標値はボクセル座標という離散的な値に整数化され、この過程で丸め誤差が累積し、周期的なパターンが生成される。この周期的なパターンは単一のスライス画像では肉眼では認識できない微弱なものであるが、本実施の形態のように複数のスライス画像が積層された画像を合成しようとすると、たとえ各スライス画像が座標変換によりずれていても、パターンの周期性の位相条件を満たせば干渉縞が生成され、肉眼的に顕著なモアレとして認識される。この丸め誤差は、陰影計算時の勾配ベクトル算出により強調される。本実施の形態では、座標変換の前に陰影計算を行うので、モアレの発生を抑制することができる。
画像処理部20は、座標変換サブサンプル・オフセットを初期化(dx=dy=dz=0)し(S21)、レンダリング画像Image(x,y,c)を初期化する(S22)。レンダリング画像Image(x,y,c)の初期化は、0≦x≦Sx−1、0≦y≦Sy−1、c=0(R)、1(G)、2(B)のすべての値を0にする。画像処理部20は、繰り返しの所定回数L(>1)に対して繰り返し回数Nを1にセットする(S23)。
画像処理部20は、ボクセル構造体V(x,y,z,c)に対して座標変換処理を行い(S24)、変換後ボクセル構造体V′(x,y,z′,c)を生成する(S25)。なお、座標変換処理の詳細は後述する。
画像処理部20は、探索制御マスクデータM(x,y,s)を生成し(S26)、レイキャスティング処理を行い(S27)、暫定レンダリング画像を生成しレンダリング画像Image(x,y,c)を更新する(S28)。ここで、0≦Image(x,y,c)≦255、c=0(R)、c=1(G)、c=2(B)である。レンダリング画像Image(x,y,c)の更新は、ステップS24からS27までの1回の処理によって、1個の暫定レンダリング画像を生成し、座標変換サブサンプル・オフセットを既に設定された値と異なる値に更新しながら当該ステップS24からS27までの処理を所定回数Lだけ繰り返すことによって生成したL個の暫定レンダリング画像の各画素の画素値を平均化して最終的な一つのレンダリング画像を生成するための処理である。ただし、レンダリング画像Image(x,y,c)の更新を行った後は、暫定レンダリング画像は不要になるため、L個の暫定レンダリング画像を全て保持する必要はない。
複数回の座標変換の都度、座標変換サブサンプル・オフセットを更新して座標変換とレイキャスティング処理とが繰り返されることにより、モアレの発生を抑制することができる。一方、別の実施形態として、座標変換だけを複数回繰り返し行った後に、生成される複数の変換後ボクセル構造体V′(x,y,z′,c)の各ボクセルを平均化し、平均化された変換後ボクセル構造体V′(x,y,z′,c)に基づいてレイキャスティング処理を1回だけ実施する方法が考えられる。この方法の方が前述の実施形態より処理負荷が格段に小さいが、この場合では、ジャギーの発生を抑制することができるが、ストライプ・格子状のモアレが発生する。従って、処理負荷は増大するが、座標変換サブサンプル・オフセットを含む座標変換とレイキャスティング(レンダリング)を複数回行うことにより、ジャギーの発生とストライプ・格子状のモアレの発生を抑制することができる。なお、レイキャスティング処理の詳細は後述する。
画像処理部20は、繰り返し回数Nが所定回数Lであるか否かを判定する(S29)。繰り返し回数Nが所定回数Lでない場合(S29でNO)、画像処理部20は、繰り返し回数Nに1を加算し(S30)、座標変換サブサンプル・オフセットを更新し(S31)、ステップS24以降の処理を続ける。座標変換サブサンプル・オフセットの更新は、dx=dx+1/L、dy=dy+1/L、dz=dz+1/Lという式により行うことができる。ここで、Lは所定回数である。繰り返し回数Nが所定回数Lである場合(S29でYES)、画像処理部20は、処理を終了する。
上述のように、陰影計算を行う場合の本実施の形態の3次元ボクセル画像のデータは、z方向に沿って所定間隔で撮像された複数のxy平面画像のそれぞれの各画素に対応するボクセルのボクセルデータであって、前記xy平面画像の画素の値に対してRGB値及び不透明度が定められ、前記複数のxy平面画像それぞれの各画素に対応するRGB値及び不透明度を有するボクセルで構成され、前記ボクセルの不透明度に関する勾配ベクトル及び所定の光源ベクトルに基づく前記ボクセルの陰影値によって補正されたRGB値を有するデータ構造を有し、前記3次元ボクセル画像に対して所定の座標変換を行って変換後ボクセル画像を生成する処理と、前記変換後ボクセル画像に対してレイキャスティング法を用いて暫定レンダリング画像を生成する処理とを複数回行い、各回において前記座標変換を行う際、前記3次元ボクセル画像のボクセルの座標値の少なくとも一つの座標値に所定の座標オフセット値を加えるとともに、各回毎に前記座標オフセット値を変更するようにして、生成した複数の暫定レンダリング画像に基づいてレンダリング画像を生成する処理とを実行するのに用いられる。
図13及び図14は本実施の形態のレイキャスティング装置100による座標変換処理の手順の一例を示すフローチャートである。即ち、画像処理部20が、変換前のボクセル構造体V(x,y,z,c)に変換行列Matrix(4×4)を乗算して変換後のボクセル構造体V′(x,y,z′,c)を生成する方法について以下説明する。V′(x,y,z′,c)=Matrix(4×4)・V(x,y,z,c)となる式において、未知数であるV′(x,y,z′,c)の各要素は、既知数であるV(x,y,z,c)の各要素と1対1に対応しないため、この計算式に基づいて、変換前のボクセル構造体V(x,y,z,c)に変換行列Matrix(4×4)を乗算しても、未知数であるV′(x,y,z′,c)の全ての要素を算出することはできない。そこで、V(x,y,z,c)=Matrix(4×4)-1・V′(x,y,z′,c)のように未知数であるV′(x,y,z′,c)の要素に対応する既知数であるV(x,y,z,c)の要素を逆算する方法をとる。ここで、変換前のボクセル構造体V(x,y,z,c)の座標値(x,y,z)、及び変換後のボクセル構造体V′(x,y,z′,c)の座標値(x,y,z′)は整数値である。変換後のボクセル構造体V′(x,y,z′,c)の座標値(x,y,z′)(整数値)に対応する変換前のボクセル構造体V(x,y,z,c)の実数の座標値(xr,yr,zr)を以下のようにして算出する。
画像処理部20は、座標変換サブサンプル・オフセットdx、dy、dzを用いて、変換後のボクセル構造体V′(x,y,z′,c)の座標値(x,y,z′)(整数値)を実数値(xx,yy,zz)に変換する(S101)。整数値(x,y,z′)から実数値(xx,yy,zz)の変換は、式(7)、(8)及び(9)により行うことができる。ここで、座標変換サブサンプル・オフセットdx、dy、dzは、式(10)の関係を満たす。
画像処理部20は、座標値を実数値に変換したボクセル構造体V′(xx,yy,zz,c)に変換行列Matrix(4×4)の逆行列を乗算して変換前のボクセル構造体V(x,y,z,c)に対応する座標値の実数値(xr,yr,zr)を算出する(S102)。
ステップS101、S102の処理は、座標値算出部27が行うことができる。すなわち、座標値算出部27は、変換後ボクセル構造体のボクセルのxyz座標に対して所定の座標変換の逆変換を行って当該ボクセルのxyz座標の実数値を算出する。なお、ステップS102の処理は、以下のようにして行うことができる。
まず、透視変換の距離Dist>0の場合、式(11)、(12)、(13)のように透視変換を行い、変換後の(xx′,yy′,zz′)を(xx,yy,zz)とする。
なお、式(11)、(12)、(13)の意味は、距離Distが小さいほど、近くが拡大され、遠くが縮小される、いわゆる遠近感が強調され、距離Distが大きいほど遠近感がなくなり、距離Distが∞に設定された状態(本願ではDist=0に設定)が平行投影である。
次に、z軸中心の回転、y軸中心の回転、x軸中心の回転の順(座標変換での順番と逆の順番)に逆方向の回転を順次行う。すなわち、式(14)、(15)による回転を行い、(xx′,yy′)を(xx,yy)に置換する。次に、式(16)、(17)による回転を行い、(zz′,xx′)を(zz,xx)に置換する。そして、式(18)、(19)による回転を行い、(yy′,zz′)を(yy,zz)に置換する。
スケーリング、z方向変倍処理、オフセット(xyz方向同時)を同時に行い、式(20)、(21)、(22)により、変換前のボクセル構造体V(x,y,z,c)に対応する座標値の実数値(xr,yr,zr)を得る。
画像処理部20は、算出した座標値(xr,yr,zr)を整数値(xi,yi,zi)と小数点以下の端数(wx,wy,wz)に分解する(S103)。より具体的には、補間処理部29は、ボクセルのxyz座標の実数値と、当該実数値の小数点以下を切り捨てた整数値との差分(端数)を特定する。すなわち、更新した座標値(xr,yr,zr)を式(23)、(24)、(25)のように分解する。ここで、0≦wx、wy、wz≦1とする。
ROIクリッピング処理部30は、ボリュームレンダリング処理の対象領域を画定するxyz座標、具体的には図7に記載のXs,Xe,Ys,Ye,Zs,Zeを設定する。画像処理部20は、変換前のボクセル構造体V(x,y,z,c)に対応する座標値の整数値(xi,yi,zi)が、クリッピング領域内にあるか否かを判定する(S104)。ここで、条件1として、xi<Xsまたはxi>Xeまたはyi<Ysまたはyi>Yeまたはzi<Zsまたはzi>Zeの場合には、座標値の整数値(xi,yi,zi)が、更新したクリッピング領域内にないと判定(S104でNO)、画像処理部20は、ボクセル値を削除し(S105)、後述のステップS110の処理を行う。より具体的には、画像処理部20は、変換後のボクセル構造体V′(x,y,z′,c)=0とする。すなわち、RGB値及び不透明度αを0とする。
座標値の整数値(xi,yi,zi)が、クリッピング領域内にある場合(S104でYES)、すなわち前述の条件1を充足しない場合、画像処理部20は、変換前のボクセル構造体に対応する座標値の整数値(xi+1,yi+1,zi+1)がクリッピング領域内にあるか否かを判定する(S106)。条件2として、xi+1>Xeまたはyi+1>Yeまたはzi+1>Zeの場合には、座標値の整数値(xi+1,yi+1,zi+1)のいずれかが、クリッピング領域内にないと判定し(S106でNO)、画像処理部20は、補間せずに(S107)、後述のステップS110の処理を行う。ここで、補間しないとは、変換後のボクセル構造体V′(x,y,z′,c)=V(xi,yi,zi,c)とし、座標値の整数値(xi,yi,zi)をそのまま採用することである。すなわち、RGB値及び不透明度αを変換前のボクセル構造体の座標値(xi,yi,zi)に対応する値とする。
座標値の整数値(xi+1,yi+1,zi+1)がクリッピング領域内にある場合(S106でYES)、すなわち、座標値の整数値(xi,yi,zi)および(xi+1,yi+1,zi+1)が、クリッピング領域内にある場合、画像処理部20は、座標値の整数値(xi,yi,zi)及び座標値の整数値(xi,yi,zi)に1を加算した8組の整数値を座標値とする変換前のボクセル構造体のボクセル値に重み付け係数を乗算し、重み付け係数を乗算したボクセル値を加算してボクセル値を補間し(S108)、補間したボクセル値を変換後のボクセル構造体V′(x,y,z′,c)のボクセル値とし(S109)、後述のステップS110の処理を0≦c≦3の各値に対して行う。これにより、変換後のボクセル構造体V′(x,y,z′,c)の値を得る。
すなわち、補間処理部29は、算出したボクセルのxyz座標の実数値の近傍の整数値をxyz座標とする変換前のボクセル構造体の複数のボクセルを特定し、特定した変換前のボクセル構造体の複数のボクセルのRGB値及び不透明度に基づいて変換後ボクセル構造体のボクセルのRGB値及び不透明度を算出する。
補間処理部29は、特定した変換前のボクセル構造体の複数のボクセルのRGB値及び不透明度に、特定した座標値の実数値と近傍の整数値との差分(端数)に基づく重み付け係数を乗算して変換後ボクセル構造体のボクセルのRGB値及び不透明度を算出する。
ステップS108、S109の処理は、式(26)で表すことができる。
図15は本実施の形態のレイキャスティング装置100による補間処理の一例を示す模式図である。図15において、座標(xr,yr,zr)は、変換後のボクセル構造体V′(x,y,z′,c)に対応する変換前のボクセル構造体V(x,y,z,c)の実数値の座標値である。図15では、実数値(xr,yr,zr)が、整数値(xi,yi,zi)と端数(wx,wy,wz)とに分解されていることが分かる。そして、座標値(xr,yr,zr)の周りには、8組の整数値(xi,yi,zi)、(xi+1,yi,zi)、(xi,yi+1,zi)、(xi+1,yi+1,zi)、(xi,yi,zi+1)、(xi+1,yi,zi+1)、(xi,yi+1,zi+1)、(xi+1,yi+1,zi+1)が存在している。
式(26)、図15から分かるように、ボクセル値の補間は、実数値の座標値と整数値の座標値との端数が小さいほど、当該整数値の座標値におけるボクセル構造体のボクセル値に大きな重み付け係数が乗算される。
画像処理部20は、すべてのボクセル構造体V′(x,y,z′,c)のボクセル値を決定したか否かを判定し(S110)、すべてのボクセル構造体V′(x,y,z′,c)のボクセル値を決定していない場合(S110でNO)、ステップS103以降の処理を続け、すべてのボクセル構造体V′(x,y,z′,c)のボクセル値を決定した場合(S110でYES)、処理を終了する。
図16及び図17は本実施の形態のレイキャスティング装置100によるレイキャスティング処理の手順の一例を示すフローチャートである。画像処理部20は、色計算のための光源Light(c)を設定する(S121)。ここで、0≦Light(c)≦255、c=0(R)、1(G)、2(B)である。画像処理部20は、仮想光線の透過強度Trans=1.0に設定し、累積輝度値Energy(c)=0.0に設定する(S122)。
画像処理部20は、z′=M(x,y,1)とする(S123)。すなわち、z′の値を探索制御マスクデータの最大値z2に設定する。画像処理部20は、z′の値が0より小さいか否かを判定し(S124)、z′<0でない場合(S124でNO)、不透明度α=V′(x,y,z′,3)/255とする(S125)。当該式により、不透明度αは、0≦α≦1となる。z′<0である場合(S124でYES)、画像処理部20は、後述のステップS132の処理を行う。画像処理部20は、不透明度αが0であるか否かを判定し(S126)、不透明度α=0の場合(S126でYES)、後述のステップS130の処理を行う。
不透明度αが0でない場合(S126でNO)、すなわち、不透明度α>0の場合、画像処理部20は、累積輝度値の更新を行う(S127)。すなわち、Energy(c)=Energy(c)+Trans・α・V′(x,y,z′,c)/255という式により0≦c≦2の3成分の累積輝度値の更新を行う。画像処理部20は、透過強度の更新を行う(S128)。すなわち、Trans=Trans・(1−α)という式に依り透過強度の更新を行う。
画像処理部20は、不透明度α=1.0であるか否か、または透過強度Trans<所定値であるか否を判定する(S129)。ここで、所定値は、0又は0に近い値(例えば、0.001など)であればよい。不透明度α=1.0でなく、かつ透過強度Trans<所定値でない場合(S129でNO)、画像処理部20は、z′=z′−1とし(S130)、z′の値がM(x,y,0)より小さいか否かを判定する(S131)。z′<M(x,y,0)である場合(S131でYES)、画像処理部20は、2次元座標(x,y)におけるRGB値を決定する(S132)。投影面の2次元座標(x,y)におけるRGB値は、Image(x,y,c)=Image(x,y,c)+k・Energy(c)・Light(c)/Lで計算することができる。ここで、kは強度倍率であり、RGB値を補正することができる。kの値は、例えば、1.0とすることができるが、これに限定されない。Light(c)は光源のRGB値である。Lは座標変換処理及びレイキャスティング処理の回数(所定回数)である。
不透明度α=1.0であるか、又は透過強度Trans<所定値である場合(S129でYES)、画像処理部20は、ステップS130、S131の処理を行うことなく、ステップS132の処理を行う。また、z′<M(x,y,0)でない場合(S131でNO)、画像処理部20は、ステップS125以降の処理を行う。
画像処理部20は、すべての2次元座標のRGB値が決定されたか否かを判定し(S133)、すべての2次元座標のRGB値が決定されていない場合(S133でNO)、ステップS122以降の処理を行う。すべての2次元座標のRGB値が決定された場合(S133でYES)、画像処理部20は、処理を終了する。
上述のように、座標変換の都度、レイキャスティング処理部25は、視線上の最小値z1と最大値z2との範囲内でボクセル毎に当該ボクセルのRGB値(V′(x,y,z′,c))、不透明度α(V′(x,y,z′,3))、及び仮想光線の透過強度Transの積により累積輝度値Energy(c)を累積加算(更新)した値に基づいて算出されるRGB値を、視線が投影面と交差する画素の画素値として暫定レンダリング画像を生成する。レイキャスティング処理部25は、座標変換の都度、生成した暫定レンダリング画像のRGB値を平均化して最終的なレンダリング画像を生成する。
レイキャスティング処理部25は、視線上のボクセルが最小値z1と最大値z2との範囲外である場合、あるいは最小値z1と最大値z2とが同一値である場合、あるいは最小値z1又は最大値z2が見つからない場合、視線が投影面と交差する画素に所定の画素値を付与してレンダリング画像を生成することができる。所定の画素値は、レイキャスティング処理を行うことなく付与できるものであればよく、例えば、背景色(Rb,Gb,Bb)とすることができる。これにより、レイキャスティング処理に係る負荷を軽減することができる。具体的には、S132の式に背景色の成分を加え、Back(0)=Rb,Back(1)=Gb,Back(2)=Bbとすると、Image(x,y,c)=Image(x,y,c)+{K・Energy(c)・Light(c)+Back(c)}/Lとすればよい。
図18は本実施の形態の画像処理部20の構成の他の例を示すブロック図である。図18に示すように、画像処理部20は、CPU201、ROM202、RAM203、記録媒体読取部204などで構成することができる。記録媒体1(例えば、CD−ROM等の光学可読ディスク記憶媒体)に記録されたコンピュータプログラムやデータを記録媒体読取部204(例えば、光学ディスクドライブ)で読み取ってRAM203に格納することができる。ハードディスク(図示しない)に格納しコンピュータプログラム実行時にRAM203に格納してもよい。記憶媒体1やROM202、RAM203、ハードディスク等のコンピュータ可読記憶媒体は、コンピュータで実行および/または処理するための、記録された命令(コンピュータプログラム)および/またはデータをもたらす、任意の非一時的有形記憶媒体を意味する。RAM203に格納されたコンピュータプログラムをCPU201で実行させることにより、画像処理部20は、階調圧縮処理部21、平滑化処理部22、ボクセル構造体生成部23、座標変換処理部24、レイキャスティング処理部25、探索制御マスク生成部26、座標値算出部27、サブサンプル・オフセット設定部28、補間処理部29、ROIクリッピング処理部30で行う処理を実行することができる。なお、CPU201は、セントラルプロセッシングユニットの略称とし、1又は複数で構成することができる。また、コンピュータプログラムやデータは、記録媒体読取部204で読み取る構成に代えて、インターネットなどのネットワークを介して他のコンピュータまたはネットワークデバイス等からダウンロードすることもできる。
図19は本実施の形態のレイキャスティング装置100によるジャギー対策結果の一例を示す説明図である。図19Aは、比較例であり本実施の形態のジャギー対策を実施していない場合を示す。図19Bは、本実施の形態のレイキャスティング装置100の画像処理部20により、図11及び図12のように、L=2回の座標変換及びレイキャスティング処理を行った場合を示す。各回の座標変換における座標変換サブサンプル・オフセットは、1回目の処理ではdx=dy=dz=0に設定し、2回目の処理ではdx=dy=dz=0.5に設定した。なお、図19では、陰影計算は実施していない。図19Aでは、下端及び右上端のエッジ部にジャギー(階段状の段差)が発生している。一方、図19Bでは、これらのジャギーが消えていることが分かる。
図20は本実施の形態のレイキャスティング装置100による陰影計算を行った場合のモアレ対策結果の一例を示す説明図である。図20Aは、比較例であり座標変換後にレイキャスティング処理のS127において陰影計算を行った場合を示す。図20Bは、本実施の形態のレイキャスティング装置100の画像処理部20により、図11及び図12のように、座標変換前に陰影計算を行った場合を示す。図20Aでは、座標変換における丸め誤差が陰影計算時の勾配ベクトル算出により強調され、ストライプ・格子状のモアレが発生している。図20Bではモアレが消えていることが分かる。
本実施の形態のコンピュータプログラムは、コンピュータに、レイキャスティング法を用いたボリュームレンダリング処理を実行させるためのコンピュータプログラムであって、コンピュータに、z方向に沿って所定間隔で撮像された複数のxy平面画像の画像データを取得する処理と、前記xy平面画像の画素の値に対してRGB値及び不透明度が定められ、前記複数のxy平面画像それぞれの各画素に対応するRGB値及び不透明度を有するボクセルで構成される3次元ボクセル画像を生成する処理と、前記3次元ボクセル画像のボクセルの座標値の少なくとも一つの座標値に所定の座標オフセット値を加えて所定の座標変換を行って変換後ボクセル画像を生成する処理と、前記変換後ボクセル画像に対してレイキャスティング法を用いて暫定レンダリング画像を生成する処理と、前記座標オフセット値を既に設定された値と異なる値に更新しながら前記変換後ボクセル画像の生成と前記暫定レンダリング画像の生成とを一回以上繰り返す処理と、生成した複数の暫定レンダリング画像に基づいてレンダリング画像を生成する処理とを実行させる。
本実施の形態のコンピュータプログラムは、コンピュータに、前記変換後ボクセル画像のボクセルの整数のxyz座標の少なくとも一つの座標値に実数の座標オフセット値を加算した座標値に対して前記所定の座標変換の逆変換を行ってxyz座標の実数値を算出する処理と、算出したxyz座標の実数値の近傍の整数値をxyz座標とする前記3次元ボクセル画像の複数のボクセルを特定する処理と、特定した前記3次元ボクセル画像の複数のボクセルのボクセル値を補間して前記変換後ボクセル画像を生成する処理と、前記変換後ボクセル画像を生成した後に、前記座標オフセット値を変更する処理とを実行させる。
本実施の形態のコンピュータプログラムは、コンピュータに、前記3次元ボクセル画像のボクセルの座標値に該ボクセルの座標間隔の2分の1以下の座標オフセット値を加える処理を実行させる。
本実施の形態のコンピュータプログラムは、コンピュータに、前記複数の暫定レンダリング画像の対応する各画素の画素値を平均化して前記レンダリング画像を生成する処理を実行させる。
本実施の形態のコンピュータプログラムは、コンピュータに、所定の視点から仮想光線を前記変換後ボクセル画像に向かって照射したときに、視線上のボクセル毎に該ボクセルに対応する前記3次元ボクセル画像のRGB値及び不透明度並びに前記仮想光線の透過強度の積により累積輝度値を累積加算した値に基づいて算出されるRGB値を、前記視線が投影面と交差する画素の画素値として暫定レンダリング画像を生成する処理とを実行させる。
本実施の形態のコンピュータプログラムは、コンピュータに、前記3次元ボクセル画像のボクセルの不透明度に関する勾配ベクトルを算出する処理と、算出した勾配ベクトル及び所定の光源ベクトルに基づいて前記ボクセルの陰影値を算出する処理と、算出した陰影値に基づいて前記ボクセルのRGB値を補正する処理とを実行させる。
本実施の形態のコンピュータプログラムは、コンピュータに、前記3次元ボクセル画像のボクセルの不透明度と、該ボクセルの前記3次元ボクセル画像における近傍に位置する複数の近傍ボクセルそれぞれの不透明度との差分を算出する処理と、前記ボクセルと前記近傍ボクセルとの距離並びに前記ボクセル及び前記近傍ボクセルそれぞれの不透明度の差分に基づいて前記ボクセルの勾配ベクトルを算出する処理とを実行させる。
本実施の形態のコンピュータプログラムは、コンピュータに、前記複数のxy平面画像のうちの所定のxy平面画像の画素の最小値及び最大値を特定する処理と、特定した最大値よりも小さい上限値及び特定した最小値よりも大きい下限値を算出する処理と、前記複数のxy平面画像の各画素の画素値を前記上限値及び下限値の範囲内に圧縮する処理と、前記xy平面画像の圧縮された画素値に対してRGB値及び不透明度が定められ、圧縮した前記複数のxy平面画像それぞれの各画素に対応するRGB値及び不透明度を有するボクセルで構成される3次元ボクセル画像を生成する処理とを実行させる。
本実施の形態のコンピュータプログラムは、コンピュータに、xyz軸の回転角、xyz軸方向のオフセット値、xyz軸方向の拡大又は縮小倍率、z軸方向の変倍率、注視点から視点までの距離を含む前記所定の座標変換のパラメータを取得する処理と、前記3次元ボクセル画像に対して、取得したパタメータを用いた前記所定の座標変換を行って変換後ボクセル画像を生成する処理とを実行させる。
本実施の形態のコンピュータプログラムは、コンピュータに、ボリュームレンダリング処理の対象領域を画定するxyz座標を設定する処理と、前記3次元ボクセル画像のボクセルのxyz座標が前記対象領域外にある場合、前記ボクセルのRGB値及び不透明度を所定値に設定する処理とを実行させる。
本実施の形態の画像処理装置は、レイキャスティング法を用いたボリュームレンダリング処理を行う画像処理装置であって、z方向に沿って所定間隔で撮像された複数のxy平面画像の画像データを取得する取得部と、前記xy平面画像の画素の値に対してRGB値及び不透明度が定められ、前記複数のxy平面画像それぞれの各画素に対応するRGB値及び不透明度を有するボクセルで構成される3次元ボクセル画像を生成するボクセル画像生成部と、前記3次元ボクセル画像のボクセルの座標値の少なくとも一つの座標値に所定の座標オフセット値を加えて所定の座標変換を行って変換後ボクセル画像を生成する変換後ボクセル画像生成部と、前記変換後ボクセル画像に対してレイキャスティング法を用いて暫定レンダリング画像を生成する暫定レンダリング画像生成部と、前記座標オフセット値を既に設定された値と異なる値に更新しながら前記変換後ボクセル画像を生成する処理と前記暫定レンダリング画像を生成する処理とを一回以上繰り返す複数画像生成制御部と、生成した複数の暫定レンダリング画像に基づいてレンダリング画像を生成するレンダリング画像生成部とを備える。
本実施の形態の画像処理方法は、レイキャスティング法を用いたボリュームレンダリング処理を行う画像処理方法であって、z方向に沿って所定間隔で撮像された複数のxy平面画像の画像データを取得し、前記xy平面画像の画素の値に対してRGB値及び不透明度が定められ、前記複数のxy平面画像それぞれの各画素に対応するRGB値及び不透明度を有するボクセルで構成される3次元ボクセル画像を生成し、前記3次元ボクセル画像のボクセルの座標値の少なくとも一つの座標値に所定の座標オフセット値を加えて所定の座標変換を行って変換後ボクセル画像を生成し、前記変換後ボクセル画像に対してレイキャスティング法を用いて暫定レンダリング画像を生成し、前記座標オフセット値を既に設定された値と異なる値に更新しながら前記変換後ボクセル画像の生成と前記暫定レンダリング画像の生成とを一回以上繰り返し、生成された複数の暫定レンダリング画像に基づいてレンダリング画像を生成する。
本実施の形態の3次元ボクセル画像のデータは、3次元ボクセル画像のデータであって、z方向に沿って所定間隔で撮像された複数のxy平面画像のそれぞれの各画素に対応するボクセルのボクセルデータであって、前記xy平面画像の画素の値に対してRGB値及び不透明度が定められ、前記複数のxy平面画像それぞれの各画素に対応するRGB値及び不透明度を有するボクセルで構成され、前記ボクセルの不透明度に関する勾配ベクトル及び所定の光源ベクトルに基づく前記ボクセルの陰影値によって補正されたRGB値を有するデータ構造を有し、前記3次元ボクセル画像のボクセルの座標値の少なくとも一つの座標値に所定の座標オフセット値を加えて所定の座標変換を行って変換後ボクセル画像を生成する処理と、前記変換後ボクセル画像に対してレイキャスティング法を用いて暫定レンダリング画像を生成する処理と、前記座標オフセット値を既に設定された値と異なる値に更新しながら前記変換後ボクセル画像の生成と前記暫定レンダリング画像の生成とを一回以上繰り返す処理と、生成した複数の暫定レンダリング画像に基づいてレンダリング画像を生成する処理とを実行するのに用いられる。