Working with Talairach coordinates

Finding coordinates near to a specified coordinate

Using a Talairach coordinate from a musical processing study [Vuust et al., 2004] the following code searches for the coordinates in the Brede database that are spatially close to to the given. The last command will (try to) open a web-browser with the result.

% Load the Brede database
if ~exist('B')
  load wobibs

% Peter Vuust coordinates from his poster
X = [ -54 10 -2 ; 54 10 -4 ] / 1000;
Lvuust = brede_loc_mat2loc(X, 'Description', 'Peter Vuust et al 2004 Keep the Rhythm"');

% Convert to Talairach
Lvuust = brede_loc_xform(Lvuust, 'type', 'mni2tal');

% Find closest coordinates
[Lout, dist] = brede_loc_query(Lvuust(2), 'bib', B);

% Add distance to a 'distance' field
for n = 1:length(Lout)
  Lout{n}.distance = dist(n) * 1000;

% Write results to HTML file
fields = { 'INDEX' 'distance' 'lobarAnatomy' 'coord' 'woexp' 'wobib' };
brede_loc_loc2html(Lout(1:20), 'File', 'VuustP2004Keep.html', 'Fields', fields);

% Call web browser
web(['file://' pwd filesep 'VuustP2004Keep.html'], '-browser')

Finding perirhinal coordinates

If we (e.g., Thomas Zoëga Ramsøy and Finn Årup Nielsen) want to find locations that appear in the perirhinal cortex we may search with the Brede database web-pages with Google, e.g., with ``perirhinal WOEXP''. Presently, this results in only one item: [Tillfors et al., 2001]! And in this paper Talairach locations appear in left and right side positioned at $ (\pm 37, -39, -22)$. The coordinates can now be used to query the full Brede database for close by coordinates to identify locations that are not termed ``perirhinal'' but might be located in this area.

% Load the Brede database
if ~exist('B')
  load wobibs

% Find closest coordinates to the perirhinal coordinate
[Lout, dist] = brede_loc_query([37 -39 -22]/1000, 'bib', B);

% Add distance to a 'distance' field in millimeter
for n = 1:length(Lout)
  Lout{n}.distance = dist(n) * 1000;

% Write results to HTML file
fields = { 'INDEX' 'distance' 'lobarAnatomy' 'coord' 'woexp' 'wobib' };
brede_loc_loc2html(Lout(1:20), 'File', 'right.html', 'Fields', fields);

% Call web browser
web(['file://' pwd filesep 'right.html'], '-browser')

Finding posterior cingulate locations in the Brede Database

The following example identifies the coordinates that are ``approximately'' in the posterior cingulate area. The first commands load the Brede Database and convert the information to ``loc'' and ``mat'' structures containing the individual locations and coordinates:

if ~exist('B')
  % Load the Brede database from wobibs.mat
  load wobibs;
if ~exist('Mall')
  % Mall is a 'mat' structure containing all Talairach coordinates in
  % the Brede database
  Lall = brede_bib_bib2loc(B);
  Mall = brede_loc_loc2mat(Lall);
Next all the coordinates are found that have the phrase ``posterior cingulate'' in the ``lobarAnatomy'' field of the ``loc'' structures:
if ~exist('Mpcc')
  % Identify the coordinates labeled 'posterior cingulate'
  Lpcc = brede_struct_select(Lall, 'where', { 'lobarAnatomy' 'findstri', ...
      'posterior cingulate' });
  Mpcc = brede_loc_loc2mat(Lpcc)
We could stop here and call all the locations in the Lpcc variable the ``posterior cingulate coordinates''. However, if we also want the coordinates that lie in the posterior cingulate area and that are not labeled with the phrase ``posterior cingulate'' we can proceed by modeling the distribution of coordinates found so far. Here a robust kernel density estimate is used (a ``Specht'' kernel) where the 5% of the most extreme coordinates (in term of probability density) are excluded [Nielsen and Hansen, 2002c,Nielsen et al., 2001]:
if ~exist('Mpccc')
  % Construct a probability density volume for posterior cingulate
  e = brede_pde_spechtlp(Mpcc.matrix, Mpcc.matrix, 0.01);

  % A compact (robust) probability density
  [sorte, i] = sort(-e);
  j = i(1:ceil(length(i)*0.95));
  Lpccc = Lpcc(j);
  Mpccc = brede_loc_loc2mat(Lpccc);
Now the Lpccc contains the ``cleaned'' posterior cingulate locations. The location with the lowest probability density value from a leave-one-out cross-validation is selected for a threshold value:
% Leave-one-out cross-validation to find a suitable treshold in the 
% probability density volume 
clear e
for n = 1:length(Lpccc)
  m = brede_mat_submatrix(Mpccc, 'rows', n);
  M0 = brede_mat_submatrix(Mpccc, 'rows', setdiff(1:length(Lpccc), n));
  e(n) = brede_pde_spechtlp(m.matrix, M0.matrix, 0.01);
  if ~mod(n,10)
    hist(e, sqrt(n))
threshold = min(e)
Finally, the threshold value is used to search among of the locations in the Brede Database. All the locations that have a higher probability density value than the threshold are included as ``posterior cingulate'' coordinates.
% Find coordinates in the PCC area - that are not outliers and that
% are not necessarily labeled 'posterior cingulate'
e = brede_pde_spechtlp(Mall.matrix, Mpccc.matrix, 0.01);
i = find( e>threshold );
Lpccr = Lall(i);
Among the locations are now also locations that have been termed, e.g., ``precuneus'' if these lie sufficient anterior.

Finding a representative coordinate for a brain region

If just a single ``representative'' coordinate is wanted for a brain region, say ``superior temporal gyrus'', the brede_roi_woroi2loc function can be used. This function takes the WOROI brain region as input argument and returns a 'loc' structure (i.e., location with Talairach coordinate).

% Be sure that the 'wobibs.mat' is in the present working directory
% (downloaded from the Brede Database homepage (or else the reading of
% the database will take a very long time).

% Extract 'WOROI 20' locations (locations from superior temporal gyrus)
L20 = brede_roi_woroi2loc(20, 'info', 15);

Finn Årup Nielsen 2012-09-27