Ejemplo n.º 1
0
def try_stirtonifti():
    time.sleep(0.5)
    sys.stderr.write(
        '\n# --------------------------------------------------------------------------------- #\n'
    )
    sys.stderr.write(
        '#                             Starting STIR to Nifti test...\n')
    sys.stderr.write(
        '# --------------------------------------------------------------------------------- #\n'
    )
    time.sleep(0.5)

    import pSTIR

    # Input filenames
    nifti_filename = SIRF_PATH + '/data/examples/Registration/test2.nii.gz'

    # Load the image as a NiftiImageData3D
    image_nifti = pReg.NiftiImageData3D(nifti_filename)

    # Read as STIRImageData, convert to NiftiImageData3D and save to file
    image_stir = pSTIR.ImageData(nifti_filename)
    image_nifti_from_stir = pReg.NiftiImageData3D(image_stir)
    image_nifti_from_stir.write('results/stir_to_nifti.nii',
                                image_nifti.get_original_datatype())

    # Compare the two
    if image_nifti != image_nifti_from_stir:
        raise AssertionError("Conversion from STIR to Nifti failed.")

    time.sleep(0.5)
    sys.stderr.write(
        '\n# --------------------------------------------------------------------------------- #\n'
    )
    sys.stderr.write(
        '#                             Finished STIR to Nifti test.\n')
    sys.stderr.write(
        '# --------------------------------------------------------------------------------- #\n'
    )
    time.sleep(0.5)
