Python遥感影像定标
Python遥感tiff影像定标
作为一个遥感专业的学生,通常处理影像的第一步就是就是对遥感影像进行定标,使像元尽可能真实的反映地表情况,初学者我们通常是使用软件进行定标,随着学习的深入,我们会逐步地接触多种语言,如IDL、Python等。这篇博客的主要内容是使用python进行遥感tiff影像的定标,IDL语言进行定标语言类似。
文章目录
- Python遥感影像定标
- 辐射传输过程
- 一、定标公式
- 二、具体代码
- 1.引入库
- 2.读入数据
- 运行结果
辐射传输过程
遥感器接收到的信号需要经过以下过程:
上图来自百度百科(画工太丑,不想动手),可以看到主要分为几个部分,首先是太阳辐射经过大气,收到大气影响(反射、散射、折射、吸收),透过大气的到达地面,与地表相互作用(吸收转化为热能,反射、散射等),地表反射的能量再经过大气,与大气发生第二次作用(反射、散射、吸收等),少部分能量透过大气被遥感器接收。
由于我们所用到的数据一般都经过了处理,所以只需要按照定标公式对各波段进行定标即可。
一、定标公式
上图来自百度文库,而我们一般是使用一下公式定标
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
运行结果
左边定标,右边未定标
使用定标公式计算
如有错误,请大家指正。