Как разбить изображение DICOM на плитки? - PullRequest
0 голосов
/ 29 апреля 2018

Я пытаюсь использовать функцию image_slicer для разделения изображения DICOM на тайлы, но он не распознает DICOM.

Я уже прочитал DICOM и преобразовал их в массивы np:

dcm_files [0]

array([[-1024, -1024, -1024, ..., -1024, -1024, -1024],
       [-1024, -1024, -1024, ..., -1024, -1024, -1024],
       [-1024, -1024, -1024, ..., -1024, -1024, -1024],
       ...,
       [-1024, -1024, -1024, ..., -1024, -1024, -1024],
       [-1024, -1024, -1024, ..., -1024, -1024, -1024],
       [-1024, -1024, -1024, ..., -1024, -1024, -1024]], dtype=int16)

и могу просмотреть изображение через:

from PIL import Image
import numpy as np

img = Image.fromarray(dcm_files[0])
img.show()

и затем пытается нарезать его:

import image_slicer
image_slicer.slice(img, 64)

Ошибка: объект «Изображение» не имеет атрибута «чтение»

спасибо!

1 Ответ

0 голосов
/ 06 мая 2018

Модуль image_slicer использует имена файлов, а не экземпляры файлов. Поэтому вы должны сохранить массив в какой-то локализации. Для этой цели вы можете использовать tempfile модуль .

from PIL import Image
import numpy as np
import image_slicer
import tempfile

array = np.random.randint(0,200, size=(128,128), dtype='int32')

img = Image.fromarray(array)

temp = tempfile.NamedTemporaryFile()
img.save(temp.name, format="png")

image_slicer.slice(temp.name, 4)
#if you want to play with the slices:
tiles = image_slicer.slice(temp.name, 4, save=False)
...