it would be nice to have labelsgmfix options to adjust freesurfer labels to (exactly) the 5ttgen hsvs output.
To nitpick (as I do regularly), actually requires an additional layer of development in order to be “exact”. Currently, both
5ttgen hsvs and
labelsgmfix will internally execute FSL’s
run_first_all command in order to obtain sub-cortical grey matter segmentations. If there is any imprecision / stochastic influence within that command, or indeed if the input images to that command are different in any way (manual T1w input vs.
orig.mgz), the two may not match exactly. What would be preferable would be for both scripts to have a command-line option whereby a pre-calculated
run_first_all output can be provided as input.
The OBHM abstract suggests (from the figure) that with 5ttgen hsvs, the cortex is segmented by Freesurfer. If true, I would expect the cortical ribbon in the act.mif image to be similar to that in aparc.mgz, but on close inspection, I see small differences in some places
There’s a number of potential sources of discrepancy here, most of which aren’t actually problematic.
aparc.mgz is generated by FreeSurfer, not MRtrix3; hence I can’t provide any guarantees on its accuracy nor can I even describe with confidence exactly how it is generated. I invested a decent amount of effort in getting the algorithm for going from a closed surface representation to a partial volume fraction image as accurate as I could, but it’s not a trivial exercise (especially pial surfaces on adjacent gyri where geodesically distant vertices can just about touch ), so I can’t guarantee that there’s no issue; but it would require stronger evidence than what you have to prove that this algorithm is giving an incorrect result given the other points below.
aparc.mgz is an integer label image, meaning that each voxel can only be classified as cortex or not cortex. Conversely, the output of
5ttgen hsvs has the capacity to encode partial volume fractions in each voxel. As such, even if there is no other underlying source of discrepancy between the two, there must by definition be voxels with a non-zero GM fraction in the 5TT image but absent in
aparc.mgz, and voxels present in
aparc.mgz that in the 5TT image have a GM fraction less than 1.0.
aparc.mgz were to include within it all voxels that have any intersection with the reconstructed cortical surface, then the cortex would actually look thicker in that image, because where a voxel has a tiny intersection with the surface in one corner, that entire voxel gets included, and you then perceive the extremity of the cortical surface as being in the opposing corner of the voxel. Hence, there is some heuristic within FreeSurfer that determines whether or not a voxel should or should not be included in
aparc.mgz. As mentioned previous this is out of my control and I don’t actually know how it’s done, but I expect it to be something like voxels requiring at least a 0.5 partial volume fraction.
In all of these cases, there’s the issue of looking at inherently 3D data within a 2D slice, which can be misleading depending on the shape of the geometry through-plane.
The cursor indicates a region where the tracts do not abut the cortical ribbon, likely due to a local incongruity between the act.mif (fig2) and aparc (fig 1).
This is precisely why
tck2connectome by default does not just look at the contents of the parcellation image within the two voxles in which the streamline endpoints reside. A more advanced heuristic is necessary because even in this ideal case, where the 5TT image and the parcellation image are derived from exactly the same source, the fact that partial volume fractions are encoded & interpolation can be performed on one image but not the other means that it’s still possible for streamlines to terminate in a voxel that’s not present in the parcellation image. Historically what others have done to address this is dilate the labels within the parcellation image so that all voxels contain labels. The default
tck2connectome approach is the “radial search”, which just expands a sphere at the location of the streamline termination point looking for the nearest label. It’s far from ideal, but as long as one is not natively using the surface representation for both streamline termination and assignment to parcels, some heuristic is required.
For the sake of the argument / better understanding: an alternative (not fantastic) way that this mismatch can be mitigated is by using the
5ttgen freesurfer algorithm. That directly uses
aparc.mgz to generate the 5TT image, and hence there would be no mismatch between the two by definition. However it would also mean that the tissue segmentations utilised by ACT would have a similar jagged-voxel effect to that present in
aparc.mgz, and hence those non-smooth structures would manifest in the tractogram also.