检测分割标签的边界像素
Detecting border pixel of a segmentation label
我可以使用 skimage 计算 SLIC 边界,如下所示:
def compute_superpixels(frame, num_pixels=100, std=5, iter_max=10,
connectivity=False, compactness=10.0):
return slic(frame, n_segments=num_pixels, sigma=std, max_iter=iter_max,
enforce_connectivity=connectivity, compactness=compactness)
现在,我想要做的是获取构成每个标签边界的像素索引。所以我的想法是获取属于给定段的所有像素,然后检查哪些像素在所有两个方向上都有变化
def boundary_pixels(segments, index):
# Get all pixels having a given index
x, y = np.where(segments == index)
right = x + 1
# check we are in bounds
right_mask = right < segments.shape[0]
down = y + 1
down_mask = down < segments.shape[1]
left = x - 1
left_mask = left >= 0
up = y - 1
up_mask = up >= 0
neighbors_1 = np.union1d(right_n, down_n)
neighbors_2 = np.union1d(left_n, up_n)
neighbors = np.union1d(neighbors_1, neighbors_2)
# Not neighbours to ourselves
neighbors = np.delete(neighbors, np.where(neighbors == i))
然而,我所做的就是让邻居在给定标签的 4 个方向上。有人可以建议一些方法来实际获取标签边框上的所有像素。
您可以使用 skimage.measure 模块中的 find_contours 函数来查找像素沿边界的坐标。 find_contours. 提供了一个示例。接下来,您可以根据需要在两个方向进行更改。
我找到了我自己问题的答案。 skimage.segmentation 包中的 mark_boundaries 正是我所需要的。
用法:
processed = mark_boundaries(frame, segments==some_segment)
这里frame是当前图像帧,segments是标签数组。 some_segment 是我们感兴趣的边界的标签整数索引。
我可以使用 skimage 计算 SLIC 边界,如下所示:
def compute_superpixels(frame, num_pixels=100, std=5, iter_max=10,
connectivity=False, compactness=10.0):
return slic(frame, n_segments=num_pixels, sigma=std, max_iter=iter_max,
enforce_connectivity=connectivity, compactness=compactness)
现在,我想要做的是获取构成每个标签边界的像素索引。所以我的想法是获取属于给定段的所有像素,然后检查哪些像素在所有两个方向上都有变化
def boundary_pixels(segments, index):
# Get all pixels having a given index
x, y = np.where(segments == index)
right = x + 1
# check we are in bounds
right_mask = right < segments.shape[0]
down = y + 1
down_mask = down < segments.shape[1]
left = x - 1
left_mask = left >= 0
up = y - 1
up_mask = up >= 0
neighbors_1 = np.union1d(right_n, down_n)
neighbors_2 = np.union1d(left_n, up_n)
neighbors = np.union1d(neighbors_1, neighbors_2)
# Not neighbours to ourselves
neighbors = np.delete(neighbors, np.where(neighbors == i))
然而,我所做的就是让邻居在给定标签的 4 个方向上。有人可以建议一些方法来实际获取标签边框上的所有像素。
您可以使用 skimage.measure 模块中的 find_contours 函数来查找像素沿边界的坐标。 find_contours. 提供了一个示例。接下来,您可以根据需要在两个方向进行更改。
我找到了我自己问题的答案。 skimage.segmentation 包中的 mark_boundaries 正是我所需要的。
用法:
processed = mark_boundaries(frame, segments==some_segment)
这里frame是当前图像帧,segments是标签数组。 some_segment 是我们感兴趣的边界的标签整数索引。