Создайте двоичные TIFF-файлы (сжатые с помощью lzw) из массива numpy - PullRequest
0 голосов
/ 11 марта 2019

Мне нужно создать двоичные TIFF-файлы (обычно 9-слойный, но важен только слой 0)

У меня есть результаты в виде двухмерных массивов с логическими значениями. Но я не мог написать их в формате TIFF.

Код с PIL:

res = np.zeros((89262, 208796),dtype=bool)
rois = np.load(endfile)
prediction = np.load(pred)

for i in range(prediction.size):
    if(prediction[i]==1):
        y1, x1, y2, x2 = rois[i].astype(int)
        res[y1:y2,x1:x2] =True

im = PIL.Image.fromarray(res,mode='1')

Файл "/path/to/anaconda3/lib/python3.6/site-packages/PIL/Image.py", строка 812, из байтов s = d.decode (data)

OverflowError: размер не помещается в int

Код с pyvips

res = np.zeros((89262, 208796),dtype=bool)
rois = np.load(endfile)
prediction = np.load(pred)

for i in range(prediction.size):
    if(prediction[i]==1):
        y1, x1, y2, x2 = rois[i].astype(int)
        res[y1:y2,x1:x2] =True

im = pyvips.Image.new_from_array(res)

Файл "/path/to/anaconda3/lib/python3.6/site-packages/pyvips/vimage.py", строка 291, в new_from_array a [x + y * width] = массив [y] [x]

TypeError: в скаляры Python могут быть преобразованы только массивы размера 1

PS: Это для испытания Camelyon ACDC LungHP, и вот точные инструкции:

  1. Формат представления должен быть двоичной маской TIFF. Для расчета DICE будет использоваться только уровень L0.

  2. TIFF должен быть сжат в формате LZW.

  3. Участники должны предоставить zip-файл, включающий 50 масок TIFF. Каждое имя файла TIFF должно называться num_mask.tiff, где num - номер тестового изображения (см. Ниже).

https://acdc -lunghp.grand-challenge.org

...