我有一个二进制图像:numpy.ndarray(dtype=bool)
。它有几百个由True
值填充的连通区域。
但是我只对其中一个区域感兴趣。我知道其中一个元素的位置,想要找出该感兴趣区域的边界框(也许还想知道该区域其他点的位置)。
最好的方法是什么?
我有一个二进制图像:numpy.ndarray(dtype=bool)
。它有几百个由True
值填充的连通区域。
但是我只对其中一个区域感兴趣。我知道其中一个元素的位置,想要找出该感兴趣区域的边界框(也许还想知道该区域其他点的位置)。
最好的方法是什么?
根据您的图像大小,最简单的方法可能是对图像进行标记以获取所有连接的组件。使用已知像素的标签来获取连接的像素。使用skimage.measure.label
和skimage.measure.regionprops
可以使这个过程变得非常简单。请确保理解label
的connectivity
或neighbors
参数,因为它会影响对角邻居是否相连。
from skimage import measure
import numpy as np
# load array; arr = np.ndarray(...)
# arr = np.zeros((10,10), dtype=bool)
# arr[:2,:2] = True
# arr[-4:,-4:] = True
labeled = measure.label(arr, background=False, connectivity=2)
label = labeled[8,8] # known pixel location
rp = measure.regionprops(labeled)
props = rp[label - 1] # background is labeled 0, not in rp
props.bbox # (min_row, min_col, max_row, max_col)
props.image # array matching the bbox sub-image
props.coordinates # list of (row,col) pixel indices