External Email - Use Caution
Hello,
I downloaded the Freesurfer ver 5.3.0 and installed it on Mac OS.
I run *"recon-all -s <subject> -local GI" *for my subject.. And I run *Matlab Script* about "*Start up" , "make_outer_surface", "make_roi_paths" , "find correspoding center" *as follows:
But it exited with same *errors* as follows:
Please Could you tell me the way for correcting that error and to calculate the LGI?
*the error message is..*
Thank you very much.
Best Regards,
Subin
=====================[Mac OS Error]======================
-------- freesurfer-Darwin-lion-stable-pub-v5.3.0 --------
Setting up environment for FreeSurfer/FS-FAST (and FSL)
FREESURFER_HOME /Applications/freesurfer
FSFAST_HOME /Applications/freesurfer/fsfast
FSF_OUTPUT_FORMAT nii.gz
SUBJECTS_DIR /Applications/freesurfer/subjects
MNI_DIR /Applications/freesurfer/mni
FSL_DIR /usr/local/fsl
Chans-iMac:subjects roh$ recon-all -s test01_t1 -localGI
Subject Stamp: freesurfer-Darwin-lion-stable-pub-v5.3.0
Current Stamp: freesurfer-Darwin-lion-stable-pub-v5.3.0
INFO: SUBJECTS_DIR is /Applications/freesurfer/subjects/test01_t1
Actual FREESURFER_HOME /Applications/freesurfer
-rw-rw-r-- 1 roh staff 468188 May 18 16:01 /Applications/freesurfer/subjects/test01_t1/test01_t1/scripts/recon-all.log
Darwin Chans-iMac.local 13.4.0 Darwin Kernel Version 13.4.0: Mon Jan 11 18:17:34 PST 2016; root:xnu-2422.115.15~1/RELEASE_X86_64 x86_64
/Applications/freesurfer/subjects/test01_t1/test01_t1/surf
#--------------------------------------------
#@# Local Gyrification Index lh Fri May 18 17:36:00 KST 2018
\n mris_compute_lgi --i lh.pial \n
ERROR: Matlab is required to run mris_compute_lgi!
Darwin Chans-iMac.local 13.4.0 Darwin Kernel Version 13.4.0: Mon Jan 11 18:17:34 PST 2016; root:xnu-2422.115.15~1/RELEASE_X86_64 x86_64
recon-all -s test01_t1 exited with ERRORS at Fri May 18 17:36:00 KST 2018
For more details, see the log file /Applications/freesurfer/subjects/test01_t1/test01_t1/scripts/recon-all.log
To report a problem, see http://surfer.nmr.mgh.harvard.edu/fswiki/BugReporting
===============================================================
*the Matlab Scripts are..*
=================[Matlab Script: StartUp]======================
% freesurfer start
fshome = getenv('FREESURFER_HOME');
fsmatlab = sprintf('%s/matlab',fshome);
if (exist(fsmatlab) == 7)
path(path,fsmatlab);
end
clear fshome fsmatlab;
=================[Matlab Script: make_outer_surface]================
function make_outer_surface (filled_volume, se_diameter, output_surface)
% Original Author: Marie Schaer
% Date: 2007/11/14
%
% This function takes as an input the binary volume resulting of the
% filling of the any surface (usually the pial one) using mris_fill, and
% will close the sulci using morphological operation, with a sphere as the
% structural element.
%
% Parameters:
% se_diameter is the diameter of the sphere (in mm), use 15mm by default
% to close the sulci.
%
% Utilities to write the surface to the freesurfer format are modified from
% "freesurfer_write_surf" (from Darren Weber's bioelectromagnetism toolbox),
% according to a suggestion by Don Hagler in FreeSurfer's mailing list on
% August 3, 2007.
%
% Example: make_outer_surface('lh.pial.mgz',15,'lh.outer-pial')
fprintf('reading filled volume...\n');
vol=MRIread(filled_volume);
volume=vol.vol;
volume(volume==1)=255;
fprintf('closing volume...\n');
% first apply a very soft gaussian filter, with sigma = 1mm, in order to
% facilitate the closing
Gaussian = fspecial('gaussian',[2 2],1);
image_f=zeros(256,256,256);
for slice=1:256
temp = double(reshape(volume(:,:,slice),256,256));
image_f(:,:,slice) = conv2(temp,Gaussian,'same');
end
image2=zeros(size(image_f));
image2(image_f<=25)=0;
image2(image_f>25)=255;
se=strel('ball',se_diameter,se_diameter);
BW2=imclose(image2,se);
thresh = max(BW2(:))/2;
i=find(BW2<=thresh);
BW2(i)=0;
i=find(BW2>thresh);
BW2(i)=255;
[f,v] = isosurface(BW2,100);
v2=[129-v(:,1) v(:,3)-129 129-v(:,2)]; % in order to cope with the different orientation
v=v2;
fprintf('morphological closing done.\n');
fprintf('writing outer surface...\n');
fname=output_surface;
vert = v;
face = f - 1;
vnum = size(vert,1);
fnum = size(face,1);
% open it as a big-endian file
fid = fopen(fname, 'wb', 'b');
TRIANGLE_FILE_MAGIC_NUMBER = 16777214;
fwrite3(fid, TRIANGLE_FILE_MAGIC_NUMBER);
% Ouput a couple of text lines with creation date
str = sprintf('created from matlab on %s\n',datestr(now));
fwrite(fid, str,'char');
fwrite(fid, vnum,'int32');
fwrite(fid, fnum,'int32');
% reshape vert into column array and write
vert = reshape(vert',size(vert,1)*size(vert,2),1);
fwrite(fid, vert,'float32');
% reshape face into column array and write
face = reshape(face',size(face,1)*size(face,2),1);
fwrite(fid, face,'int32');
fclose(fid) ;
return
end
=================[Matlab Script: make_roi_paths]===============
function make_roi_paths(pial, outersmoothed, radius, stepsize, outdir, flagf)
% Original Author: Marie Schaer
% Date: 2007/11/15
%
% This function creates multiple circular regions of interest on the outer
% surface, measures their area (saved in matlab format) and save path file
% containing a set of
% corresponding points on the pial surface. The path files are required as
% an input to the mri_path2label function
%
% Parameters:
% radius: radius of the circular region of interest on the outer surface.
% Most appropriate values between 20 and 25 mm, further documentation
% available in the validation publication: "A surface-based approach to
% quantify local cortical gyrification" by Schaer M, Bach Cuadra M,
% Tamarit L, Eliez E, Thiran JP, IEEE Transactions on Medical Imaging, 2007
%
% Utilities to transfer points on the pial surface calls "mesh_vertex_nearest",
% a function written by Darren Weber. Utilities to compute matrix adjacency
% for the pial surface calls "mesh_adjacency", a program first written by
% Darren Weber, then modified by G. Peyre (source: toolbox_graph on
% mathworks)
%
% Example: make_roi_paths('lh.pial','lh.outer-pial-smoothed',25,100,/tmp)
t0 = cputime;
disp('loading datas ...')
[mesh_total.vertices, mesh_total.faces]=freesurfer_read_surf(pial);
[mesh_outer.vertices, mesh_outer.faces]=freesurfer_read_surf(outersmoothed);
disp('preparing outer mesh structure ...')
mesh_outer = createMeshFacesOfVertex (mesh_outer.vertices, mesh_outer.faces)
disp('preparing pial mesh structure ...')
A = mesh_adjacency(mesh_total);
% Keep track of the area for each individual region of interest on the
% outer surface:
nbVertices = size(mesh_outer.vertices,1);
areasOuterROI = zeros(nbVertices,1);
areasOuterROI = sparse (areasOuterROI);
clear nbVertices
% Circular regions of interest are defined each 100 vertex on the outer
% surface. Due to the high resolution of the outer mesh (average face area
% of ~0.3mm2), calculations are computed each 1 on 100 vertex, to avoid
% high redundancies and optimize calculation time.
for iV = 1:stepsize: length(mesh_outer.vertices)
disp(['... creating path file for vertex ',num2str(iV),' / ' ,num2str(length(mesh_outer.vertices))])
% ------ Part 1: find the ROI on the enveloppe --------------
[verticesInROI, facesInROI] = getVerticesAndFacesInSphere(mesh_outer, iV, radius);
% In rare case, the intersection of the enveloppe with the sphere result
% in two regions of interest: the one that we expect, circular and
% centered in iV; and an aberrant one at the bottom of the sphere
% (e.g. near the superior sagittal vault). The next step is used to
% control for that and keep only the radial region centered at iV.
facesListOuterGeo = MakeGeodesicOuterROI (mesh_outer, iV, facesInROI);
% Find the perimeter of the outer ROI
verticesOuterGeo=unique(facesListOuterGeo(:));
perim=setdiff(verticesOuterGeo,verticesInROI);
% Measure its area
areaOuterROI = getFacesArea(mesh_outer,facesListOuterGeo);
areasOuterROI(iV) = areaOuterROI;
if (mod(iV,50*stepsize) == 1)
fname = [outdir '/' pial '.area_intermed.mat'];
save(fname, 'areasOuterROI') ;
disp(['area file for outer ROIs saved at ',num2str(iV)])
end
clear verticesInROI facesInROI facesListOuterGeo verticesOuterGeo areaOuterROI
% ----- Part2: Define the corresponding set of points on the pial surface:
% Transfer a few points of the perimeter of the hulls ROI from
% the envelope to the pial surface, and save them as path file.
step = 7;
[verticeslist] = SearchProjectionOnPial(mesh_total, mesh_outer, perim, step);
% reorganize the set of points in the right order to input them to
% mri_path2label
reorglist = reorganize_verticeslist (mesh_total, A, mesh_outer, perim, verticeslist, step);
lindex = reorglist';
lxyz = mesh_total.vertices(lindex,:); lindex= lindex-1;
p = sprintf ('%06d', iV);
write_path(lxyz, lindex,[outdir '/' pial '.' p '.path']);
clear verticeslist lindex lxyz
end
disp(['saving area file in matlab format... '])
fname = [outdir '/' pial '.outer_ROIs_area.mat'];
save(fname, 'areasOuterROI')
disp('DONE.')
deltaT = cputime - t0
% indicate successful completion by deleting flagfile
delete(flagf);
=======================[find corresponding_center_FSformat]=========================
t0 = cputime;
[mesh_pial.vertices, mesh_pial.faces] = freesurfer_read_surf(pial);
[mesh_outer.vertices, mesh_outer.faces] = freesurfer_read_surf(outersmoothed);
fidv = fopen([outdir '/' pial '.center.vertices'], 'w') ;
for iV = 1 :stepsize: length(mesh_outer.vertices)
centerSeed=mesh_vertex_nearest(mesh_pial.vertices,mesh_outer.vertices(iV,:));
centerSeed = centerSeed - 1; %FreeSurfer-s vertex are 0-based
p = sprintf ('%06d', iV);
fid = fopen([outdir '/' pial '.' p '.center'], 'w') ;
fprintf(fid,'%d\n',centerSeed);
fclose(fid) ;
fprintf(fidv,'%s\n',p);
end
fclose(fidv) ;
deltaT = cputime - t0
% indicate successful completion by deleting flagfile
delete(flagfile);
===================================================================================
External Email - Use Caution
Hi, probably you need to add MATLAB path to Freesurfer's $PATH variable. The following link may help:
http://www.manuelschutze.com/?p=297
On 18 May 2018 at 12:02, subin oh subin.b.oh@gmail.com wrote:
External Email - Use CautionHello,
I downloaded the Freesurfer ver 5.3.0 and installed it on Mac OS.
I run *"recon-all -s <subject> -local GI" *for my subject.. And I run *Matlab Script* about "*Start up" , "make_outer_surface", "make_roi_paths" , "find correspoding center" *as follows:
But it exited with same *errors* as follows:
Please Could you tell me the way for correcting that error and to calculate the LGI?
*the error message is..*
Thank you very much.
Best Regards,
Subin
=====================[Mac OS Error]======================
-------- freesurfer-Darwin-lion-stable-pub-v5.3.0 --------
Setting up environment for FreeSurfer/FS-FAST (and FSL)
FREESURFER_HOME /Applications/freesurfer
FSFAST_HOME /Applications/freesurfer/fsfast
FSF_OUTPUT_FORMAT nii.gz
SUBJECTS_DIR /Applications/freesurfer/subjects
MNI_DIR /Applications/freesurfer/mni
FSL_DIR /usr/local/fsl
Chans-iMac:subjects roh$ recon-all -s test01_t1 -localGI
Subject Stamp: freesurfer-Darwin-lion-stable-pub-v5.3.0
Current Stamp: freesurfer-Darwin-lion-stable-pub-v5.3.0
INFO: SUBJECTS_DIR is /Applications/freesurfer/subjects/test01_t1
Actual FREESURFER_HOME /Applications/freesurfer
-rw-rw-r-- 1 roh staff 468188 May 18 16:01 /Applications/freesurfer/ subjects/test01_t1/test01_t1/scripts/recon-all.log
Darwin Chans-iMac.local 13.4.0 Darwin Kernel Version 13.4.0: Mon Jan 11 18:17:34 PST 2016; root:xnu-2422.115.15~1/RELEASE_X86_64 x86_64
/Applications/freesurfer/subjects/test01_t1/test01_t1/surf
#--------------------------------------------
#@# Local Gyrification Index lh Fri May 18 17:36:00 KST 2018
\n mris_compute_lgi --i lh.pial \n
ERROR: Matlab is required to run mris_compute_lgi!
Darwin Chans-iMac.local 13.4.0 Darwin Kernel Version 13.4.0: Mon Jan 11 18:17:34 PST 2016; root:xnu-2422.115.15~1/RELEASE_X86_64 x86_64
recon-all -s test01_t1 exited with ERRORS at Fri May 18 17:36:00 KST 2018
For more details, see the log file /Applications/freesurfer/ subjects/test01_t1/test01_t1/scripts/recon-all.log
To report a problem, see http://surfer.nmr.mgh.harvard. edu/fswiki/BugReporting
===============================================================
*the Matlab Scripts are..*
=================[Matlab Script: StartUp]======================
% freesurfer start
fshome = getenv('FREESURFER_HOME');
fsmatlab = sprintf('%s/matlab',fshome);
if (exist(fsmatlab) == 7)
path(path,fsmatlab);end
clear fshome fsmatlab;
=================[Matlab Script: make_outer_surface]================
function make_outer_surface (filled_volume, se_diameter, output_surface)
% Original Author: Marie Schaer
% Date: 2007/11/14
%
% This function takes as an input the binary volume resulting of the
% filling of the any surface (usually the pial one) using mris_fill, and
% will close the sulci using morphological operation, with a sphere as the
% structural element.
%
% Parameters:
% se_diameter is the diameter of the sphere (in mm), use 15mm by default
% to close the sulci.
%
% Utilities to write the surface to the freesurfer format are modified from
% "freesurfer_write_surf" (from Darren Weber's bioelectromagnetism toolbox),
% according to a suggestion by Don Hagler in FreeSurfer's mailing list on
% August 3, 2007.
%
% Example: make_outer_surface('lh.pial.mgz',15,'lh.outer-pial')
fprintf('reading filled volume...\n'); vol=MRIread(filled_volume); volume=vol.vol; volume(volume==1)=255; fprintf('closing volume...\n');% first apply a very soft gaussian filter, with sigma = 1mm, in order to
% facilitate the closing
Gaussian = fspecial('gaussian',[2 2],1);
image_f=zeros(256,256,256);
for slice=1:256
temp = double(reshape(volume(:,:,slice),256,256)); image_f(:,:,slice) = conv2(temp,Gaussian,'same');end
image2=zeros(size(image_f));
image2(image_f<=25)=0;
image2(image_f>25)=255;
se=strel('ball',se_diameter,se_diameter); BW2=imclose(image2,se); thresh = max(BW2(:))/2; i=find(BW2<=thresh); BW2(i)=0; i=find(BW2>thresh); BW2(i)=255; [f,v] = isosurface(BW2,100); v2=[129-v(:,1) v(:,3)-129 129-v(:,2)]; % in order to cope with thedifferent orientation
v=v2; fprintf('morphological closing done.\n'); fprintf('writing outer surface...\n'); fname=output_surface; vert = v; face = f - 1; vnum = size(vert,1); fnum = size(face,1); % open it as a big-endian file fid = fopen(fname, 'wb', 'b'); TRIANGLE_FILE_MAGIC_NUMBER = 16777214; fwrite3(fid, TRIANGLE_FILE_MAGIC_NUMBER); % Ouput a couple of text lines with creation date str = sprintf('created from matlab on %s\n',datestr(now)); fwrite(fid, str,'char'); fwrite(fid, vnum,'int32'); fwrite(fid, fnum,'int32'); % reshape vert into column array and write vert = reshape(vert',size(vert,1)*size(vert,2),1); fwrite(fid, vert,'float32'); % reshape face into column array and write face = reshape(face',size(face,1)*size(face,2),1); fwrite(fid, face,'int32'); fclose(fid) ;return
end
=================[Matlab Script: make_roi_paths]===============
function make_roi_paths(pial, outersmoothed, radius, stepsize, outdir, flagf)
% Original Author: Marie Schaer
% Date: 2007/11/15
%
% This function creates multiple circular regions of interest on the outer
% surface, measures their area (saved in matlab format) and save path file
% containing a set of
% corresponding points on the pial surface. The path files are required as
% an input to the mri_path2label function
%
% Parameters:
% radius: radius of the circular region of interest on the outer surface.
% Most appropriate values between 20 and 25 mm, further documentation
% available in the validation publication: "A surface-based approach to
% quantify local cortical gyrification" by Schaer M, Bach Cuadra M,
% Tamarit L, Eliez E, Thiran JP, IEEE Transactions on Medical Imaging, 2007
%
% Utilities to transfer points on the pial surface calls "mesh_vertex_nearest",
% a function written by Darren Weber. Utilities to compute matrix adjacency
% for the pial surface calls "mesh_adjacency", a program first written by
% Darren Weber, then modified by G. Peyre (source: toolbox_graph on
% mathworks)
%
% Example: make_roi_paths('lh.pial','lh.outer-pial-smoothed',25,100,/tmp)
t0 = cputime;
disp('loading datas ...')
[mesh_total.vertices, mesh_total.faces]=freesurfer_read_surf(pial);
[mesh_outer.vertices, mesh_outer.faces]=freesurfer_ read_surf(outersmoothed);
disp('preparing outer mesh structure ...')
mesh_outer = createMeshFacesOfVertex (mesh_outer.vertices, mesh_outer.faces)
disp('preparing pial mesh structure ...')
A = mesh_adjacency(mesh_total);
% Keep track of the area for each individual region of interest on the
% outer surface:
nbVertices = size(mesh_outer.vertices,1);
areasOuterROI = zeros(nbVertices,1);
areasOuterROI = sparse (areasOuterROI);
clear nbVertices
% Circular regions of interest are defined each 100 vertex on the outer
% surface. Due to the high resolution of the outer mesh (average face area
% of ~0.3mm2), calculations are computed each 1 on 100 vertex, to avoid
% high redundancies and optimize calculation time.
for iV = 1:stepsize: length(mesh_outer.vertices)
disp(['... creating path file for vertex ',num2str(iV),' / ',num2str(length(mesh_outer.vertices))])
% ------ Part 1: find the ROI on the enveloppe -------------- [verticesInROI, facesInROI] = getVerticesAndFacesInSphere(mesh_outer,iV, radius);
% In rare case, the intersection of the enveloppe with the sphereresult
% in two regions of interest: the one that we expect, circular and % centered in iV; and an aberrant one at the bottom of the sphere % (e.g. near the superior sagittal vault). The next step is used to % control for that and keep only the radial region centered at iV. facesListOuterGeo = MakeGeodesicOuterROI (mesh_outer, iV, facesInROI); % Find the perimeter of the outer ROI verticesOuterGeo=unique(facesListOuterGeo(:)); perim=setdiff(verticesOuterGeo,verticesInROI); % Measure its area areaOuterROI = getFacesArea(mesh_outer,facesListOuterGeo); areasOuterROI(iV) = areaOuterROI; if (mod(iV,50*stepsize) == 1) fname = [outdir '/' pial '.area_intermed.mat']; save(fname, 'areasOuterROI') ; disp(['area file for outer ROIs saved at ',num2str(iV)]) end clear verticesInROI facesInROI facesListOuterGeo verticesOuterGeoareaOuterROI
% ----- Part2: Define the corresponding set of points on the pialsurface:
% Transfer a few points of the perimeter of the hulls ROI from % the envelope to the pial surface, and save them as path file. step = 7; [verticeslist] = SearchProjectionOnPial(mesh_total, mesh_outer,perim, step);
% reorganize the set of points in the right order to input them to % mri_path2label reorglist = reorganize_verticeslist (mesh_total, A, mesh_outer,perim, verticeslist, step);
lindex = reorglist'; lxyz = mesh_total.vertices(lindex,:); lindex= lindex-1; p = sprintf ('%06d', iV); write_path(lxyz, lindex,[outdir '/' pial '.' p '.path']); clear verticeslist lindex lxyzend
disp(['saving area file in matlab format... '])
fname = [outdir '/' pial '.outer_ROIs_area.mat'];
save(fname, 'areasOuterROI')
disp('DONE.')
deltaT = cputime - t0
% indicate successful completion by deleting flagfile
delete(flagf);
=======================[find corresponding_center_FSformat]
t0 = cputime;
[mesh_pial.vertices, mesh_pial.faces] = freesurfer_read_surf(pial);
[mesh_outer.vertices, mesh_outer.faces] = freesurfer_read_surf( outersmoothed);
fidv = fopen([outdir '/' pial '.center.vertices'], 'w') ;
for iV = 1 :stepsize: length(mesh_outer.vertices)
centerSeed=mesh_vertex_nearest(mesh_pial.vertices,mesh_outer.vertices(iV,:));
centerSeed = centerSeed - 1; %FreeSurfer-s vertex are 0-based p = sprintf ('%06d', iV); fid = fopen([outdir '/' pial '.' p '.center'], 'w') ; fprintf(fid,'%d\n',centerSeed); fclose(fid) ; fprintf(fidv,'%s\n',p);end
fclose(fidv) ;
deltaT = cputime - t0
% indicate successful completion by deleting flagfile
delete(flagfile);
============================================================
Freesurfer mailing list Freesurfer@nmr.mgh.harvard.edu https://mail.nmr.mgh.harvard.edu/mailman/listinfo/freesurfer
The information in this e-mail is intended only for the person to whom it is addressed. If you believe this e-mail was sent to you in error and the e-mail contains patient information, please contact the Partners Compliance HelpLine at http://www.partners.org/complianceline . If the e-mail was sent to you in error but does not contain patient information, please contact the sender and properly dispose of the e-mail.
freesurfer@nmr.mgh.harvard.edu