打开非常大的 TIF 图像序列

问题描述 投票:0回答:1

我有一组(>10,000)大型未压缩图像(1200,1600)存储为 TIFF 堆栈。

我无法将它们直接加载到内存中,因为文件的总大小超过了可用内存。是否有一种机制,在 python(首选)或 C++(可通过)中,堆栈可以逐帧(或块)打开,以消除将整个堆栈加载到内存中的需要。

我已经在 python 中尝试了

tifffile
PIL
包,它们只在第一帧读取,大概是因为两者都有保护措施来防止加载大于可用内存的图像。

例如

from PIL import Image

V = Image.open(filepath)

print(V.size)

以上返回

(1200,1600)
这不是3D,因为它应该是

from tifffile import TiffFile

V = TiffFile(filepath)

print(len(V.pages))

回报

1
应该> 10,000

如果不加载整个堆栈可能无法解析所有帧,但我正在寻找潜在的选择

python c++ image tiff large-files
1个回答
1
投票

你说你试过

tifffile
包。 文档 显示您可以阅读单个页面、页面子集,甚至遍历页面:

从 TIFF 文件的第一页读取图像作为 NumPy 数组:

>>> image = imread('temp.tif', key=0)
>>> image.shape
(301, 219)

从选定的页面范围内读取图像:

>>> images = imread('temp.tif', key=range(4, 40, 2))
>>> images.shape
(18, 301, 219)

遍历 TIFF 文件中的所有页面并依次读取图像:

>>> with TiffFile('temp.tif') as tif:
...     for page in tif.pages:
...         image = page.asarray()

我相信 Pillow (née PIL) 也有类似的可能性。

我会推荐 Bio-Formats (python-bioformats) 用于处理专门的文件类型,而 imageio 用于普通文件类型。您的 TIFF 文件似乎介于两者之间,两者都可以帮助您。

© www.soinside.com 2019 - 2024. All rights reserved.