首页 > 解决方案 > skimage中的切片分割

问题描述

我正在使用 skimage 库来定义图形节点和边,它们将描述某些图像。在应用算法并绘制分段区域后,我意识到其中一个区域没有被标记。我的目标是标记所有区域并找出每个区域的所有邻居,但我一直试图回答这个问题。我将非常感谢任何有用的信息。

import imageio
import numpy as np
import matplotlib.image as mpimg
import matplotlib.pyplot as plt
from skimage.measure import regionprops
from skimage.segmentation import slic
from skimage.segmentation import mark_boundaries

def rgb2gray(rgb):
    return np.dot(rgb[..., :3], [0.2126, 0.7152, 0.0722])

image = imageio.imread(img_file_path)
segments_slic = slic(image, n_segments=250, compactness=100)
regions = regionprops(segments_slic, intensity_image=rgb2gray(image))
for props in regions:
    cy, cx = props.centroid
    plt.plot(cx, cy, 'ro')

plt.imshow(mark_boundaries(image, segments_slic))
plt.show()

原始图像 标记图像

标签: pythonobject-detectionscikit-image

解决方案


这是一个不幸的历史意外:SLIC 返回从 0 开始的段,但 regionprops(和大多数其他函数)将 0 视为背景。要修复您的代码,请将 1 添加到 SLIC 的输出中:

segments_slic = 1 + slic(image, n_segments=250, compactness=100)

然后你得到你期望的输出,左上段(以前为 0,现在为 1)正确检测到:

切片修改输出


推荐阅读