skimage 中的切片分割

Slic segmentation in 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()

Original image Labeled image

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

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

然后您将获得预期的输出,并正确检测到左上角的部分(以前为 0,现在为 1):