对我来说,最简单的方法是使用GDAL虚拟格式。这种格式使我可以将整个图像集视为一个图像对象,并通过三个相对简单的步骤对其进行转换。
创建虚拟数据集
GDAL(包括塔马斯·塞凯赖什GISInternals Windows二进制和的最新版本OSGeo4W)包括一个实用程序称为gdalbuildvrt其可以用于建立一个初始虚拟数据集。
一种简单的使用方法是将所有图像添加到文本文件,然后将该文本文件用作gdalbuildvrt的输入。这是一个示例(您需要将第二个命令放回一行):
dir /b *.tif > my_images.txt
gdalbuildvrt
-hidenodata
-vrtnodata "255 255 255"
-resolution highest
-input_file_list my_images.txt
my_image.vrt
这将为您留下一个XML文件,您可以将其视为所有GDAL操作的单个图像。它还在内部将nodata表示为白色,但从读取它的工具中隐藏了nodata定义。
创建重新采样的概览
接下来,您将执行概述图像的重新采样和输出。您可以使用gdal_translate或gdalwarp进行此操作。对于这两种情况,请记住,结果大小将为width * height * 3
(8位带的数量)字节。如果大于4GB,则需要查看GeoTIFF选项的语法,以将BigTIFF指定为输出(-co“ BIGTIFF = YES”)。
对于gdal_translate,您将需要使用方便的gdalinfo命令确定虚拟映像的尺寸。取这些尺寸,然后将每个尺寸除以某个一致的因子,以确定文件的输出宽度和高度(以像素为单位)。
该命令看起来像(一行):
gdal_translate
-outsize 53120 14000
-co "TILED=YES"
-co "PROFILE=GEOTIFF"
-co "BLOCKXSIZE=256"
-co "BLOCKYSIZE=256"
my_image.vrt
my_image.tif
对于gdalwarp,您需要知道最终的像素大小。在这种情况下,我使用的是.5米。您还需要调用重采样方法。对于正射影像概述,我更喜欢三次样条。它比较柔和,但是您不会将它们用于完整分辨率,并且根据我的经验,如果您使用的是JPEG或ECW之类的图像,它可以创建更可压缩的图像。
gdalwarp
-r cubicspline
-of GTiff
-dstnodata "255 255 255"
-tr 0.5 0.5
-co "PROFILE=GEOTIFF"
-co "BIGTIFF=YES"
-co "TILED=YES"
-co "BLOCKXSIZE=256"
-co "BLOCKYSIZE=256"
my_image.vrt
my_image.tif
对于这些重新采样的GeoTIFF概述,您可能还需要考虑使用JPEG压缩选项。它大大缩小了输出文件,(仅根据Frank的说法)仅对性能造成了很小的影响。
-co "COMPRESS=JPEG"
-co "JPEG_QUALITY=80"
-co "PHOTOMETRIC=YCBCR"
概观
您还需要对生成的图像运行handy gdaladdo命令以构建内部“金字塔”,以便可以通过数据子集满足对分辨率低于全图尺寸的要求。在大多数情况下,性能的提高超过了磁盘空间的价值。您将需要在这里使用的关卡进行测试。对于非常大的图像,您可以删除一些图像。gdaladdo命令看起来像这样:
gdaladdo
-r average
my_image.tif
2 4 8 16 32 64 128 256
我建议尝试使用这些级别以获得最佳性能。您可能会发现,不同的重采样间隔更适合您的应用,或者,根据图像大小,您可以删除一些较高的数字(或者需要更多)
另外,如果要生成外部概述(使用-ro选项),请考虑添加JPEG压缩配置行:
--config COMPRESS_OVERVIEW JPEG
--config PHOTOMETRIC_OVERVIEW YCBCR
--config INTERLEAVE_OVERVIEW BAND
(我认为这些是继承自上级GeoTIFF的嵌入式概述)
笔记
遇到此问题时,我在freenode.irc.net的#gdal频道上询问。这是一个了不起的资源,我对Howard Butler,Frank Warmerdam和Even Rouault的帮助深表感谢。