From 54ffb77a558586108c838bc427aa741c9e4095bf Mon Sep 17 00:00:00 2001 From: Johannes Stelzer <johannes.stelzer@tuebingen.mpg.de> Date: Mon, 11 Mar 2019 16:17:43 +0100 Subject: [PATCH] fixed nifti headers if entry does not exist in vista --- vviewer/VistaLoad.py | 77 +++++++++++++++++++++++++------------------- 1 file changed, 44 insertions(+), 33 deletions(-) diff --git a/vviewer/VistaLoad.py b/vviewer/VistaLoad.py index 6cc1929..46828e8 100644 --- a/vviewer/VistaLoad.py +++ b/vviewer/VistaLoad.py @@ -56,6 +56,8 @@ import re #%% AUX def get_property_str(header_img, str_property, repn_property="int"): + if header_img is None: + return -1 idx_begin = header_img.find(str_property) if idx_begin == -1: return -1 @@ -85,7 +87,7 @@ def get_subheader(header, section_demark): #%% reader -fp_input = "/home/morty/tmp/test.v" +# fp_input = "/mnt/50tbd/gabriele/median_02.v" def load_vista(fp_input): @@ -206,55 +208,64 @@ def load_vista(fp_input): #%% re-parse the header to get the complete header information + nii_loaded = nib.Nifti1Image(data, affine=np.eye(4)) mm = get_property_str(header_img, "voxel", "list") + nii_loaded.header.set_zooms(mm) + nii_loaded.header['pixdim'][4] = tr + nii_loaded.header.set_xyzt_units(xyz="mm", t="msec") + if dim == "4D": mm.append(tdim) #get s-form code sform_code = get_property_str(header, "sform_code", "int") + if sform_code != -1: + nii_loaded.header['sform_code'] = sform_code qform_code = get_property_str(header, "qform_code", "int") + if qform_code != -1: + nii_loaded.header['qform_code'] = qform_code header_sform = get_subheader(header, "sform: image") - offset_sform = get_property_str(header_sform, "data", "int") + last_idx_header - length_sform = int(get_property_str(header_sform, "length", "int")/4) - sform1D = np.frombuffer(raw, dtype=np.float32, count=length_sform, offset=offset_sform).byteswap() - sform2D = np.reshape(sform1D, (4,4)) + offset_sform = get_property_str(header_sform, "data", "int") + if offset_sform != -1: + offset_sform += last_idx_header + length_sform = int(get_property_str(header_sform, "length", "int")/4) + sform1D = np.frombuffer(raw, dtype=np.float32, count=length_sform, offset=offset_sform).byteswap() + sform2D = np.reshape(sform1D, (4,4)) + nii_loaded.set_sform(sform2D) header_dim = get_subheader(header, "dim: bundle") - offset_dim = get_property_str(header_dim, "data", "int") + last_idx_header - length_dim = int(get_property_str(header_dim, "length", "int")/4) - dim1D = np.frombuffer(raw, dtype=np.float32, count=length_dim, offset=offset_dim) - + offset_dim = get_property_str(header_dim, "data", "int") + if offset_sform != -1: + offset_sform += last_idx_header + length_dim = int(get_property_str(header_dim, "length", "int")/4) + dim1D = np.frombuffer(raw, dtype=np.float32, count=length_dim, offset=offset_dim) + header_pixdim = get_subheader(header, "pixdim: bundle") - offset_pixdim= get_property_str(header_dim, "data", "int") + last_idx_header - length_pixdim = int(get_property_str(header_dim, "length", "int")/4) - pixdim1D = np.frombuffer(raw, dtype=np.float32, count=length_dim, offset=offset_dim) - - + offset_pixdim= get_property_str(header_dim, "data", "int") + if offset_sform != -1: + offset_sform += last_idx_header + length_pixdim = int(get_property_str(header_dim, "length", "int")/4) + pixdim1D = np.frombuffer(raw, dtype=np.float32, count=length_dim, offset=offset_dim) + + header_qform = get_subheader(header, "qform: bundle") - offset_qform = get_property_str(header_qform, "data", "int") + last_idx_header - length_qform = int(get_property_str(header_qform, "length", "int")/4) - qformdim1D = np.frombuffer(raw, dtype=np.float32, count=length_qform, offset=offset_qform) - # quatern_b quatern_c quatern_d qoffset_x qoffset_y qoffset_z + offset_qform = get_property_str(header_qform, "data", "int") + if offset_sform != -1: + offset_sform += last_idx_header + length_qform = int(get_property_str(header_qform, "length", "int")/4) + qformdim1D = np.frombuffer(raw, dtype=np.float32, count=length_qform, offset=offset_qform) + nii_loaded.header['quatern_b'] = qformdim1D[0] + nii_loaded.header['quatern_c'] = qformdim1D[1] + nii_loaded.header['quatern_d'] = qformdim1D[2] + nii_loaded.header['qoffset_x'] = qformdim1D[3] + nii_loaded.header['qoffset_y'] = qformdim1D[4] + nii_loaded.header['qoffset_z'] = qformdim1D[5] + # quatern_b quatern_c quatern_d qoffset_x qoffset_y qoffset_z - #%% convert to nii object... fill in data and header - nii_loaded = nib.Nifti1Image(data, affine=np.eye(4)) - # import pdb; pdb.set_trace() - nii_loaded.header.set_zooms(mm) - nii_loaded.header['pixdim'][4] = tr - nii_loaded.set_sform(sform2D) - nii_loaded.header['qform_code'] = qform_code - nii_loaded.header['qform_code'] = sform_code - nii_loaded.header['quatern_b'] = qformdim1D[0] - nii_loaded.header['quatern_c'] = qformdim1D[1] - nii_loaded.header['quatern_d'] = qformdim1D[2] - nii_loaded.header['qoffset_x'] = qformdim1D[3] - nii_loaded.header['qoffset_y'] = qformdim1D[4] - nii_loaded.header['qoffset_z'] = qformdim1D[5] - nii_loaded.header.set_xyzt_units(xyz="mm", t="msec") return nii_loaded -- GitLab