#python #image-segmentation
#python #изображение-сегментация
Вопрос:
Я попробовал этот фрагмент кода
from skimage import io
temp = io.imread(mask_input_path)
plt.imshow(temp)
Это отображает его как обычное изображение, следовательно, вывод будет черным.
Ответ №1:
Точно так же, как обычное изображение. Если вся ваша маска черная, это означает, что желаемый объект отсутствует на вашем изображении.
Но чтобы выбрать только замаскированную область, вам нужно 2 дополнительные строки в коде
import matplotlib.pyplot as plt
input_img = plt.imread('img.jpg')
mask_img = plt.imread('mask.jpg')
# select only masked area below
masked = input_img.copy()
masked[mask_img == 0 ] = 0
fig, axes = plt.subplots(1, 3, figsize=(16, 12))
ax = axes.flatten()
ax[0].imshow(input_img, cmap="gray")
ax[0].set_axis_off()
ax[0].set_title("Original Imput Image", fontsize=12)
ax[1].imshow(mask_img, cmap="gray")
ax[1].set_axis_off()
ax[1].set_title("Mask", fontsize=12)
ax[2].imshow(masked, cmap="gray")
ax[2].set_axis_off()
ax[2].set_title("Masked", fontsize=12)
plt.show()
На самом деле, используя
masked[mask_img < 30 ] = 0
дает немного лучшие результаты, потому что значения маски в моем случае не равны нулю
Комментарии:
1. Это работает в случае двоичных масок, потому что 0 принимается как черный, а 1 — как белый. Как насчет случая многоклассовой сегментации. Здесь изображение представляет собой 2D-массив, каждый элемент которого является целым числом, соответствующим классу. Например: каждый пиксель принадлежит от 0 до 7, соответствующим 7 классам.