It is quite confusing and took us some time to understand ourselves. When we create an average subject like fsaverage, we have to create a triangular mesh just like we do with any subject. This means that we have to assign an xyz to each coordinate. When trying to represent a group, this is not straight forward. The way we do it is to compute the xyz coordinate in MNI305 space for each vertex for each subject, then map that through the spherical registration into the common surface-space for each subject. We then average the MNI305 xyzs across subject to arrive at the xyz for that vertex in the common surface-space. This gives the pial surface of fsaverage its brain-like shape. The problem is that it is much smoother than an individual cortex because all the little folds have been averaged out. This means that the surface has much less surface area than any of the individuals used to make the average (from a surface area standpoint, it is not an average at all!). To be able to report average surface area, we computed the area of each vertex of each subject and mapped this into the common surface space and averaged it across subjects. When we want to report an area for a given region, we compute the sum of the vertex average areas rather than the area of the vertices themselves.
On 04/13/2016 11:17 AM, Antonin Skoch wrote:
Dear Doug,
thank you very much for the support.
I am quite confused by this info about correcting of area of fsaverage clusters. Could you please clarify to me the following:
How exactly the values of lh.area, lh.white.avg.area.mgh of fsaverage were computed?
How the cluster area inside mri_surfcluster (and also mri_glmfit and mri_mcsim) is computed?
How the correction for average subject is applied?
I assumed that area belonging to particular vertex is computed by summing areas of faces originating in particular vertex divided by 3. The face areas are computed from vertex coordinates by the method (based on cross-product of vectors)
http://stackoverflow.com/questions/26312570/calculate-surface-area-of-a-3d-m...
This is how the vertex area from surface file is computed inside PALM. Is the same method used in freeSurfer? I checked the values of lh.white vertex area computed in PALM and they do NOT correspond neither to lh.area, nor lh.white.area.mgh values. I am listing areas of 3 representative vertices of fsaverage white surface got from lh.white.avg.area, lh.area and computed from lh.white in PALM:
vtx 50: lh.white.avg.area 0.4952, lh.area 0.589, PALM 0.5967 vtx 110: lh.white.avg.area 0.5533, lh.area 0.5198, PALM 0.5421 vtx 1000: lh.white.avg.area 0.6193, lh.area 0.3349, PALM 0.4305
Any clues why there is a difference?
In cluster summary file, there are flags FixVertexAreaFlag 1 and FixSurfClusterArea 1. What is the significance of these flags? I tried to set --no-fix-vertex-area. The FixVertexAreaFlag got value 0, but the vertex areas produced by mri_surfcluster were the same. Is it possible to turn off also FixSurfClusterArea?
I also found flags FixVertexAreaFlag and FixGroupSubjectArea in .csd files. Are there similar corrections applied to cluster size values in .csd files?
Thank you in advance for help.
Regards,
Antonin Skoch
Dear FreeSurfer experts,
I am using mri_surfcluster to compare results from PALM and FreeSurfer cluster extent inference.
I came across several issues in mri_surfcluster I cannot cope with.
I observed that --mask option in mri_surfcluster does not prevent cluster to growing outside the mask.
When I run
mri_surfcluster --in lh.thickness.fsaverage_masked.mgh --sum summary.txt --subject fsaverage --surf white --hemi lh --thmin 0 --ocn cluster_summary.mgz --mask ./mask.mgh
the cluster is growing outside mask and covers all surface including non-cortical (masked) regions.
Is this intended behavior? This behavior (allowing clusters leak outside mask) seems strange to me since it could possibly influence results of cluster-extent inference in case of mask-constrained analysis.
This is happening because you are setting the threshold to 0.
How behaves mri_glmfit-sim in permutation-based building cluster-extent null distribution with mask? Is in this case also allowed to clusters to leak outside mask?
No
Another issue is concerning reported cluster area. I tested mri_surfcluster on data where overlay values (lh.thickness.fsaverage.mgh) were set to 0 outside cortex mask (they were non-zero also in some portion of non-cortical vertices). When I set thmin to non-zero value in mri_surfcluster
mri_surfcluster --in lh.thickness.fsaverage_masked.mgh --sum summary.txt --subject fsaverage --surf white --hemi lh --thmin 0.00001 --ocn cluster_summary.mgz --mask ./mask.mgh
I get cluster comprising (almost) all cortex, not leaking to non-cortical areas. But what is strange, the reported cluster size is far larger than area of the whole cortical surface.
number of voxels in search space = 149953 Done loading source values (nvtxs = 163842) overall max = 5 at vertex 817 overall min = 0 at vertex 8 surface nvertices 163842 surface area 65417.097656 surface area 65416.648438 NOT Adjusting threshold for 1-tailed test Searching for Clusters ... thmin=0.000100 (0.000100), thmax=-1.000000 (-1), thsignid=0, minarea=0.000000 Found 2 clusters Max cluster size 76431.562500 Saving cluster numbers to pok.mgz
Here is output of mri_surfcluster: # ClusterNo Max VtxMax Size(mm^2) MNIX MNIY MNIZ NVtxs 1 5.000 817 76431.56 -25.8 4.6 -37.5 149874 2 2.670 144205 0.53 -15.8 -40.4 -3.8 1
How it is possible?
The surface area of 65416.648438 has not been corrected for the fact that fsaverage is an average subject. The area in the summary table has been corrected.
Does the fsaverage/surf/lh.area correspond to area of particular vertices on fsaverage/surf/lh.white? I expect yes.
The lh.area file does correspond. However, the area measures on the raw fsaverage surface are not accurate because the average surface has much less surface area due to averaging out the individual folding patterns.
How it is possible to calculate area of specified vertex of surface? I tried to do that by creating .label file with particular vertex number and running
mri_surfcluster --in lh.thickness.fsaverage_masked.mgh --sum summary.txt --subject fsaverage --surf white --hemi lh --thmin 0.00001 --clabel myVertex.label
I indeed got report of 1 cluster with 1 vertex, with VtxMax value identical to vertex index in myVertex.label but the area value in summary.txt is different that value in fsaverage/surf/lh.area.
You can extract it out of ?h.white.avg.area.mgh using mri_segstats with the --slabel function.
Thank you very much in advance for clarification,
Antonin Skoch
Freesurfer mailing list Freesurfer@nmr.mgh.harvard.edu https://mail.nmr.mgh.harvard.edu/mailman/listinfo/freesurfer