Python遥感开发之批量镶嵌

本文详细介绍了如何使用Python的ArcGIS、Arcpy以及GDAL库进行遥感数据的批量镶嵌,包括ArcGIS内建的镶嵌功能,以及使用Arcpy和GDAL的代码示例,涉及像素类型和镶嵌方法的选择。
摘要由CSDN通过智能技术生成


前言:主要介绍了遥感数据的镶嵌,其中包括使用ArcGis如何完成镶嵌,如何使用Arcpy和GDAL完成镶嵌。


1.ArcGis镶嵌

是ArcGis中的非常重要的一个功能,具体Arcgis中的使用可以参考以下博客。
Arcgis使用教程(五)ARCGIS空间数据处理之影像镶嵌(拼接)与裁剪_arcgis镶嵌工具在哪里-CSDN博客
简单理解就是由多个TIF合成一个TIF,再合成一个TIF的过程中,可以选择最大值法、中值法、均值法、最小值法等。至于为什么要进行合成,多数是因为单幅影像缺失比较大,需要多幅影像合成才可以,如下图所示!
在这里插入图片描述
在这里插入图片描述

2.Arcpy实现镶嵌

2.1 Arcpy实现单个镶嵌

其中32_BIT_FLOAT表示浮点型,16_BIT_UNSIGNED表示整型,MAXIMUM表示最大值合成,MEAN表示均值合成。

# encoding:utf-8
import os
from arcpy.management import MosaicToNewRaster

if __name__ == "__main__":

    file = unicode(r"E:\AAWORK\work\b1\20220816", "utf-8")
    out = unicode(r"E:\AAWORK\work\202208合成\bb16arcpy", "utf-8")
    os.chdir(file)
    names = os.listdir(file)
    list1 = []
    for name in names:
        list1.append(file+"\\"+name)
    print list1
    # mosaic = MosaicToNewRaster(list1, out, "202208_b20.tif", pixel_type="32_BIT_FLOAT",number_of_bands=1, mosaic_method="MAXIMUM")
    # mosaic = MosaicToNewRaster(list1, out, "20220816_b4.tif", pixel_type="16_BIT_UNSIGNED",number_of_bands=1, mosaic_method="MAXIMUM")
    mosaic = MosaicToNewRaster(list1, out, "20220816_mean_b1.tif", pixel_type="16_BIT_UNSIGNED",number_of_bands=1, mosaic_method="MEAN")

2.2 Arcpy实现批量镶嵌

在2.1的基础上增加了一个for遍历实现批量处理

# encoding:utf-8
import os
from arcpy.management import MosaicToNewRaster

if __name__ == "__main__":

    name_time = '202108'
    list_band_name = ["b1","b2","b3","b4","b6","b7","b19"]
    out = r"E:\AAWORK\work\{0}合成\bb31mean".format(name_time)
    out = unicode(out, "utf-8")
    for band_name in list_band_name:
        file = r"E:\AAWORK\work\{0}\{1}".format(band_name,name_time)
        file = unicode(file, "utf-8")
        os.chdir(file)
        names = os.listdir(file)
        list1 = []
        for name in names:
            list1.append(file+"\\"+name)
        file_name = "{0}_mean_{1}.tif".format(name_time,band_name)
        mosaic = MosaicToNewRaster(list1, out, file_name, pixel_type="16_BIT_UNSIGNED",number_of_bands=1, mosaic_method="MEAN")
        # mosaic = MosaicToNewRaster(list1, out, file_name, pixel_type="32_BIT_FLOAT",number_of_bands=1, mosaic_method="MEAN")
        print file_name

3.GDAL实现镶嵌

借助GDAL中的ReprojectImage方法实现镶嵌

import os
from osgeo import gdal
from osgeo import gdalconst

def get_data_list(file_path, out=""):
    list1 = []  # 文件的完整路径
    if os.path.isdir(file_path):
        fileList = os.listdir(file_path)
        if out != "":
            for f in fileList:
                out_data = out + "\\" + f
                out_data = out_data.replace(".HDF", "_ndvi.tif")
                list1.append(out_data)
        else:
            for f in fileList:
                pre_data = file_path + '\\' + f  # 文件的完整路径
                list1.append(pre_data)
        return list1


if __name__ == '__main__':
    inputfile_path = r"E:\AAWORK\work\b19\202208"
    output_tif = r"E:\AAWORK\work\202208合成\bb16\20220801-16_b19.tif"
    input_tiffs = get_data_list(inputfile_path)
    # 打开第一个TIFF文件以获取参考信息
    ref_ds = gdal.Open(input_tiffs[0], gdalconst.GA_ReadOnly)
    driver = gdal.GetDriverByName("GTiff")

    # 创建输出TIFF文件
    output_ds = driver.Create(output_tif, ref_ds.RasterXSize, ref_ds.RasterYSize, 1, gdalconst.GDT_Int32)
    output_ds.SetProjection(ref_ds.GetProjection())
    output_ds.SetGeoTransform(ref_ds.GetGeoTransform())

    # 逐一读取和镶嵌TIFF文件
    for input_tiff in input_tiffs:
        input_ds = gdal.Open(input_tiff, gdalconst.GA_ReadOnly)
        band = input_ds.GetRasterBand(1)
        # 镶嵌到输出文件并采用最大值法
        gdal.ReprojectImage(input_ds, output_ds, None, None, gdalconst.GRA_Max)
        # 释放内存
        input_ds = None
    # 关闭输出文件
    output_ds = None
    print("TIFF文件已镶嵌到 %s,采用最大值法。" % output_tif)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

等待着冬天的风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值