Home > vbmeg > functions > brain > vb_find_neighbor_val.m

vb_find_neighbor_val

PURPOSE ^

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

SYNOPSIS ^

function [nextID, nextPP, nextDD] =vb_find_neighbor_val(Rmax,Pindx,Pmin,xxF,xxD,Pval,Vindx)

DESCRIPTION ^

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 隣接近傍点リスト( xxF ) とその距離( xxD ) を使って
 皮質に沿って測った距離が指定された半径以内にある点を探索する
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 INPUT
   Rmax    : 最大半径
   Pindx    : 中心点のインデックス
   Pmin     : Pmin より大きい強度を持つ点を探す
   xxF{i}  : 隣接近傍点インデックス
   xxD{i}    : 隣接近傍点距離
   Pval     : 強度
   Vindx    : 探索するインデックスの範囲, Pval(n) <-> Vindx(n)
 OUTPUT
   nextID  : 近傍点インデックス
   nextDD    : 近傍点距離
   nextPP    : 近傍点の強度

 Made by Masa-aki Sato on 2003/4/26

 Copyright (C) 2011, ATR All Rights Reserved.
 License : New BSD License(see VBMEG_LICENSE.txt)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 アルゴリズム : 最近傍点リストを用いた Tree 探索
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1.自分自身をルートにする
2.各ルート点の隣接近傍点の集合を候補点リストに登録する
3.候補点リストの中でこれまでに試されていない新しい候補点を抽出する
4.出発点から候補点までの累積距離を計算(経路に依存)
5.出発点から候補点までの最短累積距離を求める
6.累積距離が指定半径以内にあり強度が閾値以上の点を見つける
7.上記の点を新しいルートにして2.へ戻る
8.指定半径以内にある新しいルートが無くなったときに終了

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function [nextID, nextPP, nextDD] = ...
0002             vb_find_neighbor_val(Rmax,Pindx,Pmin,xxF,xxD,Pval,Vindx)
0003 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0004 % 隣接近傍点リスト( xxF ) とその距離( xxD ) を使って
0005 % 皮質に沿って測った距離が指定された半径以内にある点を探索する
0006 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0007 % INPUT
0008 %   Rmax    : 最大半径
0009 %   Pindx    : 中心点のインデックス
0010 %   Pmin     : Pmin より大きい強度を持つ点を探す
0011 %   xxF{i}  : 隣接近傍点インデックス
0012 %   xxD{i}    : 隣接近傍点距離
0013 %   Pval     : 強度
0014 %   Vindx    : 探索するインデックスの範囲, Pval(n) <-> Vindx(n)
0015 % OUTPUT
0016 %   nextID  : 近傍点インデックス
0017 %   nextDD    : 近傍点距離
0018 %   nextPP    : 近傍点の強度
0019 %
0020 % Made by Masa-aki Sato on 2003/4/26
0021 %
0022 % Copyright (C) 2011, ATR All Rights Reserved.
0023 % License : New BSD License(see VBMEG_LICENSE.txt)
0024 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0025 % アルゴリズム : 最近傍点リストを用いた Tree 探索
0026 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0027 %1.自分自身をルートにする
0028 %2.各ルート点の隣接近傍点の集合を候補点リストに登録する
0029 %3.候補点リストの中でこれまでに試されていない新しい候補点を抽出する
0030 %4.出発点から候補点までの累積距離を計算(経路に依存)
0031 %5.出発点から候補点までの最短累積距離を求める
0032 %6.累積距離が指定半径以内にあり強度が閾値以上の点を見つける
0033 %7.上記の点を新しいルートにして2.へ戻る
0034 %8.指定半径以内にある新しいルートが無くなったときに終了
0035 
0036 %%%%%%%% Initialization %%%%%%%%%%
0037 
0038 % Vindx    : 探索するインデックスの範囲, Pval(n) <-> Vindx(n)
0039 % 頂点インデックスを Pval のインデックスに変換
0040 Npoint      = size(xxF,1);
0041 ID          = zeros(Npoint,1);
0042 ID(Vindx) = (1:length(Vindx))';
0043 
0044 nextID  = Pindx;     % 近傍点インデックス
0045 nextDD    = 0;        % 近傍点累積距離
0046 nextPP  = Pval( ID(Pindx) );        % 強度リスト
0047 
0048 itree    = 0;          % tree number
0049 rootix    = Pindx;      % ルートのインデックス
0050 rootd    = 0;          % ルートの累積距離
0051 
0052 %%%%% Tree search %%%%%
0053 
0054 while itree==0 | ~isempty(rootix),  
0055     itree     = itree+1;
0056     nroot     = size(rootix,1); % ルートの数
0057     
0058     % 候補点 : 全てのルートの隣接近傍点
0059     ixlist = []; % 隣接近傍点インデックス
0060     ddlist = []; % 隣接近傍点への累積距離
0061     
0062     for i=1:nroot, 
0063         iroot  = rootix(i);    % ルートのインデックス
0064         ixlist = [ixlist; xxF{iroot}];                 % 隣接近傍点インデックス
0065         ddlist = [ddlist; xxD{iroot} + rootd(i) ];    % 隣接近傍点への累積距離
0066     end;
0067     
0068     % 候補点の絞り込み
0069     ixuniq = unique(ixlist);              % 重複インデックスを削除
0070     nextix = vb_setdiff2(ixuniq,nextID);      % 探索済みのインデックスを削除
0071 
0072     % 探索範囲のインデックスを抽出
0073     ixid   = ID(nextix);
0074     ixz    = find( ixid > 0 );     % nextix の中で Vindx に含まれるものを抽出
0075     ixid   = ixid(ixz);            % nextix に対応する Pval インデックス
0076     
0077     % 強度が Pmin 以上の点を抽出
0078     ixval  = find( Pval( ixid ) >= Pmin );
0079     nextix = nextix( ixz(ixval) );
0080     nextP  = Pval( ixid(ixval) );
0081     
0082     % 探索候補点インデックス
0083     nextix = nextix(:);
0084     Nnext  = length(nextix);
0085     nextd  = zeros(Nnext,1);
0086     
0087     for i=1:Nnext,  % Loop of new dipoles
0088         % nextix(i) が ixlist の何番目のインデックスか調べる
0089         jx = find( nextix(i)==ixlist );
0090         
0091         % nextix(i) への最短累積距離
0092         nextd(i) = min(ddlist(jx)); 
0093     end
0094     
0095     % 最大半径以内の候補点を探す
0096     okix    = find(nextd<Rmax);      % 最大半径以内の候補点を探す
0097     rootix    = nextix(okix);          % 最大半径以内の候補点(次回のルート点)
0098     rootd    = nextd(okix);          % 最短累積距離
0099     nextP    = nextP(okix);          % 強度
0100 
0101     % 近傍点リスト
0102     nextID = [nextID ; rootix ];     % 近傍点リスト
0103     nextDD = [nextDD ; rootd  ];      % 最短累積距離
0104     nextPP = [nextPP ; nextP  ];      % nextID に対応する強度
0105 end

Generated on Mon 22-May-2023 06:53:56 by m2html © 2005