Размер файла больше ожидаемого при сохранении TIFF с OpenCV - PullRequest
0 голосов
/ 12 июля 2020

Я создаю программу python для загрузки изображения .tiff, вырезания выделения из изображения и сохранения выделения как tiff. Изображения набора данных большие, превышают 1 ГБ. Я могу успешно вырезать то, что мне нужно, и сохранить как tiff, но размеры новых файлов изображений намного больше, чем я ожидал и нуждался.

Открытие Я использую tifffile, чтобы открыть изображение как массив numpy. OpenCV и PIL не смогли открыть файлы из-за размера. Я также пробовал использовать OpenSlide, но в дальнейшем столкнулся с другими проблемами с read_region().

Обрезка Массив numpy имеет форму (height, width, 3), поэтому я обрезаю его, используя что-то вроде large_image[top:bottom, left:right, :]. Это работает по назначению.

Экономия Использование cv2.imwrite() привело к самым маленьким размерам файлов, но они по-прежнему намного больше, чем должны быть. PIL.Image.save() и TiffWriter из tifffile создавали еще более крупные изображения.

Лучшие результаты: обрезка 13 новых изображений из файла размером 250 МБ - используя только около 20% исходного изображения - дает мне файлы общим размером более 900 МБ . Я ожидаю, что общая сумма будет примерно 50 МБ.

Примечание : обрезанные файлы .tiff имеют правильные размеры. Если исходный формат 200,000 x 50,000, то обрезанный файл будет, скажем, 8,000 x 3,000. Кроме того, я не могу открыть исходное изображение размером 250 МБ с помощью Preview на моем Ma c, но я могу быстро открыть обрезанное изображение размером 500 МБ, созданное моей программой, когда я сохраняю изображение с помощью TiffWriter (я могу открывать файлы, сохраненные с помощью opencv а также).

Сводка кода:

import tifffile
import cv2
import numpy as np

original_image = tifffile.imread('filepath') #original_image is a numpy array

#...calculations for top, bottom, etc...

cropped_image = original_image[top:bottom, left:right, :]
cv2.imwrite('output_filepath', cropped_image)

Эти 3 строки - все используемые мной операции ввода-вывода.

tl; dr - попытка загрузки изображений, кадрировать и сохранять новые изображения как .tiff, но новые размеры файлов намного больше, чем ожидалось.

1 Ответ

0 голосов
/ 12 июля 2020

Если вы используете Ma c, homebrew отлично, и вы можете установить libtiff и ImageMagick с помощью:

brew install libtiff imagemagick

Тогда вы действительно можно начать понимать, что такое сжатие, количество бит / выборка и размеры / типы данных, используя:

tiffinfo YOURINPUTFILE.TIF
tiffinfo YOUROUTPUTFILE.TIF

и:

magick identify -verbose YOURINPUTFILE.TIF
magick identify -verbose YOUROUTPUTFILE.TIF

Если вы хотите увидеть два рядом -сайд, используйте:

magick identify -verbose YOURINPUTFILE.TIF  > a
magick identify -verbose YOUROUTPUTFILE.TIF > b
opendiff a b
...