MATLAB slice - eiichiromomma/CVMLAB GitHub Wiki
MATLAB) Volume Dataの断面
(ボリュームデータを貫く任意の角度の断面を表示して値を取得
ボリュームデータの補間の続きを前提としている。 直接読込んだ値を使いたい場合はslice(doubleにしたimaVOL,xd,yd,zd)でできる筈。
surf
任意の角度の平面をsurfとrotateによって作成し、getで座標を得る。
hsp=surf(1:100,1:100,zeros(100)+100);
rotate(hsp,[1,-1,1],30)
xd = get(hsp,'XData');
yd = get(hsp,'YData');
zd = get(hsp,'ZData');
rotateの第2引数は基本ベクトルで[1 0 0]でx軸についての回転となる。 回転の中心はsurfaceの中心。
座標を得たらsurfは不要
delete(hsp)
任意断面の表示
slice(xi,yi,zi,vi,xd,yd,zd)
値の取得
sliceの返り値がハンドルとなる
H=slice(xi,yi,zi,vi,xd,yd,zd)
surfaceのプロパティはHandle Graphics Properties で定義されている。
ここで使えそうなのは
CData 行列
頂点のカラー。 ZDataの中のすべての点でのカラーを指定した値を含む行列。
FaceColorプロパティをtexturemapに設定すると、CDataは、ZDataと同じ大きさになる必要はありません。
この場合、MATLABは、CDataをZDataで定義されるサーフェスを確保できるようにマッピングします。
というわけで
slicevalue=get(H,'CData')
とすると、それらしい値が得られた。
おまけに
VertexNormals ベクトル、または、行列
サーフェスの法線ベクトル。このプロパティは、Surfaceに対する頂点の法線を含んでいます。
MATLAB は、ライティングの計算を行うためこのデータを作成します。
座標データと一致していなくても、ユーザ自身の頂点の法線データを提供することができます。
これは興味のあるライティング効果の作成に有効です。
なんてのもあるので
slicenormal=get(H,'VertexNormals')
で法線ベクトル群が得られる。 平面なので全部同じ値。
線が邪魔
大きいスライスを表示しようとすると、メッシュの線が邪魔になる。 スライスを表示している状態で
set(H,'LineStyle','none')
とすれば線が消える。