Example #1
0
    def test_callable_data(self):
        def fn(*x):
            raise ValueError(x)

        # 1D test
        tiler = Tiler(data_shape=(100, ), tile_shape=(10, ))
        for i in range(tiler.n_tiles):
            with self.assertRaises(ValueError) as cm:
                tiler.get_tile(fn, i)
            np.testing.assert_equal(
                cm.exception.args[0],
                (*tiler.get_tile_bbox_position(i)[0], *tiler.tile_shape))

        # 2D test
        tiler = Tiler(data_shape=(100, 100), tile_shape=(10, 20))
        for i in range(tiler.n_tiles):
            with self.assertRaises(ValueError) as cm:
                tiler.get_tile(fn, i)
            np.testing.assert_equal(
                cm.exception.args[0],
                (*tiler.get_tile_bbox_position(i)[0], *tiler.tile_shape))

        # 3D test
        tiler = Tiler(data_shape=(100, 100, 100), tile_shape=(10, 20, 50))
        for i in range(tiler.n_tiles):
            with self.assertRaises(ValueError) as cm:
                tiler.get_tile(fn, i)
            np.testing.assert_equal(
                cm.exception.args[0],
                (*tiler.get_tile_bbox_position(i)[0], *tiler.tile_shape))

        # channel dimension test
        tiler = Tiler(data_shape=(100, 100, 3),
                      tile_shape=(10, 20, 3),
                      channel_dimension=2)
        for i in range(tiler.n_tiles):
            with self.assertRaises(ValueError) as cm:
                tiler.get_tile(fn, i)
            np.testing.assert_equal(
                cm.exception.args[0],
                (*tiler.get_tile_bbox_position(i, with_channel_dim=True)[0],
                 *tiler.tile_shape))
Example #2
0
    return img


print('Loading and processing tiles')
imgs = []
for i, img in tqdm(tiler.iterate(reader_func), total=len(tiler)):
    imgs.append(preprocess(img))

masks, flows, styles, diams = model.eval(
    imgs, diameter=diameter, channels=channels)

# Process shapes
print('Converting masks to shapes')
geoms = []
for tile_idx, mask in tqdm(enumerate(masks), total=len(masks)):
    x_offset, y_offset, _ = tiler.get_tile_bbox_position(tile_idx)[0]
    for i in range(mask.max()):
        m = (mask == i+1).astype(np.uint8)
        c, hier = cv2.findContours(m, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
        c = max(c, key=cv2.contourArea).squeeze()
        c[:, 0] = c[:, 0] + x_offset/downsample
        c[:, 1] = c[:, 1] + y_offset/downsample

        new_poly = Polygon(c)
        # Try to fix invalid geoms
        if new_poly.is_valid:
            geoms.append(new_poly)
        else:
            geoms.append(new_poly.buffer(0))

# an auxiliary dictionary to get the original indices
Example #3
0
    def test_tile_bbox_position(self):
        tile_size = 10
        tiler = Tiler(data_shape=self.data.shape, tile_shape=(tile_size, ))
        tiler2 = Tiler(data_shape=(3, ) + self.data.shape,
                       tile_shape=(
                           3,
                           tile_size,
                       ),
                       channel_dimension=0)

        with self.assertRaises(IndexError):
            tiler.get_tile_bbox_position(-1)
        with self.assertRaises(IndexError):
            tiler.get_tile_bbox_position(len(tiler))

        tile_id = 0
        np.testing.assert_equal(([0], [10]),
                                tiler.get_tile_bbox_position(tile_id))
        np.testing.assert_equal(([0], [10]),
                                tiler.get_tile_bbox_position(tile_id, True))
        np.testing.assert_equal(([0], [10]),
                                tiler2.get_tile_bbox_position(tile_id))
        np.testing.assert_equal(([0, 0], [3, 10]),
                                tiler2.get_tile_bbox_position(tile_id, True))

        tile_id = len(tiler) - 1
        np.testing.assert_equal(([90], [100]),
                                tiler.get_tile_bbox_position(tile_id))
        np.testing.assert_equal(([90], [100]),
                                tiler.get_tile_bbox_position(tile_id, True))
        np.testing.assert_equal(([90], [100]),
                                tiler2.get_tile_bbox_position(tile_id))
        np.testing.assert_equal(([0, 90], [3, 100]),
                                tiler2.get_tile_bbox_position(tile_id, True))