使用OpenCV保存TIFF时大于预期的文件大小



我正在创建一个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上,自制程序非常棒,你可以安装libtiffImageMagick,带有:

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

最新更新