import numpy as np from scipy import ndimage mask = np.array( [ [0, 1, 1, 0, 0, 0], [0, 0, 1, 0, 1, 0], [1, 1, 0, 0, 0, 1], [0, 0, 0, 1, 1, 1], ], dtype=bool, ) labels, component_count = ndimage.label(mask) component_slices = ndimage.find_objects(labels) diagonal_structure = ndimage.generate_binary_structure(2, 2) diagonal_labels, diagonal_count = ndimage.label( mask, structure=diagonal_structure, ) def print_grid(title, array): print(f"{title}:") for row in array.astype(int): print(" " + " ".join(str(value) for value in row)) print_grid("mask", mask) print() print_grid("default labels", labels) print(f"component_count: {component_count}") print() print("component slices:") for label_id, slices in enumerate(component_slices, start=1): row_slice, col_slice = slices pixels = np.count_nonzero(labels[slices] == label_id) print( f" label {label_id}: " f"rows {row_slice.start}:{row_slice.stop}, " f"cols {col_slice.start}:{col_slice.stop}, " f"pixels {pixels}" ) print() print_grid("8-connected labels", diagonal_labels) print(f"8_connected_component_count: {diagonal_count}")