■ 平面の画像を立体として見る

2002/09/03 Nishimura Hiromi

 MRI 断層装置は水素原子核の核磁気共鳴を利用し生体の任意断層の水分布画像を撮影します。生体の水分布画像は解剖を見ているような綺麗な画像です。MRI 断層装置は形態(構造)の画像を得る装置ですが機能を撮影する PET 断層装置があります。陽電子崩壊を利用したもで脳の任意の断層の血流量分布画像を撮影することができます。この撮影装置をポジトロンエミッションCT(PET)と言います。

 断層撮影ですから、得られる画像は平面です。例えば下記のような画像です。

a = loadImage("02-1923.001.dvi",25);
RGB = popRGBColor(0);
densityPlot(a,|7000,0|);
RGB = popRGBColor(1);
densityPlot(a,|7000,0|);

.OK.

 左は血流量を擬似カラーで表現した画像。右は血流量をモノクロで表現した画像です。両者とも明るいところが血流量が多い領域です。

● このデータを血流量を高さにし鳥瞰図で表現してみる。

 画像データを view3D 関数を使って描画すると鳥瞰図が得られます。

frameLineDraw(0);
changeCopyBitsMode(1);
setView3D(|200,200,0,55,1000,1|);
RGB = popRGBColor(0);
view3DColor(smooth(a));
RGB = popRGBColor(1);
view3DColor(smooth(a));

.OK.

 血流量を高さで表現する。これまで平面で見てきた画像を別の視点で見ることになり面白いのではないでしょうか。

● parametricPlot3D 関数も試してみよう。

 view3D 関数は面倒な設定なしで立体的な画像を見ようとするものです。実際には細かな設定ができる parametricPlot3D 関数を使います。

x = |0,127||0,127|-63.5;
x = hokan(x,128,128);
y = x';
frameLineDraw(0);
changeCopyBitsMode(1);
RGB = popRGBColor(1);
setParametricPlot3D(|300,300,0,55,1000,0.09|);
parametricPlot3DColor(x,y,smooth(a/200))*1.4;

.OK.

 このように影を付けた立体感のある画像の方が見やすいと思います。

● 擬似的に解像度を倍にし綺麗に表示させてみる。

 オリジナルの画像データは 128x128 ピクセルの小さな画像データです。そのため上記画像のように大きく表示するとピクセルが拡大され荒く綺麗ではありません。そこでオリジナル画像を3次スプライン補間で2倍の大きさの 256x256 ピクセルに変換します。それで画像を作ってみます。

x = |0,127||0,127|-63.5;
x = hokan(x,256,256);
y = x';
frameLineDraw(0);
changeCopyBitsMode(1);
RGB = popRGBColor(1);
setParametricPlot3D(|300,300,0,55,1000,0.09|);
b = hokan(smooth(a/200),256,256);
b#= parametricPlot3DColor(x,y,b)*1.4;
b#;

.OK.

 このように補間すると大きな画像でもピクセルの荒が見えなくなります。画像で谷の部分が脳血流量が少ない領域です。中央部の谷は側脳室で脳脊髄液があるため血流はありません。本来、脳は左右対称に近いです。でも上記画像では左下に大きな谷が見えます。この領域で血流が低下していることが判ります。

● 鳥瞰図と同じように高さを擬似カラーで表現

 影を付けると立体感が増し綺麗なのですが本来の血流量の値を確認することができません(山を斜めからみるとどちらが高いか判らない!)。これでは綺麗だけで何の意味もない画像になってしまいます。そこで鳥瞰図のように parametricPlot3D 関数で高さを擬似カラーで表現してみます。

x = |0,127||0,127|-63.5;
x = hokan(x,256,256);
y = x';
frameLineDraw(0);
changeCopyBitsMode(1);
RGB = popRGBColor(0);
setParametricPlot3D(|300,300,0,55,1000,0.09|);
b = hokan(smooth(a/200),256,256);
aa= hokan(a,256,256);
c#= parametricPlot3DColor(aa,x,y,b,|7000,0|);
c#;

.OK.

 高さを擬似カラーで表現できるようになりました。でも影が付かない画像になってしまい立体感が乏しくなってしまいました。

● 高さを擬似カラーにしても立体感がないので画像を合成

 影を付けると高さが判らない。高さを擬似カラーにすると影がなくなり立体感が乏しい画像になってしまう。

 でも大丈夫です。高さを擬似カラーでしかも影も付ける。これには二枚の画像の合成を行うと解決します。

graphOpeMode(1);
graphBlendLevel(|3,3,3|/10);
b#・c#;

.OK.

 これまで平面の画像を単に上から見ていただけですが、上記のように斜めから見る。視点を変えて見るとこれまでにない新しい発想が思い浮かぶのではないでしょうか。

 学問的にこのような表現に何の意味があるのかと問われても私には判りません。ただ表現の選択肢が広がるだけです。それだけでも何らかの意味があると思います。