Почему я получаю полностью черные метки при преобразовании фрагментов изящных данных в изображения PNG? - PullRequest
0 голосов
/ 18 апреля 2020

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

Я хочу обучить 2D unet трехмерным изящным данным (КТ), взяв по центру 50 срезов для каждого случая. Я сохранил изображения и надписи как png, но надписи полностью черные. Моя цель состоит в том, чтобы предсказать область опухоли (Y), используя срез компьютерной томографии (X).

Что я делаю не так?

Мой код:

labels = []

for i in range (0,100):
  seg = Path("/content/drive/My Drive/")/"case_{:05d}".format(i) / "segmentation.nii.gz"
  seg = nib.load(seg)
  seg = seg.get_data()
  n_i, n_j, n_k = seg.shape
  seg = seg[int(((n_i-1)/2)-25):int(((n_i-1)/2)+25),:,:]

  for i in range(seg.shape[0]):
    labels.append((seg[i,:,:]))
    i+=1

labels = np.array(labels)

for i in range(labels.shape[0]):
    label = (labels[i,:,:])
    imsave('/content/drive/My Drive/labels/labels_slice_{:05d}.png'.format(i), label)
    i += 1

Я делаю то же самое для изображений и получаю следующий файл .png : image_slice_00680

Но для меток я получаю только полностью черное изображение.

Тип данных изображения и метки - float64 и uint16 соответственно.

Пример файла nifti сегментации

1 Ответ

0 голосов
/ 21 апреля 2020

Я проверил ваш файл nifti как в 3D Slicer, так и в nipy, и файл отлично работает. Из 608 срезов в этом файле сегментации только срезы 181-397 имеют положительные значения, поэтому вы должны получить полностью черные изображения для остальных.

Этот короткий фрагмент позволяет мне сохранить положительный пример на 300-м ломтик:

import nibabel
import matplotlib.pyplot as plt

seg = nibabel.load("D:/Downloads/segmentation.nii.gz")
data = seg.get_fdata()
layer = data[300,:,:]

plt.imsave("D:/Downloads/seg.png", layer, cmap='gray')

enter image description here

Дайте мне знать, если вы можете повторить это с помощью кода выше?

Кроме того, я знаю это Это не было частью вопроса, но вам следует рассмотреть возможность использования формата nifti (или NRRD) вместо преобразования их в файлы PNG.

1) При сохранении в PNG вы теряете много информации из КТ. По сути, вы масштабируете значения CT, которые часто находятся в диапазоне от -2000 до +2000 до 0-255 пикселей.

2) Аналогично с масками сегментации, в ваших файлах nifti сегментированная область сохраняется как «1» и фон как "0". Когда вы сохраните его в PNG, его масштаб будет изменен на 0-255, и вам придется снова преобразовать его для обучения по сети.

...