Open
Description
there are three ways i've been thinking about labeling brains with mindboggle:
- surface-based registration with freesurfer using the dkt40 or dkt100.
this is already implemented in mindboggle's nipype. as satra pointed out, given the DKT-40 atlas inclusion in the new freesurfer, this doesn't add anything new -- we might as well inherit freesurfer's labels, and reduce the 31 cortical labels to 25 if we want to subscribe to the DKT25 protocol. mindboggle would then be used primarily for shape analysis, which is the primary contribution in the original r01 proposal. - one of my original goals with mindboggle is feature-based labeling. i was hoping to identify fundi independent of labels based on position and shape, and then either drive atlas (volume/surface) registrations to label, or fill the cortex with labels between these delimiting landmarks. however, breaking up / combining fundi so that there is a one-to-one matching across brains turns out to be a harder problem than i thought it would be.
- we are currently developing a hybrid of pull request trial #1 and replaced freesurfer mri_surf2surf command with nipype's SurfaceTransform #2. the fundi are currently segmented/identified/labeled based on initial automated labels (pull request trial #1), and we would use label propagation to "fix" the label boundaries to the fundi (replaced freesurfer mri_surf2surf command with nipype's SurfaceTransform #2).
the realign_label_boundary() is the method to realign the label boundaries. it calls:
self.initialize_seed_labels(init='label_boundary',
output_filename = label_boundary_filename)
which would simply be set to the initial automated labels or to the consensus set of labels, where there is extremely high probability that the label assignments are correct.
there is a lot of redundancy between rebound.py's functions and the rest of mindboggle's. it would be good to simply extract what is relevant from rebound.py, out of its current oop framework. the next method would be replaced by labels/labels.py's extract_borders() function, then separate same-label-pair segments:
self.find_label_boundary_segments()
this is the heart of the label propagation:
self.graph_based_learning(realign=True, max_iters=max_iters)
self.assign_realigned_labels(filename = output_file_regions)
finally, extract_borders() would replace:
self.find_label_boundary(realigned_labels=True,
output_filename = output_file_boundaries)