Обработка очень больших изображений в виде массивов - PullRequest
0 голосов
/ 13 мая 2018

Я имею дело с изображениями размером более 8 ГБ в формате .svs.Используя openslide, я прочитал их как одномерные массивы.Теперь, чтобы передать их в алгоритм, мне нужно преобразовать их в форму изображения для обработки информации, связанной с расположением пикселей.Поскольку изображения очень большие, использование PIL для преобразования массива numpy в

image=np.load('test.npy') 
im=Image.fromarray(image)

приводит к ошибке size does not fit in int.Я попытался обойти эту ошибку, изменив значение dtype с uint8 на uint64, но мой питон продолжает падать, несмотря на то, что на моей рабочей станции 64GB RAM and 3 TB memory.

Затем я попытался загрузить массив numpy, используя memmap:

    im = np.load(curr_path)
    shapeIm=im[:].shape  ##shape of the image
    name_no_ext = os.path.splitext(f[i])[0]
    filename=path.join(dir,name_no_ext+'.tif') ##filename to save the image file
    #Create a memmap with dtype and shape that matches our data:
    fp = np.memmap(filename, dtype='uint8', mode='w+',shape=shapeIm)  #memmap to read/write very large image files in chunks directly from disk
    #Write data to memmap array:
    fp[:] = im[:]
    fp.filename == path.abspath(filename)
    #Deletion flushes memory changes to disk before removing the object:
    del fp
    #Load the memmap and verify data was stored:
    newfp = np.memmap(filename, dtype='uint8', mode='r+', shape=shapeIm)

Теперь приведенный выше код дает мне изображение в формате .tif.Но я не могу это обработать.Я не мог понять, почему?Я обнаружил это, когда попытался прочитать это изображение и распечатать его форму.

AttributeError: у объекта 'NoneType' нет атрибута 'shape'

Итак, этот способ также не удался для меня.Затем я попытался изменить массив массивов в форме изображения (44331, 64625, 3), и я получил следующую ошибку

ValueError: последовательность слишком большая;не может быть больше 32

Может кто-нибудь помочь мне, как обработать такое изображение.У меня есть аннотации этих изображений в положениях x, y, z в пикселях, и чтобы обработать эти аннотации как основную правду, мне нужно преобразовать мой массивный массив в форму изображения.

Любая помощь будет отличной.

Редактировать: Теперь я получил изменение массива numpy.Но, все еще не знаю, как использовать пустые файлы в качестве входных данных моего набора данных вместо изображений.

...