我正在创建一个python程序来加载.tiff图像,从图像中裁剪出一个选择,并将该选择保存为tiff。数据集图像很大,超过1GB。我可以成功地裁剪出我需要的东西并保存为tiff,但新的图像文件大小比我预期和需要的要大得多。
打开
我正在使用tifffile以numpy数组的形式打开图像。由于文件大小的原因,OpenCV和PIL无法打开这些文件。我也尝试过使用OpenSlide,但在使用read_region()
时遇到了其他问题。
裁剪
numpy数组的形状为(height, width, 3)
,所以我使用类似large_image[top:bottom, left:right, :]
的东西进行裁剪。这符合预期。
保存
到目前为止,使用cv2.imwrite()
产生了最小的文件大小,但它们仍然比应该的大得多。tifffile
中的PIL.Image.save()
和TiffWriter
创建了更大的图像。
最佳结果:从一个250MB的文件中裁剪13个新图像,只使用了原始图像的20%,使我的文件总数超过900MB。我预计总容量大约为50MB。
注意:裁剪的.tif文件具有正确的尺寸。如果原始文件是200,000 x 50,000
,那么裁剪后的文件将是8,000 x 3,000
。此外,我无法在Mac上使用Preview打开250MB的原始图像,但当我用TiffWriter
保存图像时,我可以快速打开程序创建的500MB裁剪图像(我也可以打开用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条线路都是我使用的IO。
tl;dr-尝试加载图像、裁剪并将新图像保存为.tiff,但新文件的大小比预期的要大得多。
如果你在Mac上,自制程序非常棒,你可以安装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