def testSimple(self): arr = [[0, 1, 0], [1, 1, 1], [0, 1, 0]] with self.cached_session(): # Single component with id 1. self.assertAllEqual( image_ops.connected_components(math_ops.cast( arr, dtypes.bool)).eval(), arr)
def testRandom_scipy(self): np.random.seed(42) images = np.random.randint(0, 2, size=(10, 100, 200)).astype(np.bool) expected = connected_components_reference_implementation(images) if expected is None: return with self.cached_session(): self.assertAllEqual( image_ops.connected_components(images).eval(), expected)
def testDisconnected(self): arr = math_ops.cast( [[1, 0, 0, 1, 0, 0, 0, 0, 1], [0, 1, 0, 0, 0, 1, 0, 1, 0], [1, 0, 1, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0]], dtypes.bool) # pyformat: disable expected = ([[1, 0, 0, 2, 0, 0, 0, 0, 3], [0, 4, 0, 0, 0, 5, 0, 6, 0], [7, 0, 8, 0, 0, 0, 9, 0, 0], [0, 0, 0, 0, 10, 0, 0, 0, 0], [0, 0, 11, 0, 0, 0, 0, 0, 0]]) # pyformat: disable with self.cached_session(): self.assertAllEqual( image_ops.connected_components(arr).eval(), expected)
def testMultipleImages(self): images = [[[1, 1, 1, 1], [1, 0, 0, 1], [1, 0, 0, 1], [1, 1, 1, 1]], [[1, 0, 0, 1], [0, 0, 0, 0], [0, 0, 0, 0], [1, 0, 0, 1]], [[1, 1, 0, 1], [0, 1, 1, 0], [1, 0, 1, 0], [0, 0, 1, 1]]] # pyformat: disable expected = [[[1, 1, 1, 1], [1, 0, 0, 1], [1, 0, 0, 1], [1, 1, 1, 1]], [[2, 0, 0, 3], [0, 0, 0, 0], [0, 0, 0, 0], [4, 0, 0, 5]], [[6, 6, 0, 7], [0, 6, 6, 0], [8, 0, 6, 0], [0, 0, 6, 6]]] # pyformat: disable with self.cached_session(): self.assertAllEqual( image_ops.connected_components( math_ops.cast(images, dtypes.bool)).eval(), expected)
def testSnake_disconnected(self): for i in range(SNAKE.shape[0]): for j in range(SNAKE.shape[1]): with self.cached_session(): # If we disconnect any part of the snake except for the endpoints, # there will be 2 components. if SNAKE[i, j] and (i, j) not in [(1, 1), (6, 3)]: disconnected_snake = SNAKE.copy() disconnected_snake[i, j] = 0 components = image_ops.connected_components( math_ops.cast(disconnected_snake, dtypes.bool)).eval() self.assertEqual(components.max(), 2, 'disconnect (%d, %d)' % (i, j)) bins = np.bincount(components.ravel()) # Nonzero number of pixels labeled 0, 1, or 2. self.assertGreater(bins[0], 0) self.assertGreater(bins[1], 0) self.assertGreater(bins[2], 0)
def testSnake(self): with self.cached_session(): # Single component with id 1. self.assertAllEqual( image_ops.connected_components( math_ops.cast(SNAKE, dtypes.bool)).eval(), SNAKE)
def testOnes_small(self): with self.cached_session(): self.assertAllEqual( image_ops.connected_components( array_ops.ones((3, 5), dtypes.bool)).eval(), np.ones( (3, 5)))
def testOnes(self): with self.cached_session(): self.assertAllEqual( image_ops.connected_components( array_ops.ones((100, 20, 50), dtypes.bool)).eval(), np.tile(np.arange(100)[:, None, None] + 1, [1, 20, 50]))
def testZeros(self): with self.cached_session(): self.assertAllEqual( image_ops.connected_components( array_ops.zeros((100, 20, 50), dtypes.bool)).eval(), np.zeros((100, 20, 50)))