对GEE下载时分块影像进行镶嵌(GDAL)

前言

GDAL自带的镶嵌功能比较单一,只能将图像简单拼接到一起,不能实现直方图匀色以及羽化等功能,但是对GEE导出的分块影像进行镶嵌较为适合。

优点:

  1. 使用代码,镶嵌多个影像较为简便
  2. GDAL较为稳定
  3. 镶嵌时NAN的区域不会改为0或者其他自定义的值,仍为NAN

缺点:

  1. 速度较ENVI慢
  2. 镶嵌进度不明显
  3. 镶嵌过程中占用大量硬盘空间,超过100G数据不建议使用该方法

具体代码

一、GDAL镶嵌命令

gdal_merge [--help] [--help-general]
              [-o <out_filename>] [-of <out_format>] [-co <NAME>=<VALUE>]...
              [-ps <pixelsize_x> <pixelsize_y>] [-tap] [-separate] [-q] [-v] [-pct]
              [-ul_lr <ulx> <uly> <lrx> <lry>] [-init "<value>[ <value>]..."]
              [-n <nodata_value>] [-a_nodata <output_nodata_value>]
              [-ot <datatype>] [-createonly] <input_file> [<input_file>]...

仅列举常用参数,具体参数参阅https://gdal.org/programs/gdal_merge.html

-o <out_filename>
输出文件的名称,如果尚不存在则将创建该文件(默认为“out.tif”)。

-of <format>
选择输出格式。从 GDAL 2.3 开始,如果未指定,则从扩展名猜测格式(之前为 GTiff)。使用短格式名称。

-ot <type>
强制输出图像带具有驱动程序支持的特定数据类型,可能是以下之一: Byte 、 Int8 、 UInt16 、 Int16 、 UInt32 、 Int32 、 UInt64 、 Int64 、 Float32 、 Float64 、 CInt32 、 CFloat32 或 CFloat64 。

-ps <pixelsize_x> <pixelsize_y>
用于输出文件的像素大小。如果未指定,将使用第一个输入文件的分辨率。

-ul_lr <ulx> <uly> <lrx> <lry>
输出文件的范围。如果未指定,将使用所有输入文件的聚合范围。

-v
完成镶嵌操作后生成详细输出。

-n <nodata_value>
忽略与此像素值合并的文件中的像素。

-a_nodata <output_nodata_value>
Assign a specified nodata value to output bands.
将指定的无数据值分配给输出波段。

-init <"value(s)">
使用这些值预初始化输出图像带。但是,它未在输出文件中标记为 nodata 值。如果仅给出一个值,则在所有频段中使用相同的值。(常用于生成单值图像)

<input_file> [<input_file>]
输入图像路径,可以为列表格式

二、代码示例

# 引用函数库
from osgeo import gdal
import os
import glob
inputdir = r'输入文件的文件夹地址'
outputdir = r'输出文件的文件地址,需要加上文件名.tif'
files = glob.glob(os.path.join(inputdir,'*.tif'))
paths = []
for file in files:
	filepath = os.path.join(inputdir,file)
	paths.append(filepath)
paths = ' '.join(paths)
print(paths)
command = f"python gdal_merge.py  -o {outputdir} {paths}"
os.system(command)

三、注意事项

  1. 使用本方法主要因为可以自动化执行,如果遇到单幅图像ENVI打开速度很慢的情况,请先到GEE中验证时间筛选范围以及其他限制条件,同时由于均值镶嵌易产生位数较多的数据,所以中值镶嵌较均值镶嵌占用小,且不易出现ENVI无法打开的情况。
  2. 该代码仅为gdal中的一种镶嵌方法,且由于使用命令行命令进行镶嵌,所以无法进行多线程运算,速度较慢,占用空间较慢,如果条件不足请勿选择本方法。
  3. 可通过command字符串自行修改命令中的相关参数。
posted @ 2024-08-31 15:23  BIGWangqz  阅读(9)  评论(0编辑  收藏  举报