function [label_meanDist_stdDist, meanDist_stdDist] = evaluate_distances( TEST, TRUE, Labels, verbose ) %--------------------------------------------------------------------- % This program was used to generate the label boundary distance errors % for the paper (http://www.mindboggle.info/papers/): % % "Evaluation of 14 nonlinear deformation algorithms % applied to human brain MRI registration" % NeuroImage (2009), doi:10.1016/j.neuroimage.2008.12.037 % by Arno Klein, Jesper Andersson, Babak A. Ardekani, John Ashburner, % Brian Avants, Ming-Chang Chiang, Gary E. Christensen, D. Louis Collins, % James Gee, Pierre Hellier, Joo Hyun Song, Mark Jenkinson, Claude Lepage, % Daniel Rueckert, Paul Thompson, Tom Vercauteren, Roger P. Woods, % J. John Mann, and Ramin V. Parsey. % % Compare two sets of labeled borders for an image volume. % Determine the average minimum distances from the TRUE to the TEST labels. % % INPUT: TEST = 3-D matrix: TEST (usually automated) labels % TRUE = 3-D matrix: TRUE (manually assigned) labels % Labels = list of labels (integers) % verbose = 1x1 % % OUTPUT: [label_meanDist_stdDist, meanDist_stdDist] % %-------------------------------------------------------------- % (c) 2008, @rno klein %-------------------------------------------------------------- format compact ITEST = find( ismember(TEST,Labels)>0 ); LTRUE = ismember(TRUE,Labels)>0; B = bwdist( (LTRUE==1), 'cityblock' ); meanDist_stdDist = [mean(B(ITEST)) std(B(ITEST))]; if verbose > 1 meanDist_stdDist end %-------------------------- % Tally distances per label %-------------------------- label_meanDist_stdDist = [Labels zeros(size(Labels,1),2)]; for iLabel = 1 : size(Labels,1) Label = Labels(iLabel); I=find(TEST==Label); if size(I,1)>0 B = bwdist( (TRUE==Label), 'cityblock' ); label_meanDist_stdDist(iLabel,2:3) = [mean(B(I)) std(B(I))]; else label_meanDist_stdDist(iLabel,2:3) = [NaN NaN]; end end if verbose > 1 label_meanDist_stdDist end