Как отобразить изображение маски сегментации изображения истинности в python?

#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 классам.