Ejemplo n.º 2
0
def try_niftiimage():
    time.sleep(0.5)
    sys.stderr.write(
        '\n# --------------------------------------------------------------------------------- #\n'
    )
    sys.stderr.write(
        '#                             Starting NiftiImageData test...\n')
    sys.stderr.write(
        '# --------------------------------------------------------------------------------- #\n'
    )
    time.sleep(0.5)

    # default constructor
    a = pReg.NiftiImageData()
    if a.handle is None:
        raise AssertionError()

    # Read from file
    b = pReg.NiftiImageData(ref_aladin_filename)

    # Save to file
    b.write(save_nifti_image)

    # Fill
    b.fill(100)

    # Get max
    if b.get_max() != 100:
        raise AssertionError('NiftiImageData fill()/get_max() failed.')

    # Get min
    if b.get_min() != 100:
        raise AssertionError('NiftiImageData fill()/get_min() failed.')

    # Deep copy
    d = b.deep_copy()
    if d.handle == b.handle:
        raise AssertionError('NiftiImageData deep_copy failed.')
    if d != b:
        raise AssertionError("NiftiImageData deep_copy failed.")

    # Addition
    e = d + d
    if abs(e.get_max() - 2 * d.get_max()) > 0.0001:
        raise AssertionError('NiftiImageData __add__/get_max() failed.')

    # Subtraction
    e = d - d
    if abs(e.get_max()) > 0.0001:
        raise AssertionError('NiftiImageData __sub__ failed.')

    # Sum
    if abs(e.get_sum()) > 0.0001:
        raise AssertionError('NiftiImageData get_sum() failed.')

    # Add num to image
    q = e + 1
    if q.get_max() != e.get_max() + 1:
        raise AssertionError('NiftiImageData __add__ val failed.')

    # Subtract num from image
    r = e - 1
    if r.get_max() != e.get_max() - 1:
        raise AssertionError('NiftiImageData __sub__ val failed.')

    # Multiply image by num
    s = e * 10
    if s.get_max() != e.get_max() * 10:
        raise AssertionError('NiftiImageData __mul__ val failed.')

    # Dimensions
    f = e.get_dimensions()
    if not np.array_equal(f, [3, 64, 64, 64, 1, 1, 1, 1]):
        raise AssertionError('NiftiImageData get_dimensions() failed.')

    # Get as array
    arr = d.as_array()
    if arr.max() != 100:
        raise AssertionError('NiftiImageData as_array().max() failed.')
    if arr.ndim != 3:
        raise AssertionError('NiftiImageData as_array() ndims failed.')
    if arr.shape != (64, 64, 64):
        raise AssertionError('NiftiImageData as_array().shape failed.')

    # Test saving to datatype
    ref_aladin.write(output_float, 16)  # float
    ref_aladin_float = pReg.NiftiImageData3D(output_float)
    arr1 = ref_aladin.as_array()
    arr2 = ref_aladin_float.as_array()
    if not np.array_equal(arr1, arr2):
        raise AssertionError(
            "NiftiImageData::write()/change_datatype() failed.")

    # Test print methods
    q.print_header()
    pReg.NiftiImageData.print_headers([q, s])

    # Crop image
    min_ = []
    max_ = []
    for i in range(0, 7):
        min_.append(0)
        max_.append(f[i + 1] - 1)
    max_[2] = 62
    s = e
    s.crop(min_, max_)
    if s.as_array().shape != (64, 64, 63):
        raise AssertionError("NiftiImageData crop() failed.")

    # Get voxel sizes
    s = b.get_voxel_sizes()
    if not all(
            numpy.equal(s, numpy.array([0, 4.0625, 4.0625, 4.0625, 0, 0, 0, 0
                                        ]))):
        raise AssertionError("NiftiImageData get_voxel_sizes() failed.")

    # Check upsampling/downsampling
    u = pReg.NiftiImageData(ref_aladin_filename)
    original_spacing = u.get_voxel_sizes()
    original_spacing = original_spacing[1:4]
    upsampled_spacing = [
        original_spacing[0] / 2, original_spacing[1] / 4, original_spacing[2]
    ]
    downsampled_spacing = [
        original_spacing[0] * 2, original_spacing[1] * 4, original_spacing[2]
    ]
    # Downsample
    v = u.deep_copy()
    v.set_voxel_spacing(downsampled_spacing, 3)
    v.write(save_nifti_image_downsample)
    # Upsample then downsample, check nothing has changed
    w = u.deep_copy()
    w.set_voxel_spacing(upsampled_spacing, 0)
    w.write(save_nifti_image_upsample)
    x = w.deep_copy()
    x.set_voxel_spacing(original_spacing, 0)
    x.write(save_nifti_image_up_downsample)
    pReg.NiftiImageData.print_headers([u, v, w, x])
    if x != u:
        raise AssertionError('NiftiImageData::upsample()/downsample() failed.')

    # Check get_contains_nans
    x_arr = x.as_array()
    x_arr.fill(0)
    x.fill(x_arr)
    if x.get_contains_nans():
        raise AssertionError('NiftiImageData::get_contains_nans() 1 failed.')
    x_arr[1] = np.nan
    x.fill(x_arr)
    if not x.get_contains_nans():
        raise AssertionError('NiftiImageData::get_contains_nans() 2 failed.')

    time.sleep(0.5)
    sys.stderr.write(
        '\n# --------------------------------------------------------------------------------- #\n'
    )
    sys.stderr.write(
        '#                             Finished NiftiImageData test.\n')
    sys.stderr.write(
        '# --------------------------------------------------------------------------------- #\n'
    )
    time.sleep(0.5)
