使用ENVI读取Earth Engine下载的图像波段名的方法

引言

Google旗下Earth Engine平台的用户越来越多,高效云计算赢得了众多学术科研人员的青睐。熟悉这个平台的读者应该都知道,如果使用代码var ndvi = image.normalizedDifference(['B5', 'B4']).rename('NDVI')得到一个图像,并将其下载到本地,使用常用的遥感软件ENVI是无法读取到rename修改后的波段名的。

简介

基于以上原因,我使用Python3+GDAL写了一段简单的代码,可以通过输入tif图像,输出其对应的hdr头文件,这样就可以使用ENVI读取出它的波段名了。

代码

包括两个函数,getInfo实现读取波段数和波段名,wHDR实现写入相应的hdr头文件。

# -*- coding:utf-8 -*-
import os.path as path
import sys
from osgeo import gdal
from gdalconst import *

#获取波段数和波段名的函数
#参数ifn:输入TIFF文件名
#返回包括波段数和波段名的list
def getInfo(ifn):
    info = []
    ds = gdal.Open(ifn, GA_ReadOnly)
    
    if ds is None:
        print("Unable to open this file.")
        return -1
    else:
        n_band = ds.RasterCount
        info.append(n_band)
        for idx in range(n_band):
            band_idx = ds.GetRasterBand(idx + 1)
            name_idx = band_idx.GetDescription()
            if name_idx == "":
                name_idx = "Band " + str(idx + 1) 
            info.append(name_idx)
    
    return info

#写入ENVI头文件的函数
#参数ofn:写入的头文件名,与ifn对应
#参数info:getInfo获取的数据
#返回1
def wHDR(ofn, info):
    line_1 = "ENVI\n"
    line_2 = "bands = " + str(info[0]) + "\n"
    line_3 = "band names = {"
    for idx in range(info[0]):
        if idx < info[0] - 1:
            line_3 += info[idx + 1] + ", "
        elif idx == info[0] - 1:
            line_3 += info[idx + 1]
    line_3 += "}"
    hdrText = line_1 + line_2 + line_3

    with open(ofn, "w") as f_txt:
        f_txt.write(hdrText)

    return 1

#主函数
if __name__ == "__main__":
    ifn = sys.argv[-1]
    info = getInfo(ifn)
    ofn = path.splitext(ifn)[0]
    ofn += ".hdr"
    if wHDR(ofn, info) == 1:
        print("Done!")

"""
deserts Tsung, CUIT
2019-09-28
"""

使用

  • 如果计算机有Python3+GDAL,可以将代码保存为py文件,通过拖曳tif到py文件完成。
  • 如果计算机没有Python3+GDAL,可以下载打包的exe文件,然后还是通过拖曳tif到exe程序完成。

示例

下图是通过Earth Engine下载的原始tif,ENVI无法读取波段名。
before
下图是通过添加头文件后使用ENVI打开的截图,可以识别波段名(为了测试,我只修改了B2和B5的波段名,其他均为默认的波段名)。after

参考博客

GDAL读写多光谱影像的波段名称

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
下载envi拆分波段插件(ENVI Band Splitter Plugin),你可以按照以下步骤进行操作: 首先,你需要登录到Exelis公司的官方网站(官方网址:https://www.harrisgeospatial.com/)。在网站的顶部导航栏找到“Products”(产品)选项,并点击下拉菜单中的“ENVI”选项。 在ENVI页面上,找到“Downloads”(下载)选项,点击进入下载页面。在下载页面上,你会找到各种不同版本的ENVI软件和插件可供选择。 在插件列表中,找到“ENVI Classic Plugins”(ENVI经典插件)或“ENVI+IDL Plugins”(ENVI+IDL插件)选项,并点击进入。 在插件列表中,浏览所有可用插件,找到“Band Splitter Plugin”(波段拆分插件)选项。点击该插件的下载链接。 下载链接将引导你进入下载页面,确认你的系统和软件版本,并选择下载插件的适当版本。点击“Download”(下载)按钮开始下载。 一旦下载完成,你将会得到一个压缩文件。解压缩该文件,并按照文件内的安装说明进行操作。根据说明,将拆分波段插件安装到你的ENVI软件中。 完成插件安装后,重新启动ENVI软件。你应该能够在ENVI的工具栏或插件菜单中找到“Band Splitter”(波段拆分)选项。 现在,你可以使用envi拆分波段插件来执行波段拆分操作。根据你的需求,在图像中选择相应的波段,并使用插件提供的功能进行波段拆分。 总结而言,要下载envi拆分波段插件,你需要登录Exelis公司的官方网站,在ENVI页面上找到并下载相应的插件。安装插件后,你就可以在ENVI软件中使用拆分波段插件来进行波段拆分操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值