[MINC-development] -labels support in minccalc, mincmath and mincresample
Vladimir S. FONOV
vladimir.fonov at gmail.com
Thu Mar 3 18:10:33 EST 2016
Hello MINC developers,
I made changes to libminc (
https://github.com/BIC-MNI/libminc/tree/develop-labels )
And minc-tools (
https://github.com/BIC-MNI/minc-tools/tree/develop-labels ) to add
support for -labels option in minccalc,mincmath and mincresample, to try
to address the common problem that many people seem to have over and
over again and again - inter-slice normalization of volumes with integer
labels.
Description of the problem:
When you have a minc file that contains discrete levels (i.e anatomical
labels) produced, for example, by manual labeling in Display or
ITK-SNAP. You apply some simple operation using minccalc (for example
intersecting your labels with a mask, or doing some logical operations)
you inadvertently produce a volume where the actual discrete values for
voxles are replaced by floating-point ones. What's worse is the rule of
this replacement depends on the data type used for the minc file,
dimension order of the file and particular location of the voxel within
the file.
Example:
minccalc -express 'A[0]*2'
/opt/minc/share/icbm152_model_09c/mni_icbm152_t1_tal_nlin_sym_09c_deep2.mnc
test.mnc
Here I take a file that contains 15 labels describing deep gray matter
structures and multiply each label by 2.
The contents of the input file (using print_all_labels):
Label: 1 6931
Label: 2 16801
Label: 3 1499
Label: 4 175210
Label: 5 5789
Label: 6 1404
Label: 7 909
Label: 8 4992
Label: 9 8512
Label: 101 6931
Label: 103 1499
Label: 106 1404
Label: 107 909
Label: 108 4992
Label: 109 8512
The contents of the output file :
Label: 2 6649
*Label: 3 282*
Label: 4 16801
Label: 6 1499
Label: 8 175210
Label: 10 5789
Label: 12 1404
Label: 14 857
*Label: 15 52*
Label: 16 4992
Label: 18 8512
Label: 202 6931
Label: 206 1499
Label: 212 1404
Label: 214 857
*Label: 215 52*
Label: 216 4992
Label: 218 8512
Note the highlighted Labels: 3,15,215 which are clearly not possible
when one multiplies integer labels by 2.
Solution (using the -labels option):
minccalc -labels -express 'A[0]*2'
/opt/minc/share/icbm152_model_09c/mni_icbm152_t1_tal_nlin_sym_09c_deep2.mnc
test_labels.mnc
The output is now correct:
Label: 2 6931
Label: 4 16801
Label: 6 1499
Label: 8 175210
Label: 10 5789
Label: 12 1404
Label: 14 909
Label: 16 4992
Label: 18 8512
Label: 202 6931
Label: 206 1499
Label: 212 1404
Label: 214 909
Label: 216 4992
Label: 218 8512
--
Best regards,
Vladimir S. FONOV ~ vladimir.fonov <at> gmail.com
More information about the MINC-development
mailing list