Ejemplo n.º 3
0
def try_niftiimage3d():
    time.sleep(0.5)
    sys.stderr.write(
        '\n# --------------------------------------------------------------------------------- #\n'
    )
    sys.stderr.write(
        '#                             Starting NiftiImageData3D test...\n')
    sys.stderr.write(
        '# --------------------------------------------------------------------------------- #\n'
    )
    time.sleep(0.5)

    # default constructor
    a = pReg.NiftiImageData3D()
    if a.handle is None:
        raise AssertionError()

    # Read from file
    b = pReg.NiftiImageData3D(ref_aladin_filename)

    # Save to file
    b.write(save_nifti_image_3d)

    # Fill
    b.fill(100)

    # Get max
    if b.get_max() != 100:
        raise AssertionError('NiftiImageData3D fill()/get_max() failed.')

    # Get min
    if b.get_min() != 100:
        raise AssertionError('NiftiImageData3D fill()/get_min() failed.')

    # Deep copy
    d = b.deep_copy()
    if d.handle == b.handle:
        raise AssertionError('NiftiImageData3D deep_copy failed.')
    if d != b:
        raise AssertionError("NiftiImageData3D deep_copy failed.")

    # Addition
    e = d + d
    if abs(e.get_max() - 2 * d.get_max()) > 0.0001:
        raise AssertionError('NiftiImageData3D __add__/get_max() failed.')

    # Subtraction
    e = d - d
    if abs(e.get_max()) > 0.0001:
        raise AssertionError('NiftiImageData3D __sub__ failed.')

    # Sum
    if abs(e.get_sum()) > 0.0001:
        raise AssertionError('NiftiImageData3D get_sum() failed.')

    # Dimensions
    f = e.get_dimensions()
    if not np.array_equal(f, [3, 64, 64, 64, 1, 1, 1, 1]):
        raise AssertionError('NiftiImageData3D get_dimensions() failed.')

    # Get as array
    arr = d.as_array()
    if arr.max() != 100:
        raise AssertionError('NiftiImageData3D as_array().max() failed.')
    if arr.ndim != 3:
        raise AssertionError('NiftiImageData3D as_array() ndims failed.')
    if arr.shape != (64, 64, 64):
        raise AssertionError('NiftiImageData3D as_array().shape failed.')

    # try linear algebra
    h = d / 10000
    if abs(h.get_max() - d.get_max() / 10000) > 1e-4:
        raise AssertionError('NiftiImageData3D linear algebra failed.')

    time.sleep(0.5)
    sys.stderr.write(
        '\n# --------------------------------------------------------------------------------- #\n'
    )
    sys.stderr.write(
        '#                             Finished NiftiImageData3D test.\n')
    sys.stderr.write(
        '# --------------------------------------------------------------------------------- #\n'
    )
    time.sleep(0.5)
Ejemplo n.º 4
0
aladin_def_inverse = output_prefix + "aladin_def_inverse_%s.nii"
aladin_disp_forward = output_prefix + "aladin_disp_forward.nii"
aladin_disp_inverse = output_prefix + "aladin_disp_inverse_%s.nii"
f3d_def_forward = output_prefix + "f3d_disp_forward.nii"
f3d_def_inverse = output_prefix + "f3d_disp_inverse_%s.nii"
f3d_disp_forward = output_prefix + "f3d_disp_forward.nii"
f3d_disp_inverse = output_prefix + "f3d_disp_inverse_%s.nii"

rigid_resample = output_prefix + "rigid_resample.nii"
nonrigid_resample_disp = output_prefix + "nonrigid_resample_disp.nii"
nonrigid_resample_def = output_prefix + "nonrigid_resample_def.nii"
output_weighted_mean = output_prefix + "weighted_mean.nii"
output_weighted_mean_def = output_prefix + "weighted_mean_def.nii"
output_float = output_prefix + "reg_aladin_float.nii"

ref_aladin = pReg.NiftiImageData3D(ref_aladin_filename)
flo_aladin = pReg.NiftiImageData3D(flo_aladin_filename)
ref_f3d = pReg.NiftiImageData3D(ref_f3d_filename)
flo_f3d = pReg.NiftiImageData3D(flo_f3d_filename)


# NiftiImageData
def try_niftiimage():
    time.sleep(0.5)
    sys.stderr.write(
        '\n# --------------------------------------------------------------------------------- #\n'
    )
    sys.stderr.write(
        '#                             Starting NiftiImageData test...\n')
    sys.stderr.write(
        '# --------------------------------------------------------------------------------- #\n'