(第1実施形態)
以下、本開示の実施の形態を図面に基づいて説明する。図1は本実施の形態の画像処理装置としての3Dテクスチャマッピング装置100の構成の一例を示すブロック図である。本実施の形態の3Dテクスチャマッピング装置100は、入力部10、記憶部11、出力部12、画像処理部20などを備える。画像処理部20は、階調圧縮処理部21、暫定ボクセル構造体生成部22、ボクセル構造体生成部23、変換処理部24、レンダリング処理部25、3Dテクスチャ画像生成部26、積層四角形設定部27、色補間部28、ROI(Region of Interest)クリッピング処理部29などを備える。
入力部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は、x軸中心の回転角、y軸中心の回転角、z軸中心の回転角、xyz軸方向のオフセット値、xyz軸方向の拡大又は縮小倍率、z軸方向の変倍率、及び注視点から視点までの距離を含む座標変換のパラメータ、xyz方向のROI(Region of Interest:関心領域)の値、並びに透視変換パラメータなどを取得する。座標変換のパラメータ、ROI値、透視変換パラメータの詳細は後述する。
記憶部11は、入力部10で取得したデータ、画像処理部20での処理結果などを記憶することができる。なお、カラーマップデータ、座標変換パラメータ、ROI値、透視変換パラメータなどを予め記憶部11に記憶する構成でもよい。
出力部12は、画像処理部20での処理結果、例えば、レンダリング処理部25で生成したレンダリング画像の画像データを表示装置(不図示)に出力する。
階調圧縮処理部21は、DICOM形式の断層画像を、例えば、8ビットの階調圧縮断層画像にする。
図5は本実施の形態の3Dテクスチャマッピング装置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にする。
画像処理部20は、複数の離散的な数値とRGB値及び不透明度との関係を定義した定義情報に基づいて、所定範囲の連続的な数値(ボクセル値)とRGB値及び不透明度との関係を対応付けたカラーマップを生成する。定義情報は、例えば、ユーザが定義することができる。
暫定ボクセル構造体生成部22は、xy平面画像の画素の値に対してRGB値及び不透明度が定められ、複数のxy平面画像それぞれの各画素に対応するRGB値及び不透明度を有するボクセルで構成される暫定ボクセル構造体を生成する。すなわち、暫定ボクセル構造体生成部22は、生成したカラーマップに基づいて、複数のxy平面画像それぞれの各画素の値に対応するRGB値及び不透明度を有するボクセルで構成される暫定ボクセル構造体を生成する。xy平面画像は、DICOM画像Do(x,y,z)でもよく、階調圧縮処理部21により階調圧縮された階調圧縮断層画像D8(x,y,z)でもよい。本明細書では、暫定ボクセル構造体をVo(x,y,z,c)で表す。ここで、0≦Vo(x,y,z,c)≦255,c=0(R),1(G),2(B),3(α)である。
暫定ボクセル構造体は、RGB値及び不透明度の要素で構成されるベクトル値が3次元的に詰まったボリュームデータを格子状に離散化して配置したボクセルの集合である。一つのボクセルには、例えば、DICOM画像Do(x,y,z)の一つの画素が対応する。暫定ボクセル構造体Vo(x,y,z,c)は、Vo(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)を適用して暫定ボクセル構造体Vo(x,y,z,c)を生成するということである。
また、暫定ボクセル構造体Vo(x,y,z,c)は、階調圧縮処理部21により階調圧縮された階調圧縮断層画像D8(x,y,z)からも生成でき、Vo(x,y,z,c)=Cmap8(D8(x,y,z),c)で表すことができる。この式が意味するところは、階調圧縮断層画像D8(x,y,z)の画素値にカラーマップCmap8(v,c)を適用して暫定ボクセル構造体Vo(x,y,z,c)を生成するということである。
ボクセル構造体生成部23は、暫定ボクセル構造体Vo(x,y,z,c)の各ボクセルに対して、該ボクセルの近傍に位置する近傍ボクセルの不透明度に基づいて、当該ボクセルの不透明度を補正してボクセル構造体を生成する。本明細書では、ボクセル構造体をV(x,y,z,c)で表す。ここで、0≦V(x,y,z,c)≦255,c=0(R),1(G),2(B),3(α)である。本明細書では、暫定ボクセル構造体からボクセル構造体を生成する処理をボクセルのスムージング処理とも称する。なお、ボクセルのスムージング処理には、不透明度のスムージング処理、RGB値及び不透明度のスムージング処理、並びにRGB値のスムージング処理が含まれる。
次に、ボクセルのスムージング処理について具体的に説明する。スムージング処理は、本明細書で述べるカラーマップを通して作成された暫定ボクセル構造体のRGB値及び不透明度の個々の値に対して行う方法よりも、カラーマップを通す前のDICOM画像や階調圧縮断層画像のボクセル値に対して行う方法の方が効率的である。しかし、後者の方法をとると以下に述べる問題が生じる。
図6は図3で示したカラーマップの一例を切り出したものである。図6に示すように、カラーマップは、ボクセル値とRGB値及び不透明度との関係が対応付けられている。便宜上、図6では、ボクセル値を、296〜304とし、それぞれのボクセル値に対応してRGB値及びα(不透明度)が決められている。
図7は比較例として、前述したカラーマップを通す前のDICOM画像のボクセル値に対してスムージング処理を行った一例を示す模式図である。図7に示すように、例えば、x軸方向に並んだ3つのボクセルのボクセル値が、296、298、304であるとする。なお、便宜上、スムージング処理をx軸方向に隣接する3ボクセルの平均として説明するが、実際にはy軸方向およびz軸方向を加味した27ボクセルの平均をとることが望ましい。ボクセル値のスムージングでは、3つのボクセルの中央のボクセルのボクセル値を両隣のボクセルのボクセル値(296、304)で平滑化する。これにより、中央のボクセルのボクセル値は、298から300に変更される。平滑化後のボクセル値(300)に対して図6に例示するカラーマップを適用すると、中央のボクセルのRGBαは、それぞれ0,0,0,80となる。両隣のボクセルのRGBαと比較すると、隣り合うボクセル間でR値、G値およびα値に同一の値が2つ重複して並んだ後に比較的大きな値の変化が生じ、結果として不連続な縞が発生し、モアレとなって現れる。
図8は本実施の形態のカラーマップを通して作成された暫定ボクセル構造体の不透明度に対してスムージング処理を行った一例を示す模式図である。図7と同様に、x軸方向に並んだ3つのボクセルのボクセル値が、296、298、304であるとする。図6に例示するカラーマップを適用すると、3つのボクセルのRGBαは、それぞれ(40,0,0,80)、(20,0,0,80)、(0,40,0,150)となる。不透明度のスムージング処理では、3つのボクセルの中央のボクセルの不透明度を両隣のボクセルの不透明度(80、150)で平滑化する。これにより、中央のボクセルの不透明度は、80から115に変更される。不透明度のスムージング処理の前後の不透明度に注目すると、不透明度のスムージング処理により、隣り合うボクセル間の不透明度が滑らかに変化していることが分かる。
図9は本実施の形態のカラーマップを通して作成された暫定ボクセル構造体のRGB値及び不透明度に対してスムージング処理を行った一例を示す模式図である。図8と同様に、x軸方向に並んだ3つのボクセルのボクセル値が、296、298、304であるとする。図6に例示するカラーマップを適用すると、3つのボクセルのRGBαは、それぞれ(40,0,0,80)、(20,0,0,80)、(0,40,0,150)となる。RGB値及び不透明度のスムージング処理では、3つのボクセルの中央のボクセルのRGB値及び不透明度を両隣のボクセルのRGB値及び不透明度で平滑化する。これにより、中央のボクセルのG値は0から20に変更され、不透明度は80から115に変更される。RGB値及び不透明度のスムージング処理により、隣り合うボクセル間のRGB値(図9の例ではG値)及び不透明度が滑らかに変化していることが分かる。なお、図示していないが、RGB値のみに対してスムージング処理を行った場合も同様である。また、図7〜図9の例では、便宜上、中央のボクセルに対してx軸方向の2近傍にある近傍ボクセルを用いて説明したが、本実施の形態のボクセルのスムージング処理は2近傍に限定されるものではない。実際には、xyz軸に対して26近傍の近傍ボクセルのRGBαを用いてスムージング処理を行うことが望ましい。
暫定ボクセル構造体の各ボクセルVo(x,y,z,c)に対して、当該ボクセル及び当該ボクセルの近傍に存在する26個の近傍ボクセルである、Vo(x−1,y−1,z−1,c)、Vo(x,y−1,z−1,c)、Vo(x+1,y−1,z−1,c)、Vo(x−1,y,z−1,c)、Vo(x,y,z−1,c)、Vo(x+1,y,z−1,c)、Vo(x−1,y+1,z−1,c)、Vo(x,y+1,z−1,c)、Vo(x+1,y+1,z−1,c)、Vo(x−1,y−1,z,c)、Vo(x,y−1,z,c)、Vo(x+1,y−1,z,c)、Vo(x−1,y,z,c)、Vo(x,y,z,c)、Vo(x+1,y,z,c)、Vo(x−1,y+1,z,c)、Vo(x,y+1,z,c)、Vo(x+1,y+1,z,c)、Vo(x−1,y−1,z+1,c)、Vo(x,y−1,z+1,c)、Vo(x+1,y−1,z+1,c)、Vo(x−1,y,z+1,c)、Vo(x,y,z+1,c)、Vo(x+1,y,z+1,c)、Vo(x−1,y+1,z+1,c)、Vo(x,y+1,z+1,c)、Vo(x+1,y+1,z+1,c)の平均値で0≦c≦3の値を置換する。即ち、ボクセルVo(x,y,z,c)に対して平滑化されたボクセルをV(x,y,z,c)とすると、平滑化されたボクセルV(x,y,z,c)は、式(1)で算出することができる。なお、平滑化はボクセルのスムージング処理と同義である。
式(1)において、RGB値(c=0、1、2)に対しては平滑化を行わず、不透明度(c=3)の値のみを平滑化(不透明度のスムージング処理)することができるが、0≦c≦3の4つの値を平滑化(RGB値及び不透明度のスムージング処理)することもできる。また、RGB値だけを平滑化(RGB値スムージング処理)することもできる。
このようにして、暫定ボクセル構造体の各ボクセルVo(x,y,z,c)に対してxyz方向の26近傍平均値で等方性に平滑化処理を行ってボクセル構造体V(x,y,z,c)を生成することにより、図7で述べたDICOM画像のボクセル値に対してスムージング処理を行った後にカラーマップを通してボクセル構造体を生成する方法をとることにより生じる、隣接ボクセルのRGB値や不透明度の重複や段差に伴って発生するモアレを抑制することができる。なお、本明細書では、ボクセルのスムージング処理を行う前後でのボクセル構造体を区別して表すために、スムージング処理前のボクセル構造体を暫定ボクセル構造体と称している。
上述のように、本実施の形態のボクセル構造体のボクセルデータは、z軸方向に沿って所定間隔で撮像された複数のxy平面画像の画素の値に対してRGB値及び不透明度が定められ、複数のxy平面画像それぞれの各画素に対応するRGB値及び不透明度を有するボクセルで構成されるボクセル構造体のボクセルデータを含む構造を有し、ボクセルデータは、ボクセル構造体のボクセルに対して、ボクセルの近傍に位置する近傍ボクセルの不透明度に基づいて、ボクセルの不透明度が補正されたデータを含み、ボクセル構造体に対してボリュームレンダリング処理を行ってレンダリング画像を生成する処理を実行するのに用いられる。
また、本実施の形態のボクセル構造体のボクセルデータは、さらに、ボクセル構造体のボクセルに対して、ボクセルの近傍に位置する近傍ボクセルのRGB値に基づいて、ボクセルのRGB値が補正されたデータを含む。
次に、本実施の形態のボクセルのスムージング処理の高速化方法の一例について説明する。
図7において、比較例として挙げたDICOM画像や階調圧縮断層画像のボクセル値に対してスムージング処理を行う場合に比べて、本実施の形態の暫定ボクセル構造体のスムージング処理では計算負荷が大きくなる。例えば、RGBαのすべてに対してスムージング処理を行うと、DICOM画像のボクセル値に対してスムージング処理を行う場合に比べ計算負荷は4倍に増大する。また、OpenGL/GPUを用いる場合でも、スムージング処理はソフトウェアで実行するため、初期レンダリング画像表示の起動まで待時間が長くなる。以下、この点について説明する。
まず、比較例としての、DICOM画像や階調圧縮断層画像のボクセル値に対するスムージング処理の場合について説明する。比較例の16/8ビットのモノクロのボクセルをDo(x,y,z)とすると、スムージング処理後のボクセルのバッファD(x,y,z)を新たに確保して、x=1,…,Sx−2、y=1,…,Sy−2、z=1,…,Sz−2に対して、以下の式のように26近傍ボクセルの平均計算を(Sx−1)×(Sy−1)×(Sz−1)回繰り返す必要がある。
D(x,y,z)={Σi=-1, 1Σj=-1, 1Σk=-1, 1Do(x+i,y+j,z+k)}/27
次に、本実施の形態の暫定ボクセル構造体のスムージング処理の場合について説明する。カラーマップで変換された後のRGBα形式カラーの32ビットの暫定ボクセル構造体をVo(x,y,z,c)とすると、スムージング処理後のRGBα形式の32ビットのボクセル構造体のバッファV(x,y,z,c)を新たに確保して、x=1,…,Sx−2、y=1,…,Sy−2、z=1,…,Sz−2、c=0,…,3に対して、以下の式のように26近傍ボクセルの平均計算を(Sx−1)×(Sy−1)×(Sz−1)×4回繰り返す必要がある。このように、暫定ボクセル構造体のスムージング処理では、DICOM画像のボクセル値に対する平滑化処理に比べて計算コストが4倍に増加することが分かる。
V(x,y,z,c)={Σi=-1, 1Σj=-1, 1Σk=-1, 1Vo(x+i,y+j,z+k,c)}/27
上述の式は、式(1)を形式的に書き替えたものであり、実質的に式(1)と同じである。以下、作業用のボクセルバッファを使用せず、かつ少ない計算コストでスムージング処理を行う手法について説明する。
式(1)の26近傍の平均計算は、x軸方向の2近傍の平均計算、y軸方向の2近傍の平均計算、及びz軸方向の2近傍の平均計算に分けることができる。
すなわち、ボクセルのスムージング処理前のボクセルVo(x,y,z,c)に対して、式(2)から式(10)に基づいてx軸方向の2近傍の平均計算を行う。
次に、式(2)から式(10)によって更新されたボクセルVo′(x,y,z,c)に対して、式(11)から式(13)に基づいてy軸方向の2近傍の平均計算を行う。
最後に、式(11)から式(13)によって更新されたボクセルVo′′(x,y,z,c)に対して、式(14)に基づいてz軸方向の2近傍の平均計算を行う。これにより、式(1)の26近傍の平均計算を行うことと同一の結果を得ることができる。
上述の手法を暫定ボクセル構造体の全ボクセルに適用すると以下の通りになる。すなわち、RGBα形式の32ビットのボクセルをVo(x,y,z,c)とすると、x=1,…,Sx−2、y=0,…,Sy−1、z=0,…,Sz−1、c=0,…,3に対して、x軸方向に2近傍の平均計算を(Sx−2)×Sy×Sz×4回繰り返し、更新されたボクセルをVo′(x,y,z,c)とすると、Vo′(x,y,z,c)は以下の式のようになる。
Vo′(x,y,z,c)={Σi=-1, 1Vo(x+i,y,z,c)}/3
更新されたボクセルVo′(x,y,z,c)を用いて、x=1,…,Sx−2、y=1,…,Sy−2、z=0,…,Sz−1、c=0,…,3に対して、y軸方向に2近傍の平均計算を(Sx−2)×(Sy−2)×Sz×4回繰り返し、更新されたボクセルをVo′′(x,y,z,c)とすると、Vo′′(x,y,z,c)は以下の式のようになる。
Vo′′(x,y,z,c)={Σj=-1, 1Vo′(x,y+j,z,c)}/3
更新されたボクセルVo′′(x,y,z,c)を用いて、x=1,…,Sx−2、y=1,…,Sy−2、z=1,…,Sz−2、c=0,…,3に対して、z軸方向に2近傍の平均計算を(Sx−2)×(Sy−2)×(Sz−2)×4回繰り返し、更新されたボクセルをV(x,y,z,c)とすると、V(x,y,z,c)は以下の式のようになる。
V(x,y,z,c)={Σk=-1, 1Vo′′(x,y,z+k,c)}/3
上記最終段で更新されたボクセルV(x,y,z,c)は26近傍の近傍ボクセルで平均化されたスムージング処理結果と同一になる。すなわち、スムージング対象のボクセルと当該ボクセルの26近傍の近傍ボクセルとを合計した27個のボクセルに対する27回のメモリアクセスを伴うボクセル加算演算を(Sx−2)×(Sy−2)×(Sz−2)×4回行う演算を、スムージング対象のボクセルと当該ボクセルの2近傍の近傍ボクセルとを合計した3個のボクセルに対する3回のメモリアクセスを伴うボクセル加算演算で実現することができ、メモリアクセス回数を少なくすることができる。これにより、ボクセルのスムージング処理を高速化することができる。
上述のように、ボクセル構造体生成部23は、暫定ボクセル構造体の各ボクセルに対して、当該ボクセルのxyz方向の近傍に位置する26近傍ボクセルの不透明度又はRGB値に基づいて、当該ボクセルの不透明度又はRGB値を補正してボクセル構造体を生成することができる。
また、ボクセル構造体生成部23は、暫定ボクセル構造体の各ボクセルに対して、当該ボクセルのxyz方向の3つの軸方向のうちの第1軸方向の近傍に位置する2近傍ボクセルの不透明度又はRGB値に基づいて、当該ボクセルの不透明度又はRGB値を補正して暫定ボクセル構造体を更新する。次に、ボクセル構造体生成部23は、第1軸方向の2近傍ボクセルによってボクセルの不透明度又はRGB値が補正された暫定ボクセル構造体のボクセルに対して、3つの軸方向のうちの第2軸方向の近傍に位置する2近傍ボクセルの不透明度又はRGB値に基づいて、当該ボクセルの不透明度又はRGB値を補正して暫定ボクセル構造体を更新する。次に、ボクセル構造体生成部23は、第2軸方向の2近傍ボクセルによってボクセルの不透明度又はRGB値が補正された暫定ボクセル構造体のボクセルに対して、3つの軸方向のうちの第3軸方向の近傍に位置する2近傍ボクセルの不透明度又はRGB値に基づいて、ボクセルの不透明度又はRGB値を補正してボクセル構造体を生成することができる。
上述のように、本実施の形態のボクセルデータは、z軸方向に沿って所定間隔で撮像された複数のxy平面画像の画素の値に対してRGB値及び不透明度が定められ、複数のxy平面画像それぞれの各画素に対応するRGB値及び不透明度を有するボクセルで構成される暫定ボクセル構造体のボクセルデータを含む構造を有し、暫定ボクセル構造体のボクセルに対して、ボクセルのxyz方向の3つの軸方向のうちの第1軸方向の近傍に位置する2近傍ボクセルの不透明度又はRGB値に基づいて、ボクセルの不透明度又はRGB値を補正する処理と、第1軸方向の2近傍ボクセルによってボクセルの不透明度又はRGB値が補正された暫定ボクセル構造体のボクセルに対して、3つの軸方向のうちの第2軸方向の近傍に位置する2近傍ボクセルの不透明度又はRGB値に基づいて、ボクセルの不透明度又はRGB値を補正する処理と、第2軸方向の2近傍ボクセルによってボクセルの不透明度又はRGB値が補正された暫定ボクセル構造体のボクセルに対して、3つの軸方向のうちの第3軸方向の近傍に位置する2近傍ボクセルの不透明度又はRGB値に基づいて、ボクセルの不透明度又はRGB値を補正する処理とを実行するのに用いられる。
次に、作業用のボクセルバッファを使用しない手法について説明する。前述のとおり、DICOM画像のボクセル値のスムージング処理(図7に示す比較例)では、3次元26近傍のボクセルの平均化処理を行うために、同一の容量をもつ作業用のボクセルバッファを必要とするのに対し、本実施の形態の暫定ボクセル構造体のスムージング処理では、3回の1次元2近傍の平均化処理に分けることができるので、ボクセル構造体の全ボクセルのデータを格納するための作業用のボクセルバッファが不要となり、1次元2近傍の平均化処理に必要な2ボクセル分のバッファだけでよい。以下、具体的に説明する。
図10は本実施の形態のボクセルのスムージング処理のアルゴリズムの一例を示す模式図である。図10に示すように、2ボクセル分の不透明度又はRGB値を格納できるバッファを第1バッファV1(c)、及び第2バッファV2(c)とする。図10に示すように、本実施の形態のボクセルのスムージング処理は、x軸方向、y軸方向及びz軸方向のスムージング処理(2近傍の平均化処理)に分けることができる。図10の下部には、x軸方向のスムージング処理について詳細を図示し、x軸方向に連続する5ボクセルをVo(x−1,y,z,c)、Vo(x,y,z,c)、Vo(x+1,y,z,c)、Vo(x+2,y,z,c)、Vo(x+3,y,z,c)、…とする。実際には、これらの5ボクセルの前後にx軸方向にボクセルが続いているが、左端のVo(x−1,y,z,c)がx軸方向に先頭のボクセルであるとみなして、以下説明を行う。
Vo(x,y,z,c)の2近傍の平均値が計算されると、Vo(x,y,z,c)の2近傍の平均値は第1バッファV1(c)に格納される。この時、第1バッファV1(c)は空の状態でなくてはならないが、初期状態では空になっている。次に、Vo(x+1,y,z,c)の2近傍の平均値が計算されると、Vo(x+1,y,z,c)の2近傍の平均値も同様に第1バッファV1(c)に格納されるが、この段階では第1バッファV1(c)は空いていない。そのため、第1バッファV1(c)に格納されているVo(x,y,z,c)の2近傍の平均値を第2バッファV2(c)に移動させ、第1バッファV1(c)を空ける。そして、Vo(x+1,y,z,c)の2近傍の平均値が第1バッファV1(c)に格納される。
次に、Vo(x+2,y,z,c)の2近傍の平均値が計算されると、Vo(x+2,y,z,c)の2近傍の平均値も同様に第1バッファV1(c)に格納されるが、第1バッファV1(c)は空いていない。そのため、第1バッファV1(c)に格納されているVo(x+1,y,z,c)の2近傍の平均値を第2バッファV2(c)に移動させようとするが、第2バッファV2(c)も空いていない。そこで、第2バッファV2(c)に格納されているVo(x,y,z,c)の2近傍の平均値を、元の暫定ボクセル構造体のボクセルVo(x,y,z,c)に上書し(更新し)、第2バッファV2(c)を空ける。続けて、第1バッファV1(c)に格納されているVo(x+1,y,z,c)の2近傍の平均値を第2バッファV2(c)に移動させ、第1バッファV1(c)を空ける。そして、Vo(x+2,y,z,c)の2近傍の平均値が第1バッファV1(c)に格納される。以上の処理をまとめると、2近傍の平均値を算出するごとに、次の3つの操作を行えばよい。(1)第2バッファV2(c)にデータがある場合は、データを暫定ボクセル構造体の所定のアドレスに転送し上書きする。(2)第1バッファV1(c)にデータがある場合は、第1バッファV1(c)のデータを第2バッファV2(c)に転送する。(3)2近傍の平均値を第1バッファV1(c)に格納する。ただし、処理開始時には(1)(2)は実行されず(3)が最初に実行されるため、本実施形態では、操作の順序を(3)(1)(2)の順に変更して以下説明する。(ア)2近傍の平均値を第1バッファV1(c)に格納する。(イ)第2バッファV2(c)にデータがある場合は、データを暫定ボクセル構造体の所定のアドレスに転送し上書きする。(ウ)第1バッファV1(c)のデータを第2バッファV2(c)に転送する。これら3つの操作を繰り返しながら末端部まで終了すると、第2バッファV2(c)にデータが残るため、第2バッファV2(c)に残ったデータを暫定ボクセル構造体の所定のアドレスに転送し上書きし、一連の処理を終了する。
すなわち、y=0,…,Sy−1,z=0,…,Sz−1の各(y,z)に対し、x軸方向にx=1,…,Sx−2に対して、(ア)V1(c)={Vo(x−1,y,z,c)+Vo(x,y,z,c)+Vo(x+1,y,z,c)}/3(c=0,…,3)、(イ)x>1の場合、Vo(x−1,y,z,c)=V2(c)、(ウ)V2(c)=V1(c)(c=0,…,3)という(ア)〜(ウ)の3つの操作を繰り返し、最後に、Vo(Sx−2,y,z,c)=V2(c)とし、ボクセルVo(x,y,z,c)の(y,z)におけるx軸方向の1列(x=1,…,Sx−2)を更新する。
次に、更新されたボクセルVo(x,y,z,c)のx=0,…,Sx−1,z=0,…,Sz−1の各(x,z)に対し、y軸方向にy=1,…,Sy−2に対して、(ア)V1(c)={Vo(x,y−1,z,c)+Vo(x,y,z,c)+Vo(x,y+1,z,c)}/3(c=0,…,3)、(イ)y>1の場合、Vo(x,y−1,z,c)=V2(c)、(ウ)V2(c)=V1(c)(c=0,…,3)という(ア)〜(ウ)の3つの操作を繰り返し、最後に、Vo(x,Sy−2,z,c)=V2(c)とし、ボクセルVo(x,y,z,c)の(x,z)におけるy軸方向の1列(y=1,…,Sy−2)を更新する。
次に、更新されたボクセルVo(x,y,z,c)のx=0,…,Sx−1,y=0,…,Sy−1の各(x,y)に対し、z軸方向にz=1,…,Sz−2に対して、(ア)V1(c)={Vo(x,y,z−1,c)+Vo(x,y,z,c)+Vo(x,y,z+1,c)}/3(c=0,…,3)、(イ)z>1の場合、Vo(x,y,z−1,c)=V2(c)、(ウ)V2(c)=V1(c)(c=0,…,3)という(ア)〜(ウ)の3つの操作を繰り返し、最後に、Vo(x,y,Sz−2,c)=V2(c)とし、ボクセルVo(x,y,z,c)の(x,y)におけるz軸方向の1列(z=1,…,Sz−2)を更新する。
上述のように、ボクセル構造体生成部23は、暫定ボクセル構造体の各ボクセルの2近傍ボクセルによって当該各ボクセルの不透明度又はRGB値を補正した補正値を第1バッファに記憶し、第2バッファに記憶されている暫定ボクセル構造体の当該各ボクセルの直前に処理された直前ボクセルの2近傍ボクセルによって当該直前ボクセルの不透明度又はRGB値を補正した直前補正値により暫定ボクセル構造体の当該直前ボクセルの不透明度又はRGB値を更新し、第1バッファに記憶した補正値を第2バッファに転送する、という3つの操作を繰り返すことにより、暫定ボクセル構造体の各ボクセルのRGB値又は不透明度を更新してボクセル構造体を生成することができる。
上述のように、本実施の形態のボクセルデータは、暫定ボクセル構造体の各ボクセルの2近傍ボクセルによって当該各ボクセルの不透明度又はRGB値を補正した補正値を第1バッファに記憶する第1の処理と、第2バッファに記憶されている暫定ボクセル構造体の当該各ボクセルの直前に処理された直前ボクセルの2近傍ボクセルによって当該直前ボクセルの不透明度又はRGB値を補正した直前補正値により暫定ボクセル構造体の当該直前ボクセルの不透明度又はRGB値を更新する第2の処理と、第1バッファに記憶した補正値を第2バッファに転送する第3の処理とを実行するのに用いられる。
上述のとおり、必要とするバッファを2ボクセル分にすることができ、メモリ容量を大幅に削減することができる。また、1次元2近傍のボクセルの平均化処理に対して2ボクセル分前に算出した2近傍の平均値を元のボクセル構造体に上書きしながら進めることができ、ボクセル構造体の全ボクセル分の作業用メモリを使用せずに高速にスムージング処理を行うことができる。
以下では、ボクセルのスムージング処理が行われた後のボクセル構造体に対する処理について説明する。すなわち、以下では、ボクセル構造体は、ボクセルのスムージング処理が施されているものとする。
ボクセル構造体をV(x,y,z,c)で表す。ここで、0≦V(x,y,z,c)≦255、c=0(R)、1(G)、2(B)、3(α)、0≦x≦Sx−1、0≦y≦Sy−1、0≦z≦Sz−1である。
また、ボクセル構造体生成部23は、RGB値及び不透明度が所定値であるボクセルを含むボクセル構造体を生成することができる。所定値としては、RGB値がR=G=B=0(すなわち、無色つまり黒色)で、不透明度α=0(すなわち、透明)とするが、これらはボリュームレンダリング像の計算に寄与しないボクセルの値であることを意味し、ボリュームレンダリング像の計算に寄与しない値であれば、R=G=B=0及び不透明度α=0に限定しなくてもよい。
色補間部28は、ボクセル構造体のRGB値及び不透明度が所定値である対象ボクセルに対して、対象ボクセルの近傍に位置する近傍ボクセルのRGB値に基づいて、色補間して、対象ボクセルのRGB値を補正する。なお、色補間を色補正とも称する。色補間の詳細は後述する。
3Dテクスチャ画像生成部26は、RGB値が色補間されたボクセル構造体のボクセルで構成される3Dテクスチャ画像を生成する。すなわち、3Dテクスチャ画像生成部26は、ボクセル構造体生成部23で生成されたボクセル(RGB値及び不透明度が所定値であるボクセルを含む)に基づいて、3Dテクスチャ画像を生成する。3Dテクスチャ画像のデータは、3Dテクスチャマップとも称し、データの実体はボクセル構造体と同一である。3Dテクスチャ画像生成部26は、ボクセル構造体のボリュームをグラフィックAPI(例えば、OpenGL)の3Dテクスチャマップとして登録する。より具体的には、ボクセル構造体のボリュームは、CPUのメインメモリからGPUのビデオメモリにグラフィックAPIを介して転送され、グラフィックAPIのテクスチャ形式に変換されてビデオメモリに保持される。本願では以降、説明の便宜上グラフィックAPIとしてOpenGLを対象に処理の内容を説明するが、これに限定されない。
3DテクスチャマップをTex(xt,yt,zt,c)で表す。ここで、0≦Tex(xt,yt,zt,c)≦255、c=0(R)、1(G)、2(B)、3(α)、0≦xt≦Sx−1、0≦yt≦Sy−1、0≦zt≦Sz−1である。
なお、ボクセル構造体の座標系をOpenGLのワールド座標系で定義し、XYZ座標(−1≦x≦1、−1≦y≦1、−1≦z≦1)で表し、3Dテクスチャマップの座標系をテクスチャ座標系で定義し、OpenGLではテクスチャ座標系をSTR座標(0≦s≦1、0≦t≦1、0≦r≦1)で表す習慣がある。座標sは座標xに対応し、座標tは座標yに対応し、座標rは座標zに対応する。本実施の形態では、便宜上、ワールド座標系のXYZをXYZ座標と表し、テクスクチャ座標系のSTR座標をxyz座標と表す。
積層四角形設定部27は、ワールド座標系において、XY座標面で定義される複数の四角形をZ軸方向に所定の間隔だけずらして並べた積層四角形を設定する。積層四角形は各々が3次元空間上の4つの頂点で定義された四角形である。
変換処理部24は、テクスチャ座標系に定義された複数のスライス画像で構成される3Dテクスチャ画像に対してテクスチャ座標系において所定の変換を行って変換後3Dテクスチャ画像を生成する。所定の変換は、透視変換処理、座標変換処理などを含む。
図11は本実施の形態の3Dテクスチャマッピング装置100による3Dテクスチャマッピングの概念を示す模式図である。図11Aは積層四角形に対して座標変換前の3Dテクスチャマップをマッピングした状態を示し、図11Bは積層四角形に対して座標変換後の3Dテクスチャマップをマッピングした状態を示す。ワールド座標(X,Y,Z)において、XY座標面上の四角形がZ軸方向に沿って複数配置されている。視点は、図11において、投影面(レンダリング像が生成される面)より上側(すなわち、Z軸の正方向)に存在する。ワールド座標系に定義した積層四角形は固定であるため、個々の四角形は、視線に対して常に垂直である。図11中、積層四角形の内部に図示した楕円形状は、マッピングされた3Dテクスチャマップ(ボクセルデータ)を示す。3Dテクスチャマップは、テクスチャ座標系において適宜所定の変換が行われるが、ワールド座標系とテクスチャ座標系との対応関係(マッピング)は固定であるため、3Dテクスチャマップの変換後に積層四角形にマッピングされている3Dテクスチャマップの内容は自動的に変更される。
図11Aに示すように、3Dテクスチャマッピングでは、ボクセルデータをテクスチャ座標系に3Dテクスチャマップとして定義し、3Dテクスチャマップをワールド座標系に定義された積層四角形の各四角形に貼り付ける。すなわち、四角形に3Dテクスチャマップの各断面(スライス)をマッピングすることにより、3Dテクスチャマップを視線に対して垂直な断面の集まりとして再構成する。
図11Bに示すように、視点の変更は、ワールド座標(X,Y,Z)に定義された積層四角形およびワールド座標系とテクスチャ座標系との対応関係を初期のまま動かさずに、四角形に貼り付けた3Dテクスチャマップをテクスチャ座標系で回転させる。これにより、個々の四角形の4頂点と3Dテクスチャマップの座標位置(図7では、xyz座標で表す)が回転により変更され、視点を変更した画像を得ることができる。
レンダリング処理部25は、ボクセル構造体に対してボリュームレンダリング処理を行ってレンダリング画像を生成する。
具体的には、レンダリング処理部25は、所定の視点からZ軸方向に平行な視線上の四角形のXY座標に対応する変換後3Dテクスチャ画像のボクセルのRGB値を視点から遠い四角形の順に当該ボクセルのアルファ値を基にアルファブレンディングして得られたRGB値を、視線が投影面と交差する画素の画素値としてレンダリング画像を生成する。この場合、レンダリング処理部25は、レンダリング画像のXY座標と視線方向に交差する四角形の交差座標(XYZ座標)を算出し、算出した交差座標と対応する変換後3Dテクスチャ画像のxyz座標を算出し、算出したxyz座標に対応するボクセルのRGB値及び不透明度に基づいてアルファブレンディングする。すなわち、3Dテクスチャマップが貼り付けられた四角形を、視点から遠い順にアルファブレンディングすることでボリュームレンダリングを行う。これらの手順をOpenGLなどのグラフィックAPIを用いて指示することで、GPUの機能を利用した高速処理が可能となる。GPUの機能を利用することにより、待ち時間を抑制して高速にレンダリング画像を生成することができる。本実施の形態であれば、汎用コンピュータに装着されたビデオカードに搭載されたGPUであっても、0.1秒以内でレンダリング処理が可能であり、対話形式で(あるいはインタラクティブ性を確保して)レンダリング画像をリアルタイムに表示させることができる。
本実施の形態では、3Dテクスチャマッピング法を用いるが、一般的な2Dテクスチャマッピング法の場合には、以下のような課題がある。すなわち、2Dテクスチャマッピング法では、ボクセルデータを構成する各スライスの輪郭形状をワールド座標系において四角形で表現するところは本願と同様であるが、2次元のテクスチャ座標系においてボクセルデータを構成する各スライスの画像を複数の2Dテクスチャマップとして定義する点で異なる(本実施の形態では、全スライスの画像を3次元のテクスチャ座標系において単一の3Dテクスチャマップとして定義している)。そして、各四角形に対応するいずれかの2Dテクスチャマップを各四角形に貼り付ける(本実施の形態では、各四角形の4頂点に対応する3Dテクスチャマップ内の4つの座標を対応付けて貼り付けている)。2Dテクスチャマップは2次元のテクスチャ座標系において定義されているため、回転は2次元的にしか行えない。そのため、ワールド座標系において、積層した四角形を3次元的に回転させる方法をとらざるを得ない。そうすると、回転角度により奥行関係が崩れ、あるいは2Dテクスチャマップが反転し、積層した四角形をY軸中心に90度回転させると、四角形(厚みが0)は描画されず、レンダリング像は真っ黒になる。
また、スライスと視線とのなす角度が小さくなるにつれて投影面積が小さくなり、サンプリングされるデータの数が減少し、ボリュームレンダリングの意義が失われ、実用的なレンダリング像を得ることができない場合がある。即ち、回転角度により、ワールド座標系の積層四角形とテクスチャ座標系の2Dテクスチャマップとの対応関係を補正しないと、適切なレンダリング像を得ることができない。
本実施の形態によれば、2Dテクスチャマッピング法における課題、あるいはワールド座標を回転する場合に生じる課題を解決することができる。
次に、本実施の形態の3Dテクスチャマッピング装置100の動作について説明する。
図12及び図13は本実施の形態の3Dテクスチャマッピング装置100による3Dテクスチャマッピング処理の手順の一例を示すフローチャートである。以下では、便宜上、処理の主体を画像処理部20として説明する。画像処理部20は、DICOM画像の画像データを取得し(S11)、カラーマップデータを取得する(S12)。なお、カラーマップデータは、図3、図4で例示したものである。
画像処理部20は、変換パラメータを取得し(S13)、xyz方向のROI値を取得する(S14)。なお、変換パラメータは、座標変換パラメータ及び透視変換パラメータなどを含む。変換パラメータの詳細は後述する。画像処理部20は、DICOM画像の階調圧縮処理を行い(S15)、階調圧縮断層画像D8に対してカラーマップ定義を行う(S16)。カラーマップ定義は、階調圧縮断層画像D8の画素値に対して、RGB値及び不透明度αを定義する。なお、ステップS15の処理は必須ではなく、ステップS15の処理を実施しない場合には、DICOM画像に対してカラーマップ定義を行えばよい。ただし、カラーマップはCT画像の場合、見たい部位ごとに汎用的に定義することが可能で、与えられたDICOM画像に依存して定義されるものではないため、ステップS16の処理を省略し、あらかじめ定義されたカラーマップを流用することもできる。
画像処理部20は、カラーマップを適用して暫定ボクセル構造体Vo(x,y,z,c)を生成する(S17)。画像処理部20は、暫定ボクセル構造体Vo(x,y,z,c)に対して、ボクセルのスムージング処理を行ってボクセル構造体V(x,y,z,c)を生成する(S18)。画像処理部20は、ROIクリッピング領域外のボクセルの透明化処理を行う(S19)。
図14は本実施の形態の3Dテクスチャマッピング装置100によるROIクリッピング領域外のボクセルの透明化処理の一例を示す説明図である。図14は、z番目に位置するxy平面画像の一例を図示している。ROIによるクリッピングでは、x軸方向のROIとして、Xs−Xeを設定し、y軸方向のROIとして、Ys−Yeを設定し、図14には図示されていないが、z軸方向のROIとして、Zs−Zeを設定する。ここで、0≦Xs、Xe≦Sx−1、0≦Ys、Ye≦Sy−1、0≦Zs、Ze≦Sz−1である。すなわち、ROIクリッピング処理部29は、ボリュームレンダリング処理の対象領域を画定するxyz座標を設定する。ボクセル構造体生成部23は、ROIクリッピング領域外のボクセルの透明化処理を行う。
ボクセルの透明化処理では、x<Xsまたはx>Xeまたはy<Ysまたはy>Yeまたはz<Zsまたはz>Zeの場合、0≦c≦3に対してV(x,y,z,c)=0、すなわち、R=G=B=α=0とする(すなわち、画素の色を無色つまり黒色で、透明にする)。図14の例では、x<Xs、x>Xe、y<Ys、及びy>Yeを充足する座標(x,y)の画素の色を無色(黒色)にし、不透明度をα=0(透明)にする。
なお、色補間部28は、後述のステップS24において、ROIクリッピング領域外など透明化処理されたボクセルを含む無色・透明なボクセルに対して、対象ボクセルの近傍に位置する近傍ボクセル(不透明ボクセル)のRGB値に基づいて、対象ボクセルのRGB値を色補間する。ただし、透明なボクセルであっても、透明化処理されたものでなく、RGB値のいずれかに1以上の値が設定されている場合(肺野の空気など)は、色補間を行わない。
上述のように、本実施の形態のボクセル構造体のボクセルデータにおいて、ボクセル構造体は、ボリュームレンダリング処理の対象領域外であって、RGB値及び不透明度が所定値である対象ボクセルに対して、対象ボクセルの近傍に位置する近傍ボクセルのRGB値に基づいて、対象ボクセルのRGB値が色補間されたデータを含む。
ROIクリッピング切断面に限らず、ボリュームレンダリング処理の対象領域である不透明領域(不透明度が1以上の値をもつようにした領域)とボリュームレンダリング処理の対象領域外である透明領域(不透明度が0の値をもつようにした領域)との境界面がモアレの発生源になる。(詳細は後述するが、座標変換により境界面において階段状のパターンが生成されるためである。)そもそも、断層画像には人体・撮影治具(寝台など)など被写体以外の背景部が存在することが一般的で、背景部は空気で無色・透明であるため、不透明な被写体との境界面が元々存在し、モアレの発生源になり得るため、背景部に対して後述の補正対象領域と一緒に色補間を行う必要がある。
ROIクリッピング切断面に限らず、断層画像の最初のスライスまたは/かつ最後のスライスがそのまま不透明領域と透明領域との境界面となり、当該境界面がモアレの発生源になる場合がある。人体の一部である胸部・腹部などに対してCTスキャンされた断層画像の最初のスライスより手前及び最後のスライスの後方には画像データが存在せず、無色・透明な空間としてボリュームレンダリング処理されるため、ROIクリッピング切断面と同様な特質をもつ。即ち、断層画像の最初のスライスと最後のスライスは、必然的に不透明領域と透明領域の境界面となり、モアレ発生源となる。そこで、最初のスライスより手前及び最後のスライスの後方の領域にボクセルを追加して無色・透明にし、後続処理である色補間することにより、併せてモアレの発生を抑制することができる。色補間の詳細は後述する。
画像処理部20は、z方向の両端に新たにRGB値及び不透明度が所定値とされた(ここでは、無色・透明な)ダミー透明画像を付加し(S20)、ボクセル構造体にダミー透明画像に対応するボクセルを追加する(S21)。ダミー透明画像に対応するボクセルが追加されたボクセル構造体をV(x,y,z,c)と表す。ここで、0≦x≦Sx−1、0≦y≦Sy−1、0≦z≦Sz+1である。
図15は本実施の形態の3Dテクスチャマッピング装置100によるダミー透明画像付加処理の一例を示す説明図である。z軸方向にスライス間隔で並んだ元の断層画像のz軸方向の両端に、全ての画素のRGB値及び不透明度が所定値とされた(ここでは、無色・透明に設定した)ダミー透明画像を追加する。すなわち、ボクセル構造体生成部23は、複数のxy平面画像を間にしてz軸方向の両端に配置されたダミーxy平面画像の各画素に対応し、RGB値及び不透明度が所定値とされたダミーボクセルを付加したボクセル構造体を生成する。具体的には、ボクセル構造体生成部23は、断層画像のz軸方向の両端にダミー透明画像に対応するボクセルを追加する。所定値としては、当該ボクセルがボリュームレンダリング像の生成に寄与しないように、RGB値をR=G=B=0に、不透明度をα=0(すなわち、無色・透明)とすることができるが、ボリュームレンダリング像の生成に寄与しない値であれば、RGB値をR=G=B=0に限定しなくてもよく、不透明度をα=0に限定しなくてもよい。
なお、色補間部28は、後述のステップS24において、生成したボクセル構造体のボクセルのRGB値及び不透明度が所定値である対象ボクセルに対して、対象ボクセルの近傍に位置する近傍ボクセルのRGB値に基づいて、対象ボクセルのRGB値を色補間する。ただし、透明なボクセルであっても、RGB値のいずれかに所定値以外の値(ここでは、1以上の値)が設定されている場合(例えば、肺野の空気など)は、色補間を行わない。
上述のように、本実施の形態のボクセル構造体のボクセルデータにおいて、ボクセル構造体は、複数のxy平面画像を間にしてz軸方向の両端に配置されたダミーxy平面画像の各画素に対応し、RGB値及び不透明度が所定値とされたボクセルであるダミーボクセルを含み、ボクセルデータは、ダミーボクセルが付加されたボクセル構造体のRGB値及び不透明度が所定値である対象ボクセルに対して、対象ボクセルの近傍に位置する近傍ボクセルのRGB値に基づいて、対象ボクセルのRGB値が色補間されたデータを含む。
ROIクリッピング切断面に限らず、断層画像の周辺部がそのまま不透明領域と透明領域との境界面となり、モアレの発生源になる場合がある。例えば、CTスキャンの倍率設定により、人体の断層面の周辺部が切れた状態で撮像されることがあり、その場合、ROIクリッピングの指示を行わなくても、図14において、x=0、y=0、x=Sx−1、y=Sy−1のいずれかを満たす面は、x<0、y<0、x>Sx−1、y>Sy−1のいずれかの断層画像の外側領域には画像データが存在せず、無色・透明な空間としてボリュームレンダリング処理されるため、ROIクリッピング切断面と同様な特質をもつ。即ち、x=0、y=0、x=Sx−1、y=Sy−1のいずれかを満たす平面は、必然的に不透明領域と透明領域の境界面となり、モアレ発生源となる。そこで、ROIクリッピングの指示の有無を問わず、x=0、y=0、x=Sx−1、y=Sy−1のいずれかを満たす1ボクセル幅の外縁部の全てのボクセルに対して、図14の斜線部と同様に無色・透明にし、後続処理である色補間を併せて行う。即ち、画像処理部20は、階調圧縮断層画像の外縁部(ボーダー部とも称する)の画素に対応するボクセルの透明化処理を行う(S22)。なお、後述のステップS23の処理を行うか否かにかかわらず、ステップS22の処理は実施する。なお、外縁部とは、画像の外側ではなく、画像内の領域であって、画像の縁にあたる部分を意味する。
図16は本実施の形態の3Dテクスチャマッピング装置100による断層画像の外縁部のボクセルの透明化処理の一例を示す説明図である。z軸方向にスライス間隔で並んだ断層画像それぞれの外縁部の画素に対応するボクセルの色をR=G=B=0(無色)にし、不透明度αを0(透明)にする。すなわち、ボクセル構造体生成部23は、断層画像の外縁部の画素に対応するボクセルを無色・透明にする。ここで、外縁部とは、例えば、断層画像内の領域であって縁から1画素分とすることができる。ボクセル構造体V(x,y,z,c)は、V(x,y,z,c)=0(x=0またはx=Sx−1またはy=0またはy=Sy−1またはz=0またはz=Sz+1、0≦c≦3)となる。すなわち、ボクセル構造体生成部23は、複数のxy平面画像の外縁部の各画素に対応し、RGB値及び不透明度が所定値とされたボクセルを含むボクセル構造体を生成する。具体的には、ボクセル構造体生成部23は、断層画像の外縁部の画素に対応するボクセルを無色・透明にする。なお、外縁部は1画素に限定しなくてもよい。所定値としては、RGB値をR=G=B=0で不透明度α=0(すなわち、画素の色を無色つまり黒色で、透明)とすることができるが、ボリュレームレンダリングに寄与しないボクセルの値であれば、RGB値をR=G=B=0に限定しなくてもよく、不透明度をα=0に限定しなくてもよい。
なお、色補間部28は、後述のステップS24において、断層画像の外縁部の無色・透明な画素に対応するボクセルの対象ボクセルに対して、対象ボクセルの近傍に位置する近傍ボクセルのRGB値に基づいて、対象ボクセルのRGB値を色補間する。ただし、透明なボクセルであっても、RGB値のいずれかに所定値以外の値(ここでは、1以上の値)が設定されている場合(例えば、肺野の空気など)は、色補間を行わない。
上述のように、本実施の形態のボクセル構造体のボクセルデータにおいて、ボクセル構造体は、複数のxy平面画像の外縁部の各画素に対応し、RGB値及び不透明度が所定値とされたボクセルを含み、ボクセルデータは、ボクセルを含むボクセル構造体のRGB値及び不透明度が所定値である対象ボクセルに対して、対象ボクセルの近傍に位置する近傍ボクセルのRGB値に基づいて、対象ボクセルのRGB値が色補間されたデータを含む。
画像処理部20は、ボクセルの陰影値を算出する(S23)。ただし、ステップS23の処理は、必須ではなく、ステップS23の処理を実施しない場合には、ステップS24の処理に進めばよい。
ボクセルの陰影値の算出は、以下のようにすることができる。すなわち、ボクセル構造体生成部23は、ボクセル構造体のボクセルの不透明度に関する勾配ベクトルを算出し、算出した勾配ベクトル及び所定の光源ベクトルに基づいてボクセルの陰影値を算出する。
より具体的には、ボクセル構造体生成部23は、ボクセル構造体のボクセルの不透明度と、当該ボクセルの近傍に位置する複数の近傍ボクセルそれぞれの不透明度との差分を算出する。ボクセル構造体生成部23は、ボクセルと近傍ボクセルとの距離並びにボクセル及び近傍ボクセルそれぞれの不透明度の差分に基づいてボクセルの勾配ベクトルを算出する。この場合、近傍ボクセルとの距離を用いるにあたり、XY方向とZ方向の解像度が異なることを考慮し、ボクセル構造体生成部23は、勾配ベクトルの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−2、0≦y≦Sy−2、0≦z≦Szの範囲のボクセル(x,y,z)の勾配ベクトル(Gx,Gy,Gz)は、式(15)、(16)、(17)で算出することができる。本実施の形態では、26近傍のボクセル値と中央のボクセルのボクセル値との差分により高精度に勾配ベクトルを算出することができる。勾配ベクトルを算出する際に、ボクセルは座標変換前で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)は、拡散反射成分のみ算出し、式(18)で与えられる。これにより、視線ベクトルを変更してボクセルを回転させると、立体感を表現することができる。なお、視線を変えても、座標の回転処理を行う前であり、勾配ベクトルは変化しないので、鏡面反射成分は加えない。ボクセル構造体生成部23は、算出した輝度値に基づいてボクセルのRGB値を補正する。陰影計算後のボクセルをV′(x,y,z,c)で表すと、ボクセルのRGB値の補正は、0≦c≦2の範囲で式(19)を適用することにより行うことができる。
OpenGLを用いた3Dテクスチャマッピング法では、ハードウエアレンダリングにおいて、ボクセルの勾配ベクトル、陰影計算に係る処理はサポートされていないため、陰影値として常にα値が与えられている。しかし、本実施の形態では、疑似的に陰影計算を行うことができる。すなわち、陰影計算を正確に行うためには、ボクセルの座標変換後に行う必要があるが、座標変換はハードウエアレンダリングで一緒に行われるため、座標変換前にハードウエアレンダリングに投入するボクセルデータに予め陰影計算結果を組み込むことにより、疑似的に陰影が付与されたレンダリング像を得ることができる。
断層画像の外縁部や背景部のボクセルではG<1となることがあり、その場合、陰影計算を行わずに、一律に無色・透明(R=G=B=α=0)にする。すなわち、陰影計算後のボクセルをV′(x,y,z,c)で表すと、V′(x,y,z,c)=0(c=0,1,2,3)とする。これは、前述のステップS22と同等の処理である。
画像処理部20は、透明ボクセルの色補間処理を行う(S24)。なお、色補間処理の詳細は後述する。
画像処理部20は、色補間したボクセル構造体を3Dテクスチャマップとして登録し(S25)、投影画面を設定する(S26)。
図17は本実施の形態の3Dテクスチャマッピング装置100による投影画面設定の一例を示す説明図である。変換処理部24は、レンダリング画像のスクリーンサイズ(縦横画素数、縦横アスペクト比率)を設定する。変換処理部24は、平行投影(通常の外観レンダリング)又は透視投影(内視鏡モード)のいずれかを設定する。そして、変換処理部24は、透視投影が設定された場合、透視投影パラメータを設定する。透視投影パラメータは、例えば、カメラの視野角度(焦点距離)、視点位置(視点と注視点で構成され、前者は目の位置で後者は見ている対象物上の位置で、双方ともZ軸上に設定される。一般に、注視点はワールド座標系の原点に固定)、クリッピング位置(視点からのZ軸上の距離、近方及び遠方の2箇所)などを含む。なお、クリッピング位置は、近方だけでもよい。図17に示すように、平行投影の場合には、視点からの視線は全てZ軸に平行となり、視点は仮想的に左方向に無限遠に離れた位置にあることを想定しているため、Z軸方向に定義されている全ての積層四角形がレンダリング対象になる。一方、透視投影の場合には、視点からの視野角度に応じて、視線が広がり、レンダリング対象も近方クリッピングによって制限されている。
画像処理部20は、レンダリング処理を行い(S27)、フレームメモリ上にレンダリング画像を生成し(S28)、処理を終了する。なお、レンダリング処理の詳細は後述する。
図18は本実施の形態の3Dテクスチャマッピング装置100による透明ボクセルの色補間処理の手順の一例を示すフローチャートである。画像処理部20は、ボクセル構造体の、0≦x≦Sx−1、0≦y≦Sy−1、0≦z≦Sz+1のすべてのボクセルから無色・透明のボクセルを抽出する(S101)。すなわち、式(20)を満たすボクセルを抽出する。
画像処理部20は、抽出したボクセルのうち対象ボクセルの近傍ボクセルであって不透明なボクセルを特定する(S102)。対象ボクセルのxyz座標を(x,y,z)とすると、−1≦i≦1、−1≦j≦1、−1≦k≦1の範囲の対象ボクセルの近傍の26近傍ボクセルの中からV(x+i,y+j,z+k,3)>0を満たす不透明ボクセルを特定し、式(21)の定義に従いその個数をCとする。すなわち、ボクセル構造体生成部23は、対象ボクセルに係る近傍ボクセルのうち、不透明度が所定値より大きい近傍ボクセルを特定する。所定値としては、ボリュームレンダリングに寄与しない不透明度α=0(すなわち、透明)とすることができるが、ボリュームレンダリングに寄与しなければ、不透明度をα=0に限定しなくてもよい。
画像処理部20は、C>0であるか即ち不透明ボクセルの有無を判定し(S103)、C>0である場合、即ち不透明ボクセルがある場合(S103でYES)、不透明ボクセルのRGB値の平均値で対象ボクセルのRGB値を更新し(S104)、後述のステップS106の処理を行う。RGB値の平均値をRa、Ga、Baとすると、平均値は式(22)、(23)、(24)によりV(x+i,y+j,z+k,3)>0を満たす不透明ボクセルの各々R値V(x+i,y+j,z+k,0)、G値V(x+i,y+j,z+k,1)、B値V(x+i,y+j,z+k,2)の総和で算出することができる。また、無色・透明の対象ボクセルのRGB値の更新は、式(25)、(26)、(27)により行うことができる。
C=0である場合、即ち不透明ボクセルがない場合(S103でNO)、画像処理部20は、対象ボクセルのRGB値を0(すなわち、Ra=Ga=Ba=0)とし(S105)、抽出した無色・透明のボクセルのすべての対象ボクセルの色補間を終了したか否かを判定する(S106)。すべての対象ボクセルの色補間を終了していない場合(S106でNO)、画像処理部20は、ステップS102以降の処理を続け、すべての対象ボクセルの色補間を終了した場合(S106でYES)、処理を終了する。
色補間処理は、画像処理部20の色補間部28が行う。より具体的には、色補間部28は、特定した近傍ボクセルのRGB値の統計値に基づいて、対象ボクセルのRGB値を色補間する。統計値は、平均値を用いることができるが、平均値に限定しなくてもよく、例えば、中央値などを用いることもできる場合がある。
上述のように、本実施の形態のボクセル構造体のボクセルデータは、対象ボクセルに係る近傍ボクセルのうち、不透明度が所定値より大きい近傍ボクセル(すなわち、不透明度αが1以上のボクセル)のRGB値の統計値に基づいて、対象ボクセルのRGB値が色補間されたデータを含む。
図19は本実施の形態の3Dテクスチャマッピング装置100によるレンダリング処理の手順の一例を示すフローチャートである。画像処理部20は、3Dテクスチャマップに対するスケーリング及びz方向変倍処理を行い(S111)、3Dテクスチャマップに対する回転処理を行う(S112)。
画像処理部20は、3Dテクスチャマップに対するオフセット処理を行い(S113)、複数の四角形で構成される積層四角形を設定する(S114)。画像処理部20は、積層四角形を構成する各四角形と3Dテクスチャマップとの対応付けを行う(S115)。
図20は3Dテクスチャマッピングとの対応付け方法の一例を示す説明図である。図20Aに示すように、DICOM断層画像をRGBα形式に変換し、グラフィックAPIを介して3Dテクスチャマップとして登録する。そして、図20Bに示すように、積層四角形を定義し、3Dテクスチャマッピングを行う。この場合、ワールド座標系における各四角形の4頂点の3次元ワールド座標とテクスチャ座標系における3Dテクスチャマップの3次元テクスチャ座標とを対応付ける。図20に示すように、(−1,−1,z)、(−1,1,z)、(1,−1,z)、(1,1,z)の4頂点で構成される四角形に対して、ワールド座標の(−1,−1,z)は、テクスチャ座標(0,0,r)に対応付けられている。
また、3Dテクスチャマッピングを設定する場合、積層四角形設定部27は、複数のxy平面画像の数及びダミーxy平面画像の数の合計値と同数の四角形をZ軸方向に並べた積層四角形を設定する。
積層四角形における四角形の数は任意に設定することができるが、四角形の数と断層画像の枚数とが一致しない場合、Z軸方向に補間処理が働き、座標変換による座標値の丸め誤差が累積し、ストライプ・格子状のモアレが発生する。
そこで、積層四角形における四角形の数、3Dテクスチャマップに登録する2D断層画像の枚数を元のDICOM形式の断層画像の枚数+2枚(z軸方向に追加したダミー透明画像)にする。3Dボクセル構造体を構築する際、XYZ3次元の解像度を統一させた方が、後処理がしやすくなるため、2D断層画像のスライス間を補間して元のDICOM形式の断層画像の枚数よりも増やす処理が一般的に行われるが、本実施の形態の方が、モアレを抑制する観点から、より好ましい。
画像処理部20は、積層四角形に3Dテクスチャマップを貼り付けながらスキャンコンバージョンを行い、視点から遠い四角形の順にアルファブレンディング処理を行い(S116)、処理を終了する。
より具体的には、あらかじめレンダリング画像のRGB値は全て背景色(例えば、R=G=B=0)で初期化しておく。レンダリング処理部25は、視点から最も遠い四角形に3Dテクスチャマップを貼り付け、図17で定義したレンダリング画像に平行投影または透視投影を行い、投影された四角形のワールド座標系におけるXYZ座標の(−1,−1,−1)からX軸方向及びY軸方向に、投影されたレンダリング画像における画素間隔に対応する間隔u(レンダリング画像の1画素に対応するワールド座標の間隔をuとする。例えばu=0.002)でスキャンコンバージョンを行う。スキャンコンバージョンされた、各ワールド座標(−1+iu,−1+ju,−1)(i,jはレンダリング画像の座標値で、例えば0≦i,j≦511の整数)において、各々対応するテクスチャ座標(2iu,2ju,0)を算出し、算出したテクスチャ座標に基づいて3Dテクスチャマップを参照しRGB値及び不透明度を取得して、対応するレンダリング画像の座標(i,j)に既に記録されているRGB値とアルファブレンディング処理を行い、対応するレンダリング画像の座標(i,j)のRGB値を更新する。このようにして、視点から最も遠い単一の四角形についてアルファブレンディング処理が終了すると、Z座標をv(四角形がZ軸方向に配置されているワールド座標の間隔をvとする。例えば、v=2/Sz)だけ増やし、視点方向に次に近い四角形(−1+iu,−1+ju,−1+v)について同様の処理を繰り返してレンダリング画像を更新する。全ての四角形についてスキャンコンバージョンしてワールド座標(−1+iu,−1+ju,−1+kv)(kは四角形の番号で、0≦k≦Sz−1の整数)に対してアルファブレンディングの処理が終了するとレンダリング画像が完成する。
アルファブレンディング処理は、式(28)、(29)、(30)を用いることができる。
ここで、R′、G′、B′は、投影面において更新されるレンダリング画像のRGB値である。R、G、Bは、四角形のワールド座標(−1+iu,−1+ju,−1+kv)に対応する3Dテクスチャマップのボクセル(2iu,2ju,2kv)におけるRGB値であり、重ねる色の値に相当する。αも、四角形のワールド座標(−1+iu,−1+ju,−1+kv)に対応する3Dテクスチャマップのボクセル(2iu,2ju,2kv)におけるα値であり、重ねる割合を制御する。また、Rb、Gb、Bbは、ワールド座標(−1+iu,−1+ju,−1+kv)に対応するレンダリング画像の座標(i,j)に既に記録されているRGB値であり、当該四角形に対して視点と反対側に1つ前に位置する四角形に対して式(28)、(29)、(30)に基づいて算出されたR′、G′、B′の値に一致し、視点から最も遠い四角形に対して算出する場合は背景色(例えば、Rb=Gb=Bb=0)が与えられる。
図21は本実施の形態の画像処理部20の構成の他の例を示すブロック図である。図21に示すように、画像処理部20は、CPU201、ROM202、RAM203、GPU204、ビデオメモリ205、記録媒体読取部206などで構成することができる。記録媒体1(例えば、CD−ROM等の光学可読ディスク記憶媒体)に記録されたコンピュータプログラム又はデータを記録媒体読取部206(例えば、光学ディスクドライブ)で読み取ってRAM203に格納することができる。ハードディスク(図示しない)に格納しコンピュータプログラム実行時にRAM203に格納してもよい。記録媒体1やROM202、RAM203、ハードディスク等のコンピュータ可読記憶媒体は、コンピュータで実行および/または処理するための、記録された命令(コンピュータプログラム)および/またはデータをもたらす、任意の非一時的有形記憶媒体を意味する。RAM203に格納されたコンピュータプログラムをCPU201で実行させることにより、階調圧縮処理部21、暫定ボクセル構造体生成部22、ボクセル構造体生成部23、変換処理部24、レンダリング処理部25、3Dテクスチャ画像生成部26、積層四角形設定部27、色補間部28、ROIクリッピング処理部29で行う処理を実行することができる。なお、CPU201は、セントラル・プロセッシングユニットの略称とし、1又は複数のコア(プロセッサ)で構成されてRAM203と連携して動作するのに対し、GPU204は、グラフィックス・プロセッシングユニットで、多くのグラフィックス処理に特化したプロセッサで構成されてビデオメモリ205と連携して動作する。また、コンピュータプログラムは、記録媒体読取部206で読み取る構成に代えて、インターネットなどのネットワークを介して他のコンピュータまたはネットワークデバイス等からダウンロードすることもできる。
また、CPU201は、GPU204に対してレンダリング処理などの命令を出力する。GPU204は、命令を解釈し、レンダリング処理などの所要の処理を実行する。GPU204のプログラミングには、一般にグラフィクスAPI(例えば、OpenGLなど)を用いることができる。例えば、コンピュータプログラムは、CPU201に、変換処理、レンダリング処理を実行するための指令をGPU204に出力する処理を実行させることができる。
次に、モアレの発生パターンについて説明する。ボリュームレンダリング像においてモアレが発生する理由は、断層画像を積層合成する点にある。モアレのタイプとしては、曲線状のパターンがある。
図22は曲線状のモアレが発生する様子の一例を示す模式図である。発生原因は、断層画像(スライス画像)に元々自然に存在する知覚可能な規則性をもたないパターンである。このようなパターンをもつ複数の断層画像を座標変換(xyz軸回りの回転)することにより、各断層画像に存在する前述の規則性をもたないパターンがずれて合成されることにより、これらのパターンが線状に連結し、結果として、ボリュームレンダリング像に曲線状の縞模様が形成され、知覚可能なモアレとして認識される。
図23及び図24は本実施の形態の3Dテクスチャマッピング装置100によるモアレ対策結果の第1例を示す説明図である。図23Aは、比較例でありDICOM画像のボクセル値に対してスムージング処理を行った後にカラーマップを適用した場合を示す。図23B、図24A及び図24Bは本実施の形態のカラーマップを適用した後の暫定ボクセル構造体に対してスムージング処理を実施した場合を示し、図23Bはボクセルの不透明度αのみスムージング処理を行った場合を示し、図24AはボクセルのRGB値及び不透明度αのスムージング処理を行った場合を示し、図24BはボクセルのRGB値のみスムージング処理を行った場合を示す。なお、図23及び図24では、3Dテクスチャマッピング法に基づくOpenGL/GPU版で陰影なしでカラーマップを適用し、前述の透明画素の色補間を実施している。
図23Aに示すように、比較例では曲線状の縞模様が発生している。図23Bでは縞模様が消えていることが分かる。また、図24Aでも縞模様が消えているが、図23Bと対比すると画像が若干ぼけて見える。ただし、ユーザの好みに応じて、図23B又は図24Aのいずれでも用いることができる。また、図24Bでは縞模様が若干残っている。従って、ボクセルのRGB値のみのスムージング処理を行うよりも、不透明度αのみのスムージング、あるいはRGB値及び不透明度αのすべてのスムージング処理を行う方が好ましい。
図25及び図26は本実施の形態の3Dテクスチャマッピング装置100によるモアレ対策結果の第2例を示す説明図である。図25Aは、比較例でありDICOM画像のボクセル値に対してスムージング処理を行った後にカラーマップを適用した場合を示す。図25B、図26A及び図26Bは本実施の形態のカラーマップを適用した後の暫定ボクセル構造体に対してスムージング処理を実施した場合を示し、図25Bはボクセルの不透明度αのみスムージング処理を行った場合を示し、図26AはボクセルのRGB値及び不透明度αのスムージング処理を行った場合を示し、図26BはボクセルのRGB値のみスムージング処理を行った場合を示す。なお、図25及び図26では、3Dテクスチャマッピング法に基づくOpenGL/GPU版で陰影ありでカラーマップを適用し、前述の透明画素の色補間を実施している。
図25Aに示すように、比較例では曲線状の縞模様が発生している。図25Bでは縞模様が消えていることが分かる。また、図26Aでも縞模様が消えているが、図25Bと対比すると画像が若干ぼけて見える。ただし、ユーザの好みに応じて、図25B又は図26Aのいずれでも用いることができる。また、図26Bでは縞模様が若干残っている。従って、ボクセルのRGB値のみのスムージング処理を行うよりも、不透明度αのみのスムージング、あるいはRGB値及び不透明度αのすべてのスムージング処理を行う方が好ましい。
(第2実施形態)
前述の第1実施形態では、ボリュームレンダリング手法として3Dテクスチャマッピングの例を説明したが、本実施の形態のボクセルのスムージング処理は、レイキャスティングにも適用することができる。以下、レイキャスティングについて説明する。
図27は本実施の形態の画像処理装置としてのレイキャスティング装置120の構成の一例を示すブロック図である。本実施の形態のレイキャスティング装置120は、入力部10、記憶部11、出力部12、画像処理部30などを備える。画像処理部30は、階調圧縮処理部31、暫定ボクセル構造体生成部32、ボクセル構造体生成部33、座標変換処理部34、レイキャスティング処理部35、探索制御マスク生成部36、及びROIクリッピング処理部37などを備える。
なお、入力部10、記憶部11、出力部12、階調圧縮処理部31、暫定ボクセル構造体生成部32、ボクセル構造体生成部33、及びROIクリッピング処理部37は、第1実施形態の場合と同様であるので、説明は省略する。
図28は本実施の形態のレイキャスティング装置120によるボクセル構造体の座標変換の一例を示す模式図である。図28Aは、後述の座標変換前のボクセル構造体を示し、図28Bは、座標変換後のボクセル構造体を示す。まず、座標変換前のボクセル構造体は、ボクセル構造体生成部33によって生成されたボクセル構造体である。ボクセル構造体V(x,y,z,c)は、暫定ボクセル構造体をVo(x,y,z,c)とすると、V(x,y,z,c)={Σi=-1, 1Σj=-1, 1Σk=-1, 1Vo(x+i,y+j,z+k,c)}/27と表すことができる。ここで、0≦x≦Sx−1、0≦y≦Sy−1、0≦z≦Sz−1、0≦c≦3である。以下では、ボクセル構造体V(x,y,z,c)を3次元ボクセル画像とも称する。
座標変換処理部34は、生成された3次元ボクセル画像に対して、入力部10で取得した座標変換パラメータを用いて所定の座標変換を行って変換後ボクセル画像を生成する。すなわち、座標変換処理部34は、ボクセル構造体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)は、座標変換を施すための変換行列であり、具体的な変換式は後述する。
図28Aに示すように、レンダリング像が生成される投影面の向きと、ボクセル構造体V(x,y,z,c)のz軸方向が一致していないと、後述のレイキャスティング処理が複雑になる。そこで、図28Bに示すように、ボクセル構造体V(x,y,z,c)のxyz軸を回転させて、例えば、座標変換後のz′軸が投影面に対して垂直方向にすることにより、レイキャスティング処理を簡単にすることができる。
図29は本実施の形態のレイキャスティング装置120による座標変換処理の一例を示す説明図である。図29に示すように、変換後のボクセル構造体V′(x,y,z′,c)は、変換前のボクセル構造体をV(x,y,z,c)に対して、ROIによるクリッピングを行い、関心領域を設定し、その後座標変換を行うことにより求めることができる。ROIによるクリッピングでは、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の変換行列で定義可能な範囲であれば、各処理の順番は、図29の例に限定されない。
スケーリングは、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)に纏めることができる。
探索制御マスク生成部36は、変換後ボクセル構造体V′(x,y,z′,c)のxy座標毎に、変換後ボクセル構造体V′(x,y,z′,c)のボクセルの不透明度αが0(透明)でない視線上の最小値及び最大値を特定する。
図30は本実施の形態のレイキャスティング装置120による探索制御マスクデータ生成処理の一例を示す説明図である。図30では、変換後のボクセル構造体V′(x,y,z′,c)をxz′平面から見た場合を示す。投影面はxy平面となる。探索制御マスク生成部36は、探索制御マスクデータM(x,y,s)を生成する。ここで、s=0(有効なボクセルの範囲の開始点)又は1(有効なボクセルの範囲の終了点)である。
図30に示すように、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)を生成することにより、有効でないボクセルを除外して、後続のレイキャスティング処理を行うことができるので、レイキャスティング処理の負荷を軽減することができ、ボリュームレンダリング処理を高速化することができる。
レイキャスティング処理部35は、ボクセル構造体(変換後ボクセル構造体)に対してボリュームレンダリング処理を行ってレンダリング画像を生成する。
具体的には、レイキャスティング処理部35は、所定の視点から所定の透過強度を有する仮想光線を変換後のボクセル構造体V′(x,y,z′,c)に向かってz′方向に照射したときに、z′軸上のボクセル毎に当該ボクセルの不透明度αに基づく仮想光線の吸収・減衰度を考慮しながらボクセル通過後の強度を算出し、透過強度が所定の下限以下になる最深点のボクセルを決定する。そして、最深点のボクセルより視点方向に仮想光線が通過した各ボクセルを逆に辿りながら、各ボクセルのRGB値及び不透明度αを基にRGB値を累積加算した値を、当該視線が投影面と交差する画素の画素値としてレンダリング画像を生成する。仮想光線を変換後のボクセル構造体V′(x,y,z′,c)に向かってz′方向に照射し、最深点のボクセルを決定する過程で、各ボクセルのRGB値及び不透明度α並びに仮想光線の透過強度の積を累積加算することにより、投影面と交差する画素の画素値を同時に算出する方法もとれる。本願では後者の方法に基づいて以下説明する。
図31は本実施の形態のレイキャスティング装置120による平行投影の場合のレイキャスティング処理の一例を示す説明図である。図31では、変換後のボクセル構造体V′(x,y,z′,c)を3次元的にボクセルデータが詰まった立方体として図示している。変換後のボクセル構造体V′(x,y,z′,c)のxy軸に平行な投影面(レンダリング像)が、変換後のボクセル構造体V′(x,y,z′,c)から所要距離だけ離隔して配置されているとする。図31のように、視点が無限遠点に位置する場合が一般的に使用される平行投影で(本来はDist=∞であるが、本願ではDist=0と設定)、視点からボクセル構造体内部に向かう全ての視線がz′軸と平行になる。レイキャスティング処理(ボリュームレンダリング)では、不透明度αに基づいて半透明表示(αブレンディング)を行うことによって、変換後のボクセル構造体V′(x,y,z′,c)の内部を可視化する。すなわち、可視化は、変換後のボクセル構造体V′(x,y,z′,c)のボクセルが有するボクセル値(RGB値及び不透明度α)によって実現される。
図32は本実施の形態のレイキャスティング装置120による透視投影の場合のレイキャスティング処理の一例を示す説明図である。図32のように視点が投影面に比較的接近している場合(本願ではDist>0)が透視投影で、内視鏡表示の際は、投影面や視点がボクセル構造体V′(x,y,z′,c)の内部に没入することもある。図31の場合と同様に、レイキャスティング処理(ボリュームレンダリング)では、不透明度αに基づいて半透明表示(αブレンディング)を行うことによって、変換後のボクセル構造体V′(x,y,z′,c)の内部を可視化する。すなわち、可視化は、変換後のボクセル構造体V′(x,y,z′,c)のボクセルが有するボクセル値(RGB値及び不透明度α)によって実現される。
図31及び図32に示すように、視点から視線を変換後のボクセル構造体V′(x,y,z′,c)の内部に伸ばし、視線上にあるサンプリング点(ボクセル)において当該ボクセルのRGB値と不透明度αに基づいてRGB輝度値を視線に沿って累積計算し、累積計算した値を、当該視線が投影面と交差する位置のピクセル(画素の画素値)としてレンダリング像を生成する。この際に、前述の探索制御マスクM(x,y,0)とM(x,y,1)との間のz′について累積計算を行う。なお、レイキャスティング処理の詳細は後述する。
次に、本実施の形態のレイキャスティング装置120の動作について説明する。
図33及び図34は本実施の形態のレイキャスティング装置120によるレイキャスティング処理の手順の一例を示すフローチャートである。以下では、便宜上、処理の主体を画像処理部30として説明する。画像処理部30は、DICOM画像の画像データを取得し(S41)、カラーマップデータを取得する(S42)。なお、カラーマップデータは、図3、図4で例示したものである。
画像処理部30は、座標変換パラメータを取得し(S43)、xyz方向のROI値を取得する(S44)。なお、座標変換パラメータ、ROI値は、図29で例示したものである。画像処理部30は、DICOM画像の階調圧縮処理を行い(S45)、階調圧縮断層画像D8に対してカラーマップ定義を行う(S46)。カラーマップ定義は、階調圧縮断層画像D8の画素値に対して、RGB値及び不透明度αを定義する。なお、ステップS45の処理は必須ではなく、ステップS45の処理を実施しない場合には、DICOM画像に対してカラーマップ定義を行えばよい。
画像処理部30は、カラーマップを適用して暫定ボクセル構造体Vo(x,y,z,c)を生成する(S47)。画像処理部30は、暫定ボクセル構造体Vo(x,y,z,c)に対して、ボクセルのスムージング処理を行ってボクセル構造体V(x,y,z,c)を生成する(S48)。ボクセルのスムージング処理は、不透明度のみのスムージング処理でもよく、RGB値及び不透明度のスムージング処理でもよい。
画像処理部30は、陰影計算を行うか否かを判定し(S49)、陰影計算を行う場合(S49でYES)、陰影計算を行い(S50)、後述のステップS51の処理を行う。陰影計算を行わない場合(S49でNO)、画像処理部30は、ボクセル構造体V(x,y,z,c)に対して座標変換処理を行い(S51)、変換後ボクセル構造体V′(x,y,z′,c)を生成する(S52)。
画像処理部30は、探索制御マスクデータM(x,y,s)を生成し(S53)、レイキャスティング処理を行い(S54)、レンダリング画像Image(x,y,c)を生成し(S55)、処理を終了する。ここで、0≦Image(x,y,c)≦255、c=0(R)、c=1(G)、c=2(B)である。
本実施の形態の画像処理部30は、第1実施形態の画像処理部20と同様に、図21に例示する構成とすることができる。ただし、GPU204及びビデオメモリ205は具備しなくてもよい。
図35及び図36は本実施の形態のレイキャスティング装置120によるモアレ対策結果の第1例を示す説明図である。図35Aは、比較例でありDICOM画像のボクセル値に対してスムージング処理を行った後にカラーマップを適用した場合を示す。図35B、図36A及び図36Bは本実施の形態のカラーマップを適用した後の暫定ボクセル構造体に対してスムージング処理を実施した場合を示し、図35Bはボクセルの不透明度αのみスムージング処理を行った場合を示し、図36AはボクセルのRGB値及び不透明度αのスムージング処理を行った場合を示し、図36BはボクセルのRGB値のみスムージング処理を行った場合を示す。なお、図35及び図36では、レイキャスティング法に基づくCPU版で陰影なしでカラーマップを適用している。
図35Aに示すように、比較例では斑点状の色ずれが発生している。図35Bでは斑点状の色ずれが消えていることが分かる。また、図36Aでも斑点状の色ずれが消えているが、図35Bと対比すると画像が若干ぼけて見える。ただし、ユーザの好みに応じて、図35B又は図36Aのいずれでも用いることができる。また、図36Bでは斑点状の色ずれが若干残っている。従って、ボクセルのRGB値のみのスムージング処理を行うよりも、不透明度αのみのスムージング、あるいはRGB値及び不透明度αのすべてのスムージング処理を行う方が好ましい。
図37及び図38は本実施の形態のレイキャスティング装置120によるモアレ対策結果の第2例を示す説明図である。図37Aは、比較例でありDICOM画像のボクセル値に対してスムージング処理を行った後にカラーマップを適用した場合を示す。図37B、図38A及び図38Bは本実施の形態のカラーマップを適用した後の暫定ボクセル構造体に対してスムージング処理を実施した場合を示し、図37Bはボクセルの不透明度αのみスムージング処理を行った場合を示し、図38AはボクセルのRGB値及び不透明度αのスムージング処理を行った場合を示し、図38BはボクセルのRGB値のみスムージング処理を行った場合を示す。なお、図37及び図38では、レイキャスティング法に基づくCPU版で陰影ありでカラーマップを適用している。
図37Aに示すように、比較例では斑点状の色ずれが発生している。図37Bでは斑点状の色ずれが消えていることが分かる。また、図38Aでも斑点状の色ずれが消えているが、図37Bと対比すると画像が若干ぼけて見える。ただし、ユーザの好みに応じて、図37B又は図38Aのいずれでも用いることができる。また、図38Bでは斑点状の色ずれが若干残っている。従って、ボクセルのRGB値のみのスムージング処理を行うよりも、不透明度αのみのスムージング、あるいはRGB値及び不透明度αのすべてのスムージング処理を行う方が好ましい。
上述のように、第1及び第2実施形態によれば、従来と同等なリアルタイム性及び処理速度を維持しながら、カラーマップ適用時のモアレの発生を抑制することができる。
本実施の形態のコンピュータプログラムは、コンピュータに、z軸方向に沿って所定間隔で撮像された複数のxy平面画像の画像データを取得する処理と、前記xy平面画像の画素の値に対してRGB値及び不透明度が定められ、前記複数のxy平面画像それぞれの各画素に対応するRGB値及び不透明度を有するボクセルで構成される暫定ボクセル構造体を生成する処理と、前記暫定ボクセル構造体のボクセルに対して、該ボクセルの近傍に位置する近傍ボクセルの不透明度に基づいて、前記ボクセルの不透明度を補正してボクセル構造体を生成する処理と、前記ボクセル構造体に対してボリュームレンダリング処理を行ってレンダリング画像を生成する処理とを実行させる。
本実施の形態のコンピュータプログラムは、コンピュータに、前記暫定ボクセル構造体のボクセルに対して、該ボクセルの近傍に位置する近傍ボクセルのRGB値に基づいて、前記ボクセルのRGB値を補正してボクセル構造体を生成する処理と、前記ボクセル構造体に対してボリュームレンダリング処理を行ってレンダリング画像を生成する処理とを実行させる。
本実施の形態のコンピュータプログラムは、コンピュータに、前記暫定ボクセル構造体のボクセルに対して、該ボクセルのxyz方向の近傍に位置する26近傍ボクセルの不透明度又はRGB値に基づいて、前記ボクセルの不透明度又はRGB値を補正する処理を実行させる。
本実施の形態のコンピュータプログラムは、コンピュータに、前記暫定ボクセル構造体のボクセルに対して、該ボクセルのxyz方向の3つの軸方向のうちの第1軸方向の近傍に位置する2近傍ボクセルの不透明度又はRGB値に基づいて、前記ボクセルの不透明度又はRGB値を補正する処理と、前記第1軸方向の2近傍ボクセルによってボクセルの不透明度又はRGB値が補正された暫定ボクセル構造体のボクセルに対して、前記3つの軸方向のうちの第2軸方向の近傍に位置する2近傍ボクセルの不透明度又はRGB値に基づいて、前記ボクセルの不透明度又はRGB値を補正する処理と、前記第2軸方向の2近傍ボクセルによってボクセルの不透明度又はRGB値が補正された暫定ボクセル構造体のボクセルに対して、前記3つの軸方向のうちの第3軸方向の近傍に位置する2近傍ボクセルの不透明度又はRGB値に基づいて、前記ボクセルの不透明度又はRGB値を補正する処理とを実行させる。
本実施の形態のコンピュータプログラムは、コンピュータに、前記暫定ボクセル構造体の各ボクセルの2近傍ボクセルによって前記各ボクセルの不透明度又はRGB値を補正した補正値を第1バッファに記憶する処理と、第2バッファに記憶されている前記暫定ボクセル構造体の前記各ボクセルの直前に処理された直前ボクセルの2近傍ボクセルによって前記直前ボクセルの不透明度又はRGB値を補正した直前補正値により前記暫定ボクセル構造体の前記直前ボクセルの不透明度又はRGB値を更新する処理と、前記第1バッファに記憶した前記補正値を前記第2バッファに転送する処理とを実行させる。
本実施の形態のコンピュータプログラムは、コンピュータに、複数の離散的な数値とRGB値及び不透明度との関係を定義した定義情報に基づいて、所定範囲の連続的な数値とRGB値及び不透明度との関係を対応付けたカラーマップを生成する処理と、生成したカラーマップに基づいて、前記複数のxy平面画像それぞれの各画素の値に対応するRGB値及び不透明度を有するボクセルで構成される暫定ボクセル構造体を生成する処理とを実行させる。
本実施の形態のコンピュータプログラムは、コンピュータに、前記ボクセル構造体の不透明度が所定値である対象ボクセルに対して、該対象ボクセルの近傍に位置する近傍ボクセルのRGB値に基づいて、前記対象ボクセルのRGB値を補正する処理と、RGB値が補正されたボクセル構造体のボクセルで構成される3Dテクスチャ画像を生成する処理と、前記3Dテクスチャ画像に対して所定の変換を行って変換後3Dテクスチャ画像を生成する処理と、3次元空間のXY座標面上の四角形をZ軸方向に並べた積層四角形を設定する処理と、所定の視点からZ軸方向に平行な視線上の前記四角形のXY座標に対応する前記変換後3Dテクスチャ画像のボクセルのRGB値を前記ボクセルの不透明度に基づいて前記視点から遠い四角形の順にアルファブレンディングして得られたRGB値を、前記視線が投影面と交差する画素の画素値としてレンダリング画像を生成する処理とを実行させる。
本実施の形態のコンピュータプログラムは、コンピュータに、前記複数のxy平面画像を間にしてz軸方向の両端に配置されたダミーxy平面画像の各画素に対応し、不透明度が前記所定値とされたダミーボクセルを付加したボクセル構造体を生成する処理と、生成したボクセル構造体のボクセルのうち不透明度が前記所定値である対象ボクセルに対して、該対象ボクセルの近傍に位置する近傍ボクセルのRGB値に基づいて、前記対象ボクセルのRGB値を補正する処理とを実行させる。
本実施の形態のコンピュータプログラムは、コンピュータに、前記複数のxy平面画像の数及び前記ダミーxy平面画像の数の合計値と同数の前記四角形をZ軸方向に並べた積層四角形を設定する処理を実行させる。
本実施の形態のコンピュータプログラムは、コンピュータに、前記複数のxy平面画像の外縁部の各画素に対応し、不透明度が前記所定値とされたボクセルを含むボクセル構造体を生成する処理と、生成したボクセル構造体のボクセルのうち不透明度が前記所定値である対象ボクセルに対して、該対象ボクセルの近傍に位置する近傍ボクセルのRGB値に基づいて、前記対象ボクセルのRGB値を補正する処理とを実行させる。
本実施の形態のコンピュータプログラムは、コンピュータに、ボリュームレンダリング処理の対象領域を画定するxyz座標を設定する処理と、前記ボクセル構造体のボクセルのうちxyz座標が前記対象領域外のボクセルに対して、該ボクセルの不透明度に前記所定値を設定する処理と、前記所定値が設定されたボクセル構造体のボクセルのうち不透明度が前記所定値である対象ボクセルに対して、該対象ボクセルの近傍に位置する近傍ボクセルのRGB値に基づいて、前記対象ボクセルのRGB値を補正する処理とを実行させる。
本実施の形態のコンピュータプログラムは、コンピュータに、前記視線上の前記四角形のXY座標に対応する前記3Dテクスチャ画像のxyz座標を算出する処理と、算出したxyz座標に対応する前記変換後3Dテクスチャ画像のxyz座標に対応するボクセルのRGB値及び不透明度に基づいてアルファブレンディングする処理とを実行させる。
本実施の形態のコンピュータプログラムは、コンピュータに、前記ボクセル構造体のボクセルの不透明度に関する勾配ベクトルを算出する処理と、算出した勾配ベクトル及び所定の光源ベクトルに基づいて前記ボクセルの陰影値を算出する処理と、算出した陰影値に基づいて前記ボクセル構造体のボクセルのRGB値を補正する処理とを実行させる。
本実施の形態のコンピュータプログラムは、コンピュータに、前記ボクセル構造体のボクセルの不透明度と、該ボクセルの近傍に位置する近傍ボクセルそれぞれの不透明度との差分を算出する処理と、前記ボクセルと前記近傍ボクセルとの距離並びに前記ボクセル及び前記近傍ボクセルそれぞれの不透明度の差分に基づいて前記ボクセルの勾配ベクトルを算出する処理とを実行させる。
本実施の形態のコンピュータプログラムは、コンピュータに、前記ボクセル構造体のボクセルの不透明度に関する勾配ベクトルを算出することができないボクセルに対して、該ボクセルの不透明度に前記所定値を設定する処理と、前記所定値が設定されたボクセル構造体のボクセルのうち不透明度が前記所定値である対象ボクセルに対して、該対象ボクセルの近傍に位置する近傍ボクセルのRGB値に基づいて、前記対象ボクセルのRGB値を補正する処理とを実行させる。
本実施の形態のコンピュータプログラムは、コンピュータに、x軸中心、y軸中心及びz軸中心の回転角、視野角度、視点位置、クリッピング位置、xyz軸方向のオフセット値、xyz軸方向の拡大又は縮小倍率、z軸方向の変倍率を含む前記所定の変換のパラメータを取得する処理と、前記3Dテクスチャ画像に対して、取得したパタメータを用いた所定の変換を行って変換後3Dテクスチャ画像を生成する処理とを実行させる。
本実施の形態のコンピュータプログラムは、コンピュータに、前記変換後3Dテクスチャ画像を生成する処理及び前記レンダリング画像を生成する処理を実行するための指令をGPUに出力する処理を実行させる。
本実施の形態のコンピュータプログラムは、コンピュータに、前記ボクセル構造体に対して所定の座標変換を行ってボクセル画像を生成する処理と、所定の視点から仮想光線を前記ボクセル画像に向かって照射したときに、視線上のボクセル毎に該ボクセルのRGB値及び不透明度並びに前記仮想光線の透過強度の積により累積輝度値を累積加算した値に基づいて算出されるRGB値を、前記視線が投影面と交差する画素の画素値としてレンダリング画像を生成する処理とを実行させる。
本実施の形態のコンピュータプログラムは、コンピュータに、前記複数のxy平面画像のうちの所定のxy平面画像の画素の最小値及び最大値を特定する処理と、特定した最大値よりも小さい上限値及び特定した最小値よりも大きい下限値を算出する処理と、前記複数のxy平面画像の各画素の画素値を前記上限値及び下限値の範囲内に圧縮する処理と、圧縮した前記複数のxy平面画像それぞれの各画素に対応するRGB値及び不透明度を有するボクセルで構成される暫定ボクセル構造体を生成する処理とを実行させる。
本実施の形態の画像処理装置は、ボリュームレンダリング処理を行う画像処理装置であって、z軸方向に沿って所定間隔で撮像された複数のxy平面画像の画像データを取得する取得部と、前記xy平面画像の画素の値に対してRGB値及び不透明度が定められ、前記複数のxy平面画像それぞれの各画素に対応するRGB値及び不透明度を有するボクセルで構成される暫定ボクセル構造体を生成する暫定ボクセル構造体生成部と、前記暫定ボクセル構造体のボクセルに対して、該ボクセルの近傍に位置する近傍ボクセルの不透明度に基づいて、前記ボクセルの不透明度を補正してボクセル構造体を生成するボクセル構造体生成部と、前記ボクセル構造体に対してボリュームレンダリング処理を行ってレンダリング画像を生成するレンダリング画像生成部とを備える。
本実施の形態の画像処理方法は、ボリュームレンダリング処理を行う画像処理方法であって、z軸方向に沿って所定間隔で撮像された複数のxy平面画像の画像データを取得し、前記xy平面画像の画素の値に対してRGB値及び不透明度が定められ、前記複数のxy平面画像それぞれの各画素に対応するRGB値及び不透明度を有するボクセルで構成される暫定ボクセル構造体を生成し、前記暫定ボクセル構造体のボクセルに対して、該ボクセルの近傍に位置する近傍ボクセルの不透明度に基づいて、前記ボクセルの不透明度を補正してボクセル構造体を生成し、前記ボクセル構造体に対してボリュームレンダリング処理を行ってレンダリング画像を生成する。
本実施の形態のボクセルデータは、ボクセル構造体のボクセルデータであって、z軸方向に沿って所定間隔で撮像された複数のxy平面画像の画素の値に対してRGB値及び不透明度が定められ、前記複数のxy平面画像それぞれの各画素に対応するRGB値及び不透明度を有するボクセルで構成されるボクセル構造体のボクセルデータを含む構造を有し、前記ボクセルデータは、前記ボクセル構造体のボクセルに対して、該ボクセルの近傍に位置する近傍ボクセルの不透明度に基づいて、前記ボクセルの不透明度が補正されたデータを含み、前記ボクセル構造体に対してボリュームレンダリング処理を行ってレンダリング画像を生成する処理を実行するのに用いられる。
本実施の形態のボクセルデータにおいて、前記ボクセルデータは、前記ボクセル構造体のボクセルに対して、該ボクセルの近傍に位置する近傍ボクセルのRGB値に基づいて、前記ボクセルのRGB値が補正されたデータを含む。
本実施の形態のボクセルデータは、ボクセル構造体のボクセルデータであって、z軸方向に沿って所定間隔で撮像された複数のxy平面画像の画素の値に対してRGB値及び不透明度が定められ、前記複数のxy平面画像それぞれの各画素に対応するRGB値及び不透明度を有するボクセルで構成される暫定ボクセル構造体のボクセルデータを含む構造を有し、前記暫定ボクセル構造体のボクセルに対して、該ボクセルのxyz方向の3つの軸方向のうちの第1軸方向の近傍に位置する2近傍ボクセルの不透明度又はRGB値に基づいて、前記ボクセルの不透明度又はRGB値を補正する処理と、前記第1軸方向の2近傍ボクセルによってボクセルの不透明度又はRGB値が補正された暫定ボクセル構造体のボクセルに対して、前記3つの軸方向のうちの第2軸方向の近傍に位置する2近傍ボクセルの不透明度又はRGB値に基づいて、前記ボクセルの不透明度又はRGB値を補正する処理と、前記第2軸方向の2近傍ボクセルによってボクセルの不透明度又はRGB値が補正された暫定ボクセル構造体のボクセルに対して、前記3つの軸方向のうちの第3軸方向の近傍に位置する2近傍ボクセルの不透明度又はRGB値に基づいて、前記ボクセルの不透明度又はRGB値を補正する処理とを実行するのに用いられる。
本実施の形態のボクセルデータは、前記暫定ボクセル構造体の各ボクセルの2近傍ボクセルによって前記各ボクセルの不透明度又はRGB値を補正した補正値を第1バッファに記憶する処理と、第2バッファに記憶されている前記暫定ボクセル構造体の前記各ボクセルの直前に処理された直前ボクセルの2近傍ボクセルによって前記直前ボクセルの不透明度又はRGB値を補正した直前補正値により前記暫定ボクセル構造体の前記直前ボクセルの不透明度又はRGB値を更新する処理と、前記第1バッファに記憶した前記補正値を前記第2バッファに転送する処理とを実行するのに用いられる。