Py6s批量大气校正Landsat8

36 篇文章 44 订阅

前言

使用py6s进行Landsat8等遥感影像的大气校正。代码来自基于6s模型的遥感影像大气校正方法,对应的代码下载地址Github
由于原始代码是在cmd中通过命令行传参运行的,包括两个输入参数,分别是 Input_dir=输入路径 Output_dir=输出路径。这样每次只能处理一个时相的数据。本文目的在于提供一个Windows环境下通过不修改源码的形式来实现批量大气校正多时相影像的思路。

处理单时相

将Github上整个代码工程下载到本地。
打开Anaconda Prompt,输入python "E:\AtmosphericCorrection-master\AtmosphericCorrection_Landsat8.py" --Input_dir=E:\LC08_L1TP_029030_20190102_20190130_01_T1 --Output_dir=E:\a
里面涉及三个路径,分别是大气校正主程序的路径,Landsat8数据解压后的路径,校正后输出路径,自行替换。
在这里插入图片描述

处理多时相

思路是通过windows的bat脚本实现进入Anconda Prompt,然后输入多个命令。即多个影像输入输出路径,从而实现批量处理。
首先创建一个txt文件,然后输入以下。

CALL D:\Anaconda\Scripts\activate.bat D:\Anaconda
python "E:\AtmosphericCorrection-master\AtmosphericCorrection_Landsat8.py" --Input_dir=E:\LC08_L1TP_029030_20190102_20190130_01_T1 --Output_dir=E:\a
python "E:\AtmosphericCorrection-master\AtmosphericCorrection_Landsat8.py" --Input_dir=E:\LC08_L1TP_023036_20191124_20191203_01_T1 --Output_dir=E:\b

CALL后的两个路径需要替换成自己本地的路径。第一个路径是Anaconda自带的prompt激活脚本,在Anaconda本地安装的Scripts文件夹下。第二个就是Anaconda本地安装的文件夹路径。下面的第二三行就相当于在Anaconda Prompt中调用py脚本了。在这里插入图片描述
修改完毕后,将txt文件的后缀修改为.bat。然后打开cmd,将bat文件拖入回车运行即可实现批量大气校正。
在这里插入图片描述

备注

由于全色波段8不支持大气校正,所以会报错。一般有大气校正需求的波段多为4、3、2。所以建议校正前将Landsat8影像文件夹中其他波段删除,提高效率。
这里补充一个批量解压Landsat8数据的代码,解压后为原始文件同名文件夹,运行时放在Landsat8的数据的上层目录中运行即可。

import tarfile
import os
import glob
import shutil

# 创建文件夹
def mkdir(path):   
    path=path.strip() # 去除首位空格
    
    path=path.rstrip("\\") # 去除尾部 \ 符号
    
    # 判断路径是否存在
    # 存在     True
    # 不存在   False
    isExists=os.path.isdir(path)
 
    # 判断结果
    if not isExists:
        # 如果不存在则创建目录
        # 创建目录操作函数
        os.makedirs(path) 
 
        print(path + ' 创建成功')
        return path
    else:       
        print(path + ' 目录已存在') # 如果目录存在则不创建,并提示目录已存在      
        if os.listdir(path):
            print('文件夹已存在且有文件')
        else:
            os.rmdir(path)
            os.makedirs(path)
            print('已删除同名空文件夹并创建')
        return path 

pypath = os.path.split(os.path.realpath(__file__))[0]
file_floder_list = os.listdir(pypath) # 路径下文件夹和文件名列表
floder_list = [pypath+os.sep+file for file in file_floder_list if os.path.isdir(pypath+os.sep+file)] # 文件夹列表

angFile_list = []
for floder in floder_list:
    tarFile_list = glob.glob(floder+os.sep+'*.gz') # 获取站点文件夹下的压缩文件
    for file in tarFile_list:
        jieya_floder = mkdir(file[0:-7]) # 创建同名文件夹
        tar_file = tarfile.open(file)
        tar_file.extractall(path=jieya_floder) # 解压至新建同名文件夹
        tar_file.close() # 关闭文件,必须有,释放内存
        # 下面的代码是删除Landsat8数据中的_ANG.txt文件, 是我个人的需求,已经注释掉
        # ang_file = glob.glob(jieya_floder+os.sep+'*_ANG.txt')
        # angFile_list.append(ang_file)
        
# for file in angFile_list:
    # os.remove(file[0]) 

在这里插入图片描述在这里插入图片描述
后续有需要的时候会补充批量删除无需校正波段生成bat脚本的脚本。

  • 0
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值