Hello AFNI gurus and community,
I am interested in comparing some surface data between the left and right hemispheres at the node level. I think the method described in Jo et al. (2012) https://doi.org/10.1371/journal.pone.0048847[/url] is precisely what I need, where they find the left/right node-to-node correspondences based on distance to anatomical landmarks. Given Drs. Cox and Saad are coauthors on this work, as well as a subsequent paper using the method [url=https://doi.org/10.1073/pnas.1302581110]https://doi.org/10.1073/pnas.1302581110, I wanted to check with you all, do you have an implementation of this method you can share? I can code it myself but didn’t want to reinvent the wheel if you have it handy. I will need to do this on both the ld60 and ld141 surfaces.
I really like that method. I sent Hang-Joon Jo a message about this for his script. At minimum, I think you need the FreeSurfer contrareg output, and converted to AFNI format as described in @SUMA_Make_Spec_FS.
Making use of FreeSurfer’s -contrasurfreg output with MapIcosahedron:
This script will create SUMA versions of lh.rh.sphere.reg and
rh.lh.sphere.reg but in this current state, MapIcosahedron does
not attempt to use them for backward compatibility.
Should you want to create standard mesh surfaces with node
index correspondence across the hemispheres you will need to run
MapIcosahedron manually in the output SUMA/ directory.
-spec SUBJ_rh.spec -ld 60
This command is very similar to the one use to create the default
output spec file std.60.SUBJ_rh.spec (look at the top of the spec
file for a record of the command that created it), except for the
last two options -morph and -prefix. By using -morph
rh.lh.sphere.reg.gii the resultant standard-mesh right hemispheres
(std.60.lhreg.rh..gii) will have node index correspondence with
I appreciate your reply! Unfortunately, we didn’t have contrareg output from our FreeSurfer processing, and rerunning FreeSurfer wasn’t an option. Good to know about this for the future though. Sounds like that would be a more straightforward solution.
What I’ve implemented instead is a process relying heavily on SurfDist to measure distances along the meshes. First, I found the FreeSurfer ROI centroids (a2009s parcellation of the MNI152_2009 surfaces), which involved calculation of all pairwise distances among nodes of each ROI. I then found the node for each ROI with the shortest average distance from the others (i.e., the centroid). The second step involved calculating the distance from every surface node to the 74 ROI centroids for each hemisphere separately. For each node in the left hemisphere, I then found the node in the right with highest distance similarity (Pearson correlation between the two 74-value distance vectors). The same associations were calculated in the opposite direction as well, resulting in a final set of node-to-node correspondences. With these assignments I can now transform data from one hemisphere onto the other. I show in attached pic how this turned out… Pretty cool method! There was a slight complication regarding cases where multiple nodes shared a maximally similar node in opposite hemisphere. I attached a schematic showing how I’ve handled this.
I should note for others that this has taken quite a lot of compute time and obviously scales with the mesh density. I saved some time by sampling the centroids from the ld60 meshes to ld141 space using SurfToSurf. However, the distance-to-centroid process for the ld141 is taking 4+ days with 8 parallel workers on an new i9 iMac!
Thanks again for your time!
That looks very good. Centers, centroids and such have been a bit of an obsession lately for us. The minimum distance method is a very expensive method to compute, but other methods are much faster.
You can use this method to find centers for surface patches like these with Chris Rorden’s Surf Ice (“Poles of Isolation” - like the “Deepest” center in the poster). You run a short script posted here:
When you have this all worked out, consider contributing it to the AFNI community.