使用tifffile拆分BigTiff



我在分割BigTiff时遇到了麻烦。我最初使用这个问题的@Ivan代码。我不得不稍微修改一下,因为我使用的是大于4GB的。tif文件。枕头不支持bigtiff。我最后用的是tifffile。代码正在运行,但是图像没有被剪辑到box参数。我认为它必须这样做,tifffile读取图像作为numpy array,实际上并没有被任何东西剪切??

我还注意到,当这段代码运行时,我的内存即将耗尽。我尝试将数据类型分配给未分配的8位,这非常有帮助。我也要把它压缩一下吗?我不想过多地更改数据,因为我将对它们进行分类,并且不想丢失/更改数据。

import os
from itertools import product
import tifffile
def tile(filename, dir_in, dir_out, d):
name, ext = os.path.splitext(filename)
img = tifffile.imread(os.path.join(dir_in, filename))
print(type(img))
w = img.shape[0]
h = img.shape[1]

grid = list(product(range(0, h - h % d, d), range(0, w - w % d, d)))
for i, j in grid:
box = (j, i, j + d, i + d)
out = os.path.join(dir_out, f'{name}_{i}_{j}{ext}')
img = img.clip(box)
img = img.astype('uint8')
tifffile.imsave(out, img)

tile('Orthomosaic_export_MonFeb01193821460106.tif',
r'D:ortho',
r'D:model_images',
1000)

最终将这个答案合并到我的代码中,并最终使其运行。

import os
import tifffile
def tile(filename, dir_in, dir_out):
name, ext = os.path.splitext(filename)
img = tifffile.imread(os.path.join(dir_in, filename))
windowsize_r = 10000
windowsize_c = 10000
i = 0
for r in range(0, img.shape[0] - windowsize_r, windowsize_r):
for c in range(0, img.shape[1] - windowsize_c, windowsize_c):
window = img[r:r + windowsize_r, c:c + windowsize_c]
out = os.path.join(dir_out, f'{name}_{i}_{ext}')
tifffile.imsave(out, window)
i = i + 1
tile('Shopfield_Orthomosaic_export_MonFeb01193821460106.tif',
r'D:ortho',
r'D:model_images')

最新更新