Home > functions > plotfunc > vb_plot_brain.m

vb_plot_brain

PURPOSE ^

SYNOPSIS ^

function h = vb_plot_brain(plot_parm)

DESCRIPTION ^

 脳モデル上に強度分布を表示する(絶対値表示)
 2003-07-02 Taku Yoshioka

 plot_parm.brainfile: 全脳データファイル名
 plot_parm.areafile : 領域情報ファイル名
 plot_parm.J        : (電流などの)強度分布 全脳頂点数 x 1
 plot_parm.cmap     : 強度分布カラーマップ   1 hot   2 jet
 plot_parm.wmode    : 強度分布表示   1 絶対値   2 実数値
 plot_parm.wmax     : 強度分布を[0 w](または[-w w])で
                      スケーリングする w=max(abs(J))*wmax
 plot_parm.wmin     : w以上の強度を表示する w=max(abs(J))*wmin
 plot_parm.index    : 脳モデルの表示したい部分を表す頂点集合
 plot_parm.color    : 脳モデルの色を指定
 plot_parm.paint    : 1 点表示   2 面表示
 plot_parm.priority : 2ならば領域情報を強度情報の上に表示
 plot_parm.LRflag   : L/R/LR
 plot_parm.norm     : 2ならば強度情報を面積で正規化して表示
 plot_parm.cmax     : 強度分布絶対スケール(wmaxより優先される)

 --- 領域情報(省略可)
 plot_parm.area.key{i} : 領域ID
 plot_parm.area.clr{i} : 領域をこの色で表示
 plot_parm.area.str{i} : 表示する文字(省略可)
 plot_parm.Rlabel      : 文字と領域の距離(1で領域表面に文字表示)
 plot_parm.area.fs     : フォントサイズ

 ・length(J)==0ならば強度分布を無視して脳モデルを表示
 ・length(index)==0ならば全脳モデル表示

 2003-07-24
 ・強度の実数表示に対応
 2003-07-27
 ・領域情報に基づいて表面に色をつける
 2003-07-29
 ・バグ修正(全脳表示時に強度情報が表示されない、Displayパラメータ
 の設定がおかしい)
 2003-10-08
 ・関数を見直し、パラメータ名を少し変更
 2003-10-17
 ・領域情報と強度情報を表示する順番をplot_parm.orderで変更可能に
 2003-11-13
 ・領域半透明表示機能を追加
 2004-02-20
 ・parm構造体を使わないようにする。
 2004-03-25
 ・order->priority
 ・threshold->wmin(相対値)
 ・パラメータ`paint'の追加
 ・wmaxを相対値にする
 ・display->cmap,wmodeに分ける
 ・plot_parm.area.R->plot_parm.Rlabel
 ・plot_parm.area.fs->plot_parm.fs


 Copyright (C) 2011, ATR All Rights Reserved.
 License : New BSD License(see VBMEG_LICENSE.txt)

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SUBFUNCTIONS ^

SOURCE CODE ^

0001 function h = vb_plot_brain(plot_parm)
0002 %
0003 % 脳モデル上に強度分布を表示する(絶対値表示)
0004 % 2003-07-02 Taku Yoshioka
0005 %
0006 % plot_parm.brainfile: 全脳データファイル名
0007 % plot_parm.areafile : 領域情報ファイル名
0008 % plot_parm.J        : (電流などの)強度分布 全脳頂点数 x 1
0009 % plot_parm.cmap     : 強度分布カラーマップ   1 hot   2 jet
0010 % plot_parm.wmode    : 強度分布表示   1 絶対値   2 実数値
0011 % plot_parm.wmax     : 強度分布を[0 w](または[-w w])で
0012 %                      スケーリングする w=max(abs(J))*wmax
0013 % plot_parm.wmin     : w以上の強度を表示する w=max(abs(J))*wmin
0014 % plot_parm.index    : 脳モデルの表示したい部分を表す頂点集合
0015 % plot_parm.color    : 脳モデルの色を指定
0016 % plot_parm.paint    : 1 点表示   2 面表示
0017 % plot_parm.priority : 2ならば領域情報を強度情報の上に表示
0018 % plot_parm.LRflag   : L/R/LR
0019 % plot_parm.norm     : 2ならば強度情報を面積で正規化して表示
0020 % plot_parm.cmax     : 強度分布絶対スケール(wmaxより優先される)
0021 %
0022 % --- 領域情報(省略可)
0023 % plot_parm.area.key{i} : 領域ID
0024 % plot_parm.area.clr{i} : 領域をこの色で表示
0025 % plot_parm.area.str{i} : 表示する文字(省略可)
0026 % plot_parm.Rlabel      : 文字と領域の距離(1で領域表面に文字表示)
0027 % plot_parm.area.fs     : フォントサイズ
0028 %
0029 % ・length(J)==0ならば強度分布を無視して脳モデルを表示
0030 % ・length(index)==0ならば全脳モデル表示
0031 %
0032 % 2003-07-24
0033 % ・強度の実数表示に対応
0034 % 2003-07-27
0035 % ・領域情報に基づいて表面に色をつける
0036 % 2003-07-29
0037 % ・バグ修正(全脳表示時に強度情報が表示されない、Displayパラメータ
0038 % の設定がおかしい)
0039 % 2003-10-08
0040 % ・関数を見直し、パラメータ名を少し変更
0041 % 2003-10-17
0042 % ・領域情報と強度情報を表示する順番をplot_parm.orderで変更可能に
0043 % 2003-11-13
0044 % ・領域半透明表示機能を追加
0045 % 2004-02-20
0046 % ・parm構造体を使わないようにする。
0047 % 2004-03-25
0048 % ・order->priority
0049 % ・threshold->wmin(相対値)
0050 % ・パラメータ`paint'の追加
0051 % ・wmaxを相対値にする
0052 % ・display->cmap,wmodeに分ける
0053 % ・plot_parm.area.R->plot_parm.Rlabel
0054 % ・plot_parm.area.fs->plot_parm.fs
0055 %
0056 %
0057 % Copyright (C) 2011, ATR All Rights Reserved.
0058 % License : New BSD License(see VBMEG_LICENSE.txt)
0059 
0060 if isfield(plot_parm,'color') & ~isempty(plot_parm.color)
0061   fclr = plot_parm.color;
0062 else
0063   fclr = [0.8 0.8 0.8];
0064 end
0065 
0066 % 脳モデルのロード
0067 [V,F,xx,inf_C,xxA]= vb_load_cortex(plot_parm.brainfile);
0068 V = V .* 1000; % [m] => [mm]
0069 % 脳モデルの中心
0070 V0 = mean(V);
0071 
0072 % 左脳/右脳表示切替え
0073 switch plot_parm.LRflag
0074  case 'L'
0075   F0 = F.F3L;
0076  case 'R'
0077   F0 = F.F3R;
0078  case 'LR'
0079   F0 = F.F3;
0080 end
0081 
0082 % 強度情報
0083 J = plot_parm.J;
0084 if plot_parm.norm==2
0085   J = J./xxA;
0086 end
0087 
0088 if isfield(plot_parm,'cmax')
0089   wmax = plot_parm.cmax;
0090 else
0091   wmax = plot_parm.wmax*max(abs(J(:)));
0092 end
0093 wmin = plot_parm.wmin*max(abs(J(:)));
0094 index = plot_parm.index;
0095 
0096 %
0097 % 脳モデルの表示
0098 %
0099 
0100 % 面を選択
0101 if length(index) == 0
0102   FF = F0;
0103 else
0104   FF = vb_patch_select2(index,F0,size(V,1));
0105 end
0106 
0107 % 面を表示
0108 h = patch('Faces',FF,'Vertices',V,'FaceColor',fclr,...
0109           'FaceLighting','phong','EdgeColor','none');
0110 material dull;
0111 hold on;
0112 
0113 if isfield(plot_parm,'priority') & plot_parm.priority==2
0114   plot_value(plot_parm,V,F0,J,index,wmin,wmax);
0115   plot_area(plot_parm,V,F0,index,V0);
0116 else
0117   plot_area(plot_parm,V,F0,index,V0);
0118   plot_value(plot_parm,V,F0,J,index,wmin,wmax);
0119 end
0120 
0121 function plot_area(plot_parm,V,F0,index,V0);
0122 %
0123 % 領域の表示
0124 %
0125 if isfield(plot_parm,'area')
0126   if isempty(index)
0127     tmp = ones(size(V,1),1);
0128   else
0129     tmp = zeros(size(V,1),1);
0130     tmp(index) = 1;
0131   end
0132 
0133   % 半透明表示
0134   if isfield(plot_parm.area,'transparent') & ...
0135     plot_parm.area.transparent
0136     alpha = 0.5;
0137   else
0138     alpha = 1;
0139   end
0140 
0141   for i = 1:length(plot_parm.area.key)
0142     Area = vb_get_area(plot_parm.areafile,plot_parm.area.key{i});
0143     ix = Area.Iextract;
0144     ix = ix(:);
0145     ix = ix(find(ix .* tmp(ix))); % 表示部分に含まれる頂点
0146 
0147     % 点表示/パッチ表示
0148     Nclr = length(plot_parm.area.clr);
0149     if plot_parm.paint==1
0150       ix2 = intersect(ix,unique(F0(:)));
0151       plot3(V(ix2,1),V(ix2,2),V(ix2,3),'.',...
0152         'MarkerFaceColor',plot_parm.area.clr{1+mod(i-1,Nclr)},...
0153         'MarkerEdgeColor',plot_parm.area.clr{1+mod(i-1,Nclr)},...
0154         'MarkerSize',plot_parm.ms);
0155     else
0156       FF = vb_patch_select2(ix,F0,size(V,1));
0157       patch('Faces',FF,'Vertices',V,...
0158         'FaceColor',plot_parm.area.clr{1+mod(i-1,Nclr)},...
0159         'EdgeColor','none','FaceLighting','none',...
0160         'FaceAlpha',alpha);
0161     end
0162 
0163     % 文字表示
0164     if isfield(plot_parm.area,'str') & ...
0165       ~isempty(plot_parm.area.str) & length(FF) > 0
0166       pos = median(V(ix,:)) - V0;
0167       [theta,phi,r] = cart2sph(pos(1),pos(2),pos(3));
0168       r = plot_parm.Rlabel * r;
0169 
0170       [x,y,z] = sph2cart(theta,phi,r);
0171       x = x + V0(1);
0172       y = y + V0(2);
0173       z = z + V0(3);
0174       pos = pos + V0;
0175       plot3([pos(1) x],[pos(2) y],[pos(3) z]);
0176       h = text(x,y,z,plot_parm.area.str{i},...
0177            'Interpreter','none','FontSize',plot_parm.fs,...
0178            'HorizontalAlignment','center');
0179     end
0180   end
0181 end
0182 
0183 function plot_value(plot_parm,V,F0,J,index,wmin,wmax);
0184 %
0185 % 強度の表示
0186 %
0187 
0188 if length(J) == 0
0189   return;
0190 end
0191 
0192 % 面を選択
0193 if length(index) == 0
0194   tmp = ones(length(J),1);
0195 else
0196   tmp = zeros(length(J),1);
0197   tmp(index) = 1;
0198 end
0199 
0200 % 左脳/右脳
0201 tmp2 = zeros(length(J),1);
0202 tmp2(unique(F0(:))) = 1;
0203 
0204 tmp = J.*tmp.*tmp2;
0205 ix = find(abs(tmp) >= wmin);
0206 if plot_parm.wmode==1
0207   J = abs(J);
0208 end
0209 
0210 % 強度を脳モデルに重ねて表示
0211 if plot_parm.paint==1
0212   h = scatter3(V(ix,1),V(ix,2),V(ix,3),1,J(ix),'.','filled');
0213   set(h,'MarkerSize',plot_parm.ms);
0214 else
0215   FF = vb_patch_select2(ix,F0,size(V,1));
0216   patch('Faces',FF,'Vertices',V,'FaceColor','interp',...
0217     'FaceVertexCData',J,'EdgeColor','none',...
0218     'FaceLighting','none');
0219   material dull;
0220 end
0221 
0222 if plot_parm.wmode==1
0223   caxis([0 wmax]);
0224 else
0225   caxis([-wmax wmax]);
0226 end
0227 
0228 if plot_parm.cmap==1
0229   colormap(hot);
0230 else
0231   colormap(jet);
0232 end
0233

Generated on Tue 27-Aug-2013 11:46:04 by m2html © 2005