def test_03_01_shape_dense(self): r = np.random.RandomState() r.seed(101) labels = r.randint(0, 10, size=(2, 3, 4, 5, 6, 7)) s = cpo.Segmentation(dense=labels) self.assertTrue(s.has_shape()) self.assertEqual(tuple(s.shape), tuple(labels.shape[1:]))
def test_02_01_sparse_to_dense(self): # # Make 10 circles that might overlap # r = np.random.RandomState() r.seed(201) i, j = np.mgrid[0:50, 0:50] ii = [] jj = [] vv = [] for idx in range(10): x_loc = r.uniform() * 30 + 10 y_loc = r.uniform() * 30 + 10 max_radius = np.min( [min(loc - 1, 49 - loc) for loc in x_loc, y_loc]) radius = r.uniform() * (max_radius - 5) + 5 mask = ((i - y_loc)**2 + (j - x_loc)**2) <= radius**2 ii.append(i[mask]) jj.append(j[mask]) vv.append(np.ones(np.sum(mask), np.uint32) * (idx + 1)) ijv = np.core.records.fromarrays( [np.hstack(x) for x in ii, jj, vv], [(HDF5ObjectSet.AXIS_Y, np.uint32, 1), (HDF5ObjectSet.AXIS_X, np.uint32, 1), (HDF5ObjectSet.AXIS_LABELS, np.uint32, 1)]) s = cpo.Segmentation(sparse=ijv, shape=(1, 1, 1, 50, 50)) dense, indices = s.get_dense() self.assertEqual(tuple(dense.shape[1:]), (1, 1, 1, 50, 50)) self.assertEqual(np.sum(dense > 0), len(ijv)) retrieval = dense[:, 0, 0, 0, ijv[HDF5ObjectSet.AXIS_Y], ijv[HDF5ObjectSet.AXIS_X]] matches = (retrieval == ijv[HDF5ObjectSet.AXIS_LABELS][None, :]) self.assertTrue(np.all(np.sum(matches, 0) == 1))
def test_01_01_dense(self): r = np.random.RandomState() r.seed(101) labels = r.randint(0, 10, size=(2, 3, 4, 5, 6, 7)) s = cpo.Segmentation(dense=labels) self.assertTrue(s.has_dense()) self.assertFalse(s.has_sparse()) np.testing.assert_array_equal(s.get_dense()[0], labels)
def test_03_02_shape_sparse_explicit(self): r = np.random.RandomState() r.seed(102) shape = (1, 1, 1, 50, 50) ijv = np.core.records.fromarrays( [r.randint(0, 10, size=20) for _ in range(3)], [(HDF5ObjectSet.AXIS_Y, np.uint32, 1), (HDF5ObjectSet.AXIS_X, np.uint32, 1), (HDF5ObjectSet.AXIS_LABELS, np.uint32, 1)]) s = cpo.Segmentation(sparse=ijv, shape=shape) self.assertTrue(s.has_shape()) self.assertEqual(tuple(s.shape), shape)
def test_01_02_sparse(self): r = np.random.RandomState() r.seed(102) ijv = np.core.records.fromarrays( [r.randint(0, 10, size=20) for _ in range(3)], [(HDF5ObjectSet.AXIS_Y, np.uint32, 1), (HDF5ObjectSet.AXIS_X, np.uint32, 1), (HDF5ObjectSet.AXIS_LABELS, np.uint32, 1)]) s = cpo.Segmentation(sparse=ijv) np.testing.assert_array_equal(s.sparse, ijv) self.assertFalse(s.has_dense()) self.assertTrue(s.has_sparse())
def test_02_02_dense_to_sparse(self): # # Make 10 circles that might overlap # r = np.random.RandomState() r.seed(201) i, j = np.mgrid[0:50, 0:50] dense = np.zeros((10, 1, 1, 1, 50, 50), np.uint32) for idx in range(10): x_loc = r.uniform() * 30 + 10 y_loc = r.uniform() * 30 + 10 max_radius = np.min([min(loc - 1, 49 - loc) for loc in x_loc, y_loc]) radius = r.uniform() * (max_radius - 5) + 5 mask = ((i - y_loc) ** 2 + (j - x_loc) ** 2) <= radius ** 2 dense[idx, 0, 0, 0, mask] = idx + 1 s = cpo.Segmentation(dense=dense) ijv = s.sparse self.assertEqual(np.sum(dense > 0), len(ijv)) retrieval = dense[:, 0, 0, 0, ijv[HDF5ObjectSet.AXIS_Y], ijv[HDF5ObjectSet.AXIS_X]] matches = (retrieval == ijv[HDF5ObjectSet.AXIS_LABELS][None, :]) self.assertTrue(np.all(np.sum(matches, 0) == 1))