def test_write_4d_single_directory_explicit(self): si1 = Series( os.path.join('data', 'itk', 'time'), 'none', self.opts) with tempfile.TemporaryDirectory() as d: si1.write(os.path.join(d, 'Image%05d.mha'), formats=['itk']) si2 = Series(d) self.assertEqual(si1.dtype, si2.dtype) self.assertEqual(si1.shape, si2.shape)
def test_dicom_template_prog(self): # Read the DICOM empty header series, # adding DICOM template in Series constructor template = Series(os.path.join('data', 'dicom', 'time', 'time00')) si1 = Series(os.path.join(self.emptydir.name, 'empty_header'), template=template) si2 = Series(os.path.join('data', 'dicom', 'time', 'time00')) # Compare constructed series si1 to original series si2 self.assertEqual(si1.dtype, si2.dtype) np.testing.assert_array_equal(si1, si2) compare_template_headers(self, si1, si2)
def test_write_single_file(self): si1 = Series( os.path.join( 'data', 'nifti', 'time_all.zip?time/time_all_fl3d_dynamic_20190207140517_14.nii.gz' )) with tempfile.TemporaryDirectory() as d: si1.write(os.path.join(d, 'nifti.zip'), formats=['nifti']) si2 = Series(os.path.join(d, 'nifti.zip?Image.nii.gz')) self.assertEqual(si1.dtype, si2.dtype) self.assertEqual(si1.shape, si2.shape)
def test_write_single_file(self): si1 = Series( os.path.join('data', 'dicom', 'time.zip?time/time00/Image_00020.dcm')) with tempfile.TemporaryDirectory() as d: si1.write(os.path.join(d, 'dicom.zip'), formats=['dicom']) si2 = Series(os.path.join(d, 'dicom.zip?Image_00000.dcm')) self.assertEqual(si1.dtype, si2.dtype) self.assertEqual(si2.dtype, np.uint16) self.assertEqual(si1.shape, si2.shape) self.assertEqual(si1.studyInstanceUID, si2.studyInstanceUID)
def test_qform_3D(self): dcm = Series(os.path.join('data', 'dicom', 'time', 'time00')) self.assertEqual('dicom', dcm.input_format) with tempfile.TemporaryDirectory() as d: dcm.write(d, formats=['nifti']) n = Series(d) self.assertEqual('nifti', n.input_format) nt = n.transformationMatrix self.assertEqual(dcm.shape, n.shape) self.assertEqual(dcm.dtype, n.dtype) np.testing.assert_allclose(n.transformationMatrix, dcm.transformationMatrix, rtol=1e-2)
def test_read_2D(self): dcm = Series(os.path.join('data', 'dicom', 'time', 'time00')) si2 = dcm[0, ...] with tempfile.TemporaryDirectory() as d: si2.write(d, formats=['nifti']) si3 = Series(d, template=si2) with tempfile.TemporaryDirectory() as d: si3.write(d, formats=['dicom']) self.assertEqual(si2.dtype, si3.dtype) self.assertEqual(si2.shape, si3.shape) np.testing.assert_array_equal(si2, si3)
def test_slicing_x(self): a1 = np.eye(128) a1.shape = (1, 128, 128) a = np.vstack([a1, a1, a1]) s = Series(a) s.spacing = (1, 1, 1) s.axes[0] = imagedata.axis.UniformLengthAxis('slice', 0, s.shape[0]) a_slice = a[:, 3:5, ...] s_slice = s[:, 3:5, ...] np.testing.assert_array_equal(a_slice, s_slice) self.assertEqual(s_slice.slices, 3)
def test_read_2D(self): si1 = Series(os.path.join('data', 'mat', 'time', 'Image_00000.mat'), imagedata.formats.INPUT_ORDER_TIME, self.opts) self.assertEqual(si1.dtype, np.uint16) self.assertEqual(si1.shape, (3, 3, 192, 152)) si2 = si1[0, 0, ...] with tempfile.TemporaryDirectory() as d: si2.write(d, formats=['mat']) si3 = Series(d) self.assertEqual(si2.dtype, si3.dtype) self.assertEqual(si2.shape, si3.shape) np.testing.assert_array_equal(si2, si3)
def test_copy_dicom_4D(self): si = Series( os.path.join('data', 'dicom', 'time'), imagedata.formats.INPUT_ORDER_TIME, self.opts) logging.debug("si.sliceLocations: {}".format(si.sliceLocations)) logging.debug("si.imagePositions.keys(): {}".format(si.imagePositions.keys())) newsi = Series(si, imagedata.formats.INPUT_ORDER_TIME) compare_headers(self, si, newsi) self.assertEqual(newsi.dtype, np.uint16) self.assertEqual(newsi.shape, (3, 3, 192, 152))
def test_cross_talk(self): si = Series('data/dicom/time/time00') # print('si before', si.getDicomAttribute('SeriesInstanceUID'), si.seriesInstanceUID) si1 = si[0] si1.seriesNumber = si.seriesNumber + 10 self.assertNotEqual(si.seriesNumber, si1.seriesNumber) # print('si after', si.getDicomAttribute('SeriesInstanceUID'), si.seriesInstanceUID) # print('si1', si1.getDicomAttribute('SeriesInstanceUID'), si1.seriesInstanceUID) self.assertNotEqual(si.seriesInstanceUID, si1.seriesInstanceUID) si2 = Series('data/dicom/time/time00') si2.seriesNumber += 10 self.assertNotEqual(si.seriesNumber, si2.seriesNumber)
def test_slicing_t_neg(self): from numpy.random import default_rng rng = default_rng() s = Series(rng.standard_normal(192).reshape((3, 4, 4, 4))) s.spacing = (1, 1, 1) s.axes[0] = imagedata.axis.UniformLengthAxis('time', 0, s.shape[0]) s.axes[1] = imagedata.axis.UniformLengthAxis('slice', 0, s.shape[1]) np.testing.assert_array_equal(s[2], s[-1]) np.testing.assert_array_equal(s[1], s[-2]) np.testing.assert_array_equal(s[0], s[-3]) np.testing.assert_array_equal(s[1:2], s[1:-1]) np.testing.assert_array_equal(s[1:2, :, :], s[1:-1, :, :]) np.testing.assert_array_equal(s[0:1, :, :], s[0:-2, :, :])
def test_slicing_x_neg(self): from numpy.random import default_rng rng = default_rng() s = Series(rng.standard_normal(64).reshape((4, 4, 4))) s.spacing = (1, 1, 1) s.axes[0] = imagedata.axis.UniformLengthAxis('slice', 0, s.shape[0]) np.testing.assert_array_equal(s[:, :, 3], s[:, :, -1]) np.testing.assert_array_equal(s[:, :, 2], s[:, :, -2]) np.testing.assert_array_equal(s[:, :, 1], s[:, :, -3]) np.testing.assert_array_equal(s[:, :, 0], s[:, :, -4]) np.testing.assert_array_equal(s[:, :, 2:3], s[:, :, 2:-1]) np.testing.assert_array_equal(s[:, :, 1:2], s[:, :, 1:-2]) np.testing.assert_array_equal(s[:, :, 0:2], s[:, :, 0:-2])
def test_slicing_dim(self): a1 = np.eye(128) a1.shape = (1, 128, 128) a = np.vstack([a1, a1, a1, a1, a1]) s = Series(a) s.spacing = (1, 1, 1) s.axes[0] = imagedata.axis.UniformLengthAxis('slice', 0, s.shape[0]) s_slice = s[2] self.assertEqual(s_slice.ndim, 2) self.assertEqual(len(s_slice.axes), 2) self.assertEqual(s_slice.axes[0].name, 'row') self.assertEqual(s_slice.axes[1].name, 'column')
def test_set_axes(self): si1 = Series('data/dicom/time/time00') shape = si1.shape + (3, ) img = np.zeros(shape, dtype=np.uint8) img[..., 0] = si1[:] img[..., 1] = si1[:] img[..., 2] = si1[:] rgb = Series(img, geometry=si1, axes=si1.axes + [imagedata.axis.VariableAxis('rgb', ['r', 'g', 'b'])])
def test_transport_single_image(self): si1 = Series( os.path.join('data', 'dicom', 'time', 'time00', 'Image_00020.dcm') ) self.assertEqual((192, 152), si1.shape) si1.write('dicom://localhost:11112/Temp', formats=['dicom']) si2 = Series( scpdir.name ) # compare_headers(obj, si1, si2) self.assertEqual(si1.dtype, si2.dtype) self.assertEqual(si1.shape, si2.shape) np.testing.assert_array_equal(si1, si2)
def test_write_single_file(self): si1 = Series( os.path.join( 'data', 'nifti', 'time_all', 'time_all_fl3d_dynamic_20190207140517_14.nii.gz'), 'time', self.opts) with tempfile.TemporaryDirectory() as d: si1.write(d + '?Image%1d.nii.gz', formats=['nifti']) si2 = Series(os.path.join(d, 'Image0.nii.gz'), 'time') self.assertEqual(si1.dtype, si2.dtype) self.assertEqual(si1.shape, si2.shape)
def test_compare_qform_to_dicom(self): dcm = Series( os.path.join('data', 'dicom', 'time'), 'time') self.assertEqual('dicom', dcm.input_format) dt = dcm.transformationMatrix n = Series( os.path.join('data', 'nifti', 'time', 'time_all_fl3d_dynamic_20190207140517_14.nii.gz'), 'time') self.assertEqual('nifti', n.input_format) nt = n.transformationMatrix self.assertEqual(dcm.shape, n.shape) # obj.assertEqual(dcm.dtype, n.dtype) np.testing.assert_allclose(n.transformationMatrix, dcm.transformationMatrix, rtol=1e-3)
def test_slicing_z_neg(self): from numpy.random import default_rng rng = default_rng() s = Series(rng.standard_normal(64).reshape((4, 4, 4))) s.spacing = (1, 1, 1) s.axes[0] = imagedata.axis.UniformLengthAxis('slice', 0, s.shape[0]) np.testing.assert_array_equal(s[3, :, :], s[-1, :, :]) np.testing.assert_array_equal(s[2, :, :], s[-2, :, :]) np.testing.assert_array_equal(s[1, :, :], s[-3, :, :]) np.testing.assert_array_equal(s[0, :, :], s[-4, :, :]) np.testing.assert_array_equal(s[2:3], s[2:-1]) np.testing.assert_array_equal(s[2:3, :, :], s[2:-1, :, :]) np.testing.assert_array_equal(s[1:2, :, :], s[1:-2, :, :]) np.testing.assert_array_equal(s[0:2, :, :], s[0:-2, :, :])
def test_read_2D(self): si1 = Series( os.path.join('data', 'itk', 'time', 'Image_00000.mha'), 'none', self.opts) self.assertEqual(si1.dtype, np.uint16) self.assertEqual(si1.shape, (3, 192, 152)) si2 = si1[0, ...] with tempfile.TemporaryDirectory() as d: si2.write(os.path.join(d, '?Image.mha'), formats=['itk']) si3 = Series(d) self.assertEqual(si2.dtype, si3.dtype) self.assertEqual(si2.shape, si3.shape) np.testing.assert_array_equal(si2, si3)
def test_transport_cget_series(self): patID = '123456' stuInsUID = '1.2.3.4' serInsUID = '1.2.3.4.5' accno = '98765' serNum = 4 si1 = Series('dicom://localhost:11112/Temp/{}/{}/{}'.format( patID, stuInsUID, serInsUID )) print(si1.shape, si1.spacing, si1.patientName, si1.accessionNumber, si1.seriesNumber) si2 = Series('dicom://localhost:11112/Temp/{}/{}/{}'.format( patID, accno, serNum )) print(si2.shape, si2.spacing, si2.patientName, si2.accessionNumber, si2.seriesNumber)
def test_write_4d_mat(self): si1 = Series(os.path.join('data', 'mat', 'time', 'Image_00000.mat'), imagedata.formats.INPUT_ORDER_TIME, self.opts) self.assertEqual(si1.dtype, np.uint16) self.assertEqual(si1.shape, (3, 3, 192, 152)) with tempfile.TemporaryDirectory() as d: si1.write(os.path.join(d, 'mat?Image_%05d'), formats=['mat'], opts=self.opts) # Read back the MAT data and compare to original si1 si2 = Series(os.path.join(d, 'mat', 'Image_00000.mat'), imagedata.formats.INPUT_ORDER_TIME, self.opts) self.assertEqual(si1.shape, si2.shape) np.testing.assert_array_equal(si1, si2)
def test_read_single_directory(self): si1 = Series( os.path.join('data', 'dicom', 'time', 'time00'), 'none', self.opts) self.assertEqual(si1.dtype, np.uint16) self.assertEqual(si1.shape, (3, 192, 152))
def test_read_all_files(self): si1 = Series( os.path.join('data', 'dicom', 'time.zip?time/'), imagedata.formats.INPUT_ORDER_TIME, self.opts) self.assertEqual(si1.dtype, np.uint16) self.assertEqual(si1.shape, (3, 3, 192, 152))
def test_read_two_files(self): si1 = Series( os.path.join('data', 'dicom', 'time.zip?time/time00/Image_0002[01].dcm'), 'none', self.opts) self.assertEqual(si1.dtype, np.uint16) self.assertEqual(si1.shape, (2, 192, 152))
def test_read_single_file_wildcard(self): si1 = Series( os.path.join('data', 'dicom', 'time.zip?*time00/Image_00020.dcm'), 'none', self.opts) self.assertEqual(si1.dtype, np.uint16) self.assertEqual(si1.shape, (192, 152))
def test_zipread_all_files(self): si1 = Series( os.path.join('data', 'nifti', 'time_all.zip'), imagedata.formats.INPUT_ORDER_TIME, self.opts) self.assertEqual(si1.dtype, np.int16) self.assertEqual(si1.shape, (3, 3, 192, 152))
def test_read_two_files(self): si1 = Series([ os.path.join('data', 'mat', 'time', 'Image_00000.mat'), os.path.join('data', 'mat', 'time', 'Image_00000.mat') ], imagedata.formats.INPUT_ORDER_TIME, self.opts) self.assertEqual(si1.dtype, np.uint16) self.assertEqual(si1.shape, (2, 3, 3, 192, 152))
def test_read_two_files2(self): si1 = Series( os.path.join('data', 'dicom', 'time.zip?*0[01]/Image_0002[01].dcm'), imagedata.formats.INPUT_ORDER_TIME, self.opts) self.assertEqual(si1.dtype, np.uint16) self.assertEqual(si1.shape, (2, 2, 192, 152))
def test_read_single_directory(self): si1 = Series( os.path.join('data', 'itk', 'time'), imagedata.formats.INPUT_ORDER_TIME, self.opts) self.assertEqual(si1.dtype, np.uint16) self.assertEqual(si1.shape, (3, 3, 192, 152))
def test_read_single_file(self): si1 = Series( os.path.join('data', 'dicom', 'time', 'time00', 'Image_00020.dcm'), 'none', self.opts) self.assertEqual(si1.input_format, 'dicom') self.assertEqual(si1.dtype, np.uint16) self.assertEqual(si1.shape, (192, 152))