Reply To: Curve Toolbox – Curve lenght

#1524
David Shattuck
Keymaster

    hi Davide –

    We don’t have tools for that as part of the package, but if you are familiar with Matlab or C++ you can calculate these lengths pretty easily. If you save out the curves as a .dfc file, you can then read them with one of our file readers.

    You can find a Matlab function for reading the dfc file at the bottom of this page: http://brainsuite.org/formats/dfc/. (I think it is out

    function [curves,hdr,xml]=readdfc(filename)
    % READDFC reads a BrainSuite curve file.
    %
    % Author : David Shattuck, UCLA Brain Mapping Center
    fid=fopen(filename,'rb');
    if (fid<0)
        error(['unable to open file ' filename(:)']);
    end;
    hdr.magic=char(fread(fid,8,'char')');
    hdr.version=fread(fid,4,'uchar');
    hdr.headerSize=fread(fid,1,'uint32');
    hdr.dataStart=fread(fid,1,'uint32');
    hdr.metadataOffset=fread(fid,1,'int32');
    hdr.subjectDataOffset=fread(fid,1,'int32');
    hdr.nCurves=fread(fid,1,'int32');
    fseek(fid,hdr.metadataOffset,'bof');
    xml=char(fread(fid,hdr.dataStart-hdr.metadataOffset,'char')');
    curves=cell(hdr.nCurves,1);
    fseek(fid,hdr.dataStart,'bof');
    for i=1:hdr.nCurves;
        nPoints=fread(fid,1,'uint32');
        curves{i}=fread(fid,[3 nPoints],'float32')';
    end;
    fclose(fid);

    The curves are represented as a series of points in mm coordinates, so you can compute the path lengths very easily:

    function curvelength=curvelength(curve)
    curvelength=sum(sqrt(sum((curve(2:size(curve,1),:)-curve(1:size(curve,1)-1,:)).^2,2)));

    If you then read in a dfc, you can easily compute the length of any of the curves:

    curveset=readdfc('/Applications/BrainSuite18a/svreg/BCI-DNI_brain_atlas/BCI-DNI_brain.right.dfc');
    curvelength(curveset{1})
    

    Let us know if that does what you need.

    thanks,
    David Shattuck