Python遥感影像定标

本文介绍了使用Python进行遥感TIFF影像定标的步骤,包括辐射传输过程、定标公式及具体实现代码。通过引入GDAL库读取数据,结合预设的定标参数,对每个波段进行定标处理,并将结果保存为GeoTIFF格式。文中还展示了定标前后的对比图像,帮助理解定标效果。
摘要由CSDN通过智能技术生成

Python遥感影像定标

Python遥感tiff影像定标

作为一个遥感专业的学生,通常处理影像的第一步就是就是对遥感影像进行定标,使像元尽可能真实的反映地表情况,初学者我们通常是使用软件进行定标,随着学习的深入,我们会逐步地接触多种语言,如IDL、Python等。这篇博客的主要内容是使用python进行遥感tiff影像的定标,IDL语言进行定标语言类似。


辐射传输过程

遥感器接收到的信号需要经过以下过程:

在这里插入图片描述
上图来自百度百科(画工太丑,不想动手),可以看到主要分为几个部分,首先是太阳辐射经过大气,收到大气影响(反射、散射、折射、吸收),透过大气的到达地面,与地表相互作用(吸收转化为热能,反射、散射等),地表反射的能量再经过大气,与大气发生第二次作用(反射、散射、吸收等),少部分能量透过大气被遥感器接收。

由于我们所用到的数据一般都经过了处理,所以只需要按照定标公式对各波段进行定标即可。


一、定标公式

在这里插入图片描述
上图来自百度文库,而我们一般是使用一下公式定标
Radiance = gain*scale + offset
gain即为我们的像元值,scale和offset都可以在文件所带的MTL文件中获得
在这里插入图片描述
在这里插入图片描述

二、具体代码

1.引入库

import os
import numpy as np
from osgeo import gdal
import glob
import matplotlib.pyplot as plt

2.读入数据

input_path='E:/study/2018.4.09/2018.4.9/LC81300372018099LGN00/'
file_all=os.listdir(input_path)
out_path = 'E:/study/2018.4.09/2018.4.9/LC81300372018099LGN00/out_data/'
file_tail='.TIF'
radiance_scale=[1.2519E-02,3.3420E-04,3.3420E-04,1.2819E-02,1.1813E-02,9.9612E-03,6.0957E-03,1.5160E-03,5.1096E-04,1.1273E-02,2.3824E-03]
radiance_add=[-62.59278,0.10000,0.10000,-64.09577,-59.06370,-49.80584,-30.47869,-7.57977,-2.55479,-56.36651,-11.91176]#此处由于读取顺序为1,10,11,2,3,4...9,所以上面也按顺序调整
#
if not os.path.exists(out_path):
    os.mkdir(out_path)
i=0

for file_i in file_all:
    if file_i.endswith(file_tail):
        file_name=input_path + file_i
        (prename,suffix)=os.path.splitext(file_i)
        data=gdal.Open(file_name)
        band=data.ReadAsArray()*radiance_scale[i] + radiance_add[i]
        band=band.astype(np.float32)
        #将数据保存为GeoTiff格式
        gtiff_driver=gdal.GetDriverByName('GTiff')
        out_file=gtiff_driver.Create(
            out_path + prename + '_cal.tif',
            band.shape[1],band.shape[0],1,6
        )
        out_file.SetProjection(out_file.GetProjection())
        out_file.SetGeoTransform(out_file.GetGeoTransform())
        out_band=out_file.GetRasterBand(1)
        out_band.WriteArray(band)
        out_band.FlushCache()

        plt.imshow(band)
        plt.axis('off')
        plt.show()
        
        if i==10:
            break
        
        print(i+1)
        i=i+1

运行结果

在这里插入图片描述
在这里插入图片描述
左边定标,右边未定标
在这里插入图片描述
使用定标公式计算
在这里插入图片描述
在这里插入图片描述
如有错误,请大家指正。

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值