Почему функция водораздела из scikit-image не работает, когда мои исходные точки точно такие же большие, как сосуды, которые я хочу заполнить - PullRequest
1 голос
/ 19 июня 2020

Хорошо, вот ситуация, я хочу сделать водораздел из этого изображения бинарных судов.

Бинарные суда .

Я хочу использовать эти цветные суда в качестве начальные точки для алгоритма.

Исходные точки

Кажется, что, когда я использую необработанное цветное изображение, водораздел не go дальше цветного изображения.

Цель - получить это изображение. Заполненные бинарные сосуды

Используемый код:

distances = distance_transform_edt(vessels)
segmentation = watershed(-distances, markers, mask=vessels).

Единственное решение, которое я нашел, - стереть данные маркеров (1-е цветное изображение).

Ребята, у вас есть решение, почему водораздел делает это? Мы даже пробуем тот же код на других компьютерах, и он работает без эрозии.

Изменить:

Вот изображение расстояний. Когда я беру отрицательный результат, каждая единица становится -1. Таким образом, самые высокие значения на изображении становятся 0.

расстояние изображения

1 Ответ

0 голосов
/ 21 июня 2020

добро пожаловать в ветку scikit-image SO! Ниже приведен небольшой воспроизводимый пример, показывающий, что водораздел ведет себя хорошо даже при касании маркеров.

import matplotlib.pyplot as plt
import numpy as np
from skimage import segmentation
from scipy import ndimage

img = np.zeros((20, 20), dtype=np.bool)
img[3:-3, 3:-3] = True

distance = ndimage.distance_transform_edt(img)

markers = np.zeros_like(img, dtype=np.uint8)
markers[7:-7, 5:10] = 1
markers[7:-7, 10:15] = 2

ws = segmentation.watershed(-distance, markers, mask=img)
fig, ax = plt.subplots(1, 3)
ax[0].imshow(img)
ax[1].imshow(markers)
ax[2].imshow(ws)
plt.show()

Может ли случиться, что пиксели немаркированного судна в вашем массиве маркеров не установлены на 0, а на 1? Водораздел помечает только пиксели с нулевым значением.

Может помочь воспроизводимый автономный скрипт, разные изображения, с которыми вы связались, имели разные размеры, поэтому с ними было трудно работать.

Наконец, вы могли здесь вам будет интересно попробовать алгоритм случайного блуждания , который может дать действительно хорошие результаты для изображений, таких как ваш (без сильных градиентов между областями, которые вы хотите разделить).

...