skimage flood_fill заполнять целые изображения

#python #scikit-image #flood-fill

#python #scikit-image #заливка-fill

Вопрос:

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

 checkers = invert(cv2.imread('skeleton2.jpg',cv2.IMREAD_GRAYSCALE))

filled_checkers = flood_fill(checkers, (0, 0),50,tolerance=1)

fig, ax = plt.subplots(ncols=2, figsize=(10, 5))

ax[0].imshow(checkers, cmap=plt.cm.gray, vmin=0, vmax=255)
ax[0].set_title('Original')

ax[1].imshow(filled_checkers, cmap=plt.cm.gray, vmin=0, vmax=255)

ax[1].set_title('After flood fill')

plt.show()
  

Чего я хочу https://i.stack.imgur.com/WuQAO.jpg

Что я получаю https://i.stack.imgur.com/P2pd0.jpg

Комментарии:

1. Используемая вами реализация заливки потоком, по-видимому, учитывает, что окрестности пикселя равны восьми другим пикселям, включая диагональные. Из-за линий шириной в один пиксель на вашем исходном изображении поток может «просачиваться» по диагонали между пикселями в наклонных областях линий. Вместо этого вы хотите заполнить окрестности размером в 4 пикселя. Я не вижу такой опции в skimage, но у cv2 FloodFill() есть flags параметр, который может указать это.

2. спасибо, это очень полезно. я думаю, что вместо этого я использую реализацию cv2

3. Параметр существует в scikit-image и вызывается connectivity . Мы используем этот параметр (1-, 2-, …, ndim-связность), а не 4/8-соседство, потому что он подходит для 3D-изображений и выше.

Ответ №1:

Вам нужно передать connectivity=1 в качестве параметра. Смотрите документацию для заливки потоком:

выбираем: ndarray, необязательно

Элемент структурирования, используемый для определения окрестности каждого оцениваемого пикселя. Оно должно содержать только единицы и 0, иметь то же количество измерений, что и изображение. Если не указано, все соседние пиксели рассматриваются как часть окрестности (полностью соединенные).

подключение: int, необязательно

Число, используемое для определения окрестности каждого оцениваемого пикселя. Соседними считаются пиксели, квадрат расстояния которых от центра меньше или равен соединяемости. Игнорируется, если selem не равен None.

Раздел примеров в docstring также содержит примеры, объясняющие возможность подключения.

Комментарии:

1. Так рад, что нашел ваш ответ, поскольку в нем рассматривается проблема заполнения, распространяющегося через диагональные пробелы. Что не сразу было очевидно для меня из чтения документов. Приветствия