Сегментация ломтиков в лыжном магии - PullRequest
0 голосов
/ 03 февраля 2019

Я использую библиотеку 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()

Исходное изображение Изображение с маркировкой

1 Ответ

0 голосов
/ 05 февраля 2019

Это неудачная историческая авария: SLIC возвращает сегменты, начиная с 0, но regionprops (и большинство других функций) рассматривают 0 как фон.Чтобы исправить ваш код, добавьте 1 к выводу SLIC:

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

Затем вы получите ожидаемый результат с правильно определенным верхним левым сегментом (ранее 0, теперь 1):

slic-modified-output

...