处理150GB.jp2映像



我下载了一个150GB的satellite.jp2图像,一次只想要其中的一小部分。如何将图像平铺到可管理的块中?仅仅提取图像的一部分就足够了。

由于我对Python只是有点熟悉,我查看了Pillow和OpenCV库,但由于图像分辨率超过了它们的极限,所以没有成功。我还研究了Python的Openslide,但无法消除错误(找不到模块"libopenslide-0.dll"(。

libvips可以有效地处理巨大的图像。

例如,这个2.8gb的测试图像:

$ vipsheader 9235.jp2
9235.jp2: 107568x79650 uchar, 4 bands, srgb, jp2kload
$ ls -l 9235.jp2
-rw-r--r-- 1 john john 2881486848 Mar  1 22:37 9235.jp2

我看到了:

$ /usr/bin/time -f %M:%e 
vips crop 9235.jp2 x.jpg 10000 10000 1000 1000
190848:0.45

因此,它在0.5秒内从110000 x 80000像素的jp2图像中取出1000 x 1000像素的块,并且需要不到200mb的内存。

python、ruby、node等都有绑定,所以您不必使用CLI。

在python中,你可以写:

import pyvips
image = pyvips.Image.new_from_file("9235.jp2")
tile = image.crop(10000, 10000, 1000, 1000)
tile.write_to_file("x.jpg")

这在一定程度上取决于您正在阅读的jp2图像。有些是直到(!!(,读一节可能很慢。

也有windows二进制文件;下载";页

如果你在linux上,vipsdisp可以很快地查看这样的巨大图像。

Grok JPEG 2000工具包能够解压缩超大图像的区域,例如您链接到的150 GB图像。

示例命令:

grk_decompress -i FOO.jp2 -o FOO.tif -d 10000,10000,15000,15000 -v

以将区域CCD_ 2解压缩为TIFF格式。

最新更新