Hi Scott, I've verified the problem. The issue is that the slope parameter in the nifti header is not 0. When this happens, the pixel values have to be rescaled, so FreeSurfer changes the type to float to accommodate any rescaling parameter. This also forces it to report that the volume is float, which is obviously wrong. For now, I'm going to leave it the way it is because it does not seem to be hurting anything and I don't have time to test whether the fix would break something else. Thanks for the report. It's good to know about it!
doug
Scott Burns wrote:
Freesurfers --
This morning, I was trying to convert a 4 frame MPRAGE scan into a 1 frame RMS image. I wrote my own matlab code to do it ...
function err = rms_mprage(old,new) %convert 4-frame mprage into 1 frame mprage by taking RMS of voxels
old_hdr = load_nifti(old); new_hdr = old_hdr; new_hdr.vol = sqrt((old_hdr.vol(:,:,:,1).^2+old_hdr.vol(:,:,:,2).^2+old_hdr.vol(:,:,:,3).^2+old_hdr.vol(:,:,:,4).^2)/4); err = save_nifti(new_hdr,new);
So I ran >>> rms_mprage('MPRAGE1.nii','MPRAGE_new.nii')
Also, Bruce said I could do this ...
mri_average -noconform -sqr MPRAGE1.nii#0 MPRAGE1.nii#1 MPRAGE1.nii#2 MPRAGE1.nii#3 MPRAGE_rms.nii
However... kerryave:002 $ ls -l -rw-rw-r-- 1 sburns lingua 92275040 Dec 21 12:27 MPRAGE1.nii -rw-rw-r-- 1 sburns lingua 24340 Dec 20 15:17 MPRAGE1.nii-infodump.dat -rw-rw-r-- 1 sburns lingua 23069024 Apr 12 13:29 MPRAGE_new.nii -rw-rw-r-- 1 sburns lingua 46137696 Apr 12 13:35 MPRAGE_rms.nii
So I was curious why the _rms.nii was twice as big. Probably a datatype issue, right?
kerryave:002 $ mri_info MPRAGE_new.nii Volume information for MPRAGE_new.nii type: nii dimensions: 256 x 256 x 176 voxel sizes: 1.0000, 1.0000, 1.0000 type: FLOAT (3) fov: 256.000 dof: 0 xstart: -128.0, xend: 128.0 ystart: -128.0, yend: 128.0 zstart: -88.0, zend: 88.0 TR: 2530.00 msec, TE: 0.00 msec, TI: 0.00 msec, flip angle: 0.00 degrees nframes: 1 PhEncDir: UNKNOWN ras xform present xform info: x_r = 0.0055, y_r = 0.0068, z_r = -1.0000, c_r = -0.9523 : x_a = -0.9719, y_a = 0.2354, z_a = -0.0037, c_a = 2.8859 : x_s = -0.2354, y_s = -0.9719, z_s = -0.0079, c_s = 0.8822 Orientation : PIL Primary Slice Direction: sagittal
voxel to ras transform: 0.0055 0.0068 -1.0000 85.4734 -0.9719 0.2354 -0.0037 97.4806 -0.2354 -0.9719 -0.0079 156.1061 0.0000 0.0000 0.0000 1.0000
voxel-to-ras determinant -1
ras to voxel transform: 0.0055 -0.9719 -0.2354 131.0176 0.0068 0.2354 -0.9719 128.1845 -1.0000 -0.0037 -0.0079 87.0654 0.0000 0.0000 0.0000 1.0000
And...
kerryave:002 $ mri_info MPRAGE_rms.nii Volume information for MPRAGE_rms.nii type: nii dimensions: 256 x 256 x 176 voxel sizes: 1.0000, 1.0000, 1.0000 type: FLOAT (3) fov: 256.000 dof: 0 xstart: -128.0, xend: 128.0 ystart: -128.0, yend: 128.0 zstart: -88.0, zend: 88.0 TR: 2530.00 msec, TE: 0.00 msec, TI: 0.00 msec, flip angle: 0.00 degrees nframes: 1 PhEncDir: UNKNOWN ras xform present xform info: x_r = 0.0055, y_r = 0.0068, z_r = -1.0000, c_r = -0.9523 : x_a = -0.9719, y_a = 0.2354, z_a = -0.0037, c_a = 2.8859 : x_s = -0.2354, y_s = -0.9719, z_s = -0.0079, c_s = 0.8822 Orientation : PIL Primary Slice Direction: sagittal
voxel to ras transform: 0.0055 0.0068 -1.0000 85.4734 -0.9719 0.2354 -0.0037 97.4806 -0.2354 -0.9719 -0.0079 156.1061 0.0000 0.0000 0.0000 1.0000
voxel-to-ras determinant -1
ras to voxel transform: 0.0055 -0.9719 -0.2354 131.0176 0.0068 0.2354 -0.9719 128.1845 -1.0000 -0.0037 -0.0079 87.0654 0.0000 0.0000 0.0000 1.0000
Weird that mri_info shows the datatype for both images as float. fslhd shows different things...
kerryave:002 $ fslhd MPRAGE_new.nii filename MPRAGE_new.nii
sizeof_hdr 348 data_type INT16 dim0 4 dim1 256 dim2 256 dim3 176 dim4 1 dim5 1 dim6 1 dim7 1 vox_units mm time_units ms datatype 4 nbyper 2 bitpix 16 pixdim0 0.0000000000 pixdim1 1.0000000000 pixdim2 1.0000000000 pixdim3 1.0000000000 pixdim4 2530.0000000000 pixdim5 1.0000000000 pixdim6 1.0000000000 pixdim7 1.0000000000 vox_offset 352 cal_max 0.0000 cal_min 0.0000 scl_slope 1.000000 scl_inter 0.000000 phase_dim 0 freq_dim 0 slice_dim 0 slice_name Unknown slice_code 0 slice_start 0 slice_end 0 slice_duration 0.000000 time_offset 0.000000 intent Unknown intent_code 0 intent_name intent_p1 0.000000 intent_p2 0.000000 intent_p3 0.000000 qform_name Scanner Anat qform_code 1 qto_xyz:1 0.000000 0.000000 -1.000000 87.473366 qto_xyz:2 -0.976296 0.216439 -0.000000 100.261627 qto_xyz:3 -0.216439 -0.976296 -0.000000 153.275482 qto_xyz:4 0.000000 0.000000 0.000000 1.000000 qform_xorient Anterior-to-Posterior qform_yorient Superior-to-Inferior qform_zorient Right-to-Left sform_name Aligned Anat sform_code 2 sto_xyz:1 0.005469 0.006804 -0.999962 85.473358 sto_xyz:2 -0.971887 0.235419 -0.003714 97.480621 sto_xyz:3 -0.235385 -0.971870 -0.007900 156.106079 sto_xyz:4 0.000000 0.000000 0.000000 1.000000 sform_xorient Anterior-to-Posterior sform_yorient Superior-to-Inferior sform_zorient Right-to-Left file_type NIFTI-1+ file_code 1 descrip FreeSurfer Dec 18 2010 aux_file
kerryave:002 $ fslhd MPRAGE_rms.nii filename MPRAGE_rms.nii
sizeof_hdr 348 data_type FLOAT32 dim0 3 dim1 256 dim2 256 dim3 176 dim4 1 dim5 1 dim6 1 dim7 1 vox_units mm time_units s datatype 16 nbyper 4 bitpix 32 pixdim0 0.0000000000 pixdim1 1.0000000000 pixdim2 1.0000000000 pixdim3 1.0000000000 pixdim4 2.5299999714 pixdim5 1.0000000000 pixdim6 1.0000000000 pixdim7 1.0000000000 vox_offset 352 cal_max 0.0000 cal_min 0.0000 scl_slope 0.000000 scl_inter 0.000000 phase_dim 0 freq_dim 0 slice_dim 0 slice_name Unknown slice_code 0 slice_start 0 slice_end 0 slice_duration 0.000000 time_offset 0.000000 intent Unknown intent_code 0 intent_name intent_p1 0.000000 intent_p2 0.000000 intent_p3 0.000000 qform_name Scanner Anat qform_code 1 qto_xyz:1 0.005469 0.006804 -0.999962 85.473358 qto_xyz:2 -0.971887 0.235419 -0.003714 97.480621 qto_xyz:3 -0.235385 -0.971870 -0.007900 156.106079 qto_xyz:4 0.000000 0.000000 0.000000 1.000000 qform_xorient Anterior-to-Posterior qform_yorient Superior-to-Inferior qform_zorient Right-to-Left sform_name Scanner Anat sform_code 1 sto_xyz:1 0.005469 0.006804 -0.999962 85.473358 sto_xyz:2 -0.971887 0.235419 -0.003714 97.480621 sto_xyz:3 -0.235385 -0.971870 -0.007900 156.106079 sto_xyz:4 0.000000 0.000000 0.000000 1.000000 sform_xorient Anterior-to-Posterior sform_yorient Superior-to-Inferior sform_zorient Right-to-Left file_type NIFTI-1+ file_code 1 descrip FreeSurfer Mar 19 2011 aux_file
fslhd shows different data types, which explains the difference in size. I think there's a bug in mri_info that is incorrectly reading MPRAGE_new.nii as float data. Not an earth shattering bug by any means, but I thought I'd let you know anyways.
Scott Burns Kuperberg Lab Martinos Center for Biomedical Imaging sburns@nmr.mgh.harvard.edu mailto:sburns@nmr.mgh.harvard.edu
The information in this e-mail is intended only for the person to whom it is addressed. If you believe this e-mail was sent to you in error and the e-mail contains patient information, please contact the Partners Compliance HelpLine at http://www.partners.org/complianceline http://www.partners.org/complianceline . If the e-mail was sent to you in error but does not contain patient information, please contact the sender and properly dispose of the e-mail.
Freesurfer mailing list Freesurfer@nmr.mgh.harvard.edu https://mail.nmr.mgh.harvard.edu/mailman/listinfo/freesurfer