python处理遥感数据(NVDI计算、辐射校正)

前言:作为遥感、GIS从业者,会用python将能提高你的核心竞争力,同时也证明你可以摆脱专业软件的束缚,迈入自主研发的新阶段。ps:其实ENVI、Arcgis等相关软件已经非常完善了,想要突破比较困难,但是这一小步的迈出也决定了你已跨入自主研发的道路。

目录

1.辐射校正

1.1传感器端辐射校正

1.2大气校正

1.3地表辐射校正

2.代码

3.结束


1.辐射校正

辐射校正的目的是尽可能消除传感器自身条件薄雾等大气条件太阳位置和角度条件及某些不可避免的噪声引起的传感器测量值与目标的光谱反射率或者光谱辐亮度等物理量之间的差异。还原图像原来面目,进而保障后续图像处理工作的稳定。

所以辐射校正的内容也是由产生影响的因素决定的即:传感器端辐射校正大气校正地表辐射校正

                         

1.1传感器端辐射校正

(这里拿LANDSAT的TM图像校正方式作为举例,一般遥感软件在读数据时自动读取头文件中的参数信息,进行了这一步操作)

①辐亮度与DN值关系:

                                                     L_{\lambda }=Gain*DN+Bias

L_{\lambda }——图像的辐亮度(单位:W/m*sr);Gain——增益;DN——图像亮度值;Bias——偏置。

②辐亮度和大气上界反射率值关系:

                                                       \rho =\frac{\pi \cdot L_{\lambda }\cdot d^{2}}{ESUN_{\lambda }\cdot cos\theta }

\rho——反射率;d——日地距离;ESUN——太阳光谱辐射量;\theta——为太阳天顶角。

1.2大气校正

这里主要有:统计学方法、辐射传递方程计算法、波段对比法等。

寻找黑区域辐射,作为修正值。

                                                     Lhazel=LI_{min}-LI_{1}%

LI_{min}——每一波段最小光谱辐射值;L_{1}%——反射率为1%的黑体辐射值。

1.3地表辐射校正

                                                      f\left ( x,y \right )=\frac{g\left ( x,y \right )}{cos\theta }

f(x,y)——直射时图像;g(x,y)——高度角i时的图像;\theta——太阳天顶角。

 

综合以上:

地面反射率校正:

                                                 \rho =\frac{\pi \cdot (L_{\lambda }-Lhazel)\cdot d^{2}}{ESUN_{\lambda }\cdot cos^{2}\theta }

2.代码

利用GDAL库,结合公式和一些代码,自己总结了下,计算NDVI的简单代码:

import gdal
from osgeo import gdal_array
import  math
#路径
path=r'C:\Users\Desktop\test\path\\'

Bias=1.18070871
Gains=-7.38070852
# 计算JD
Year = 2019
Month = 8
Day = 23
JD = Day - 32075 + 1461 * (Year + 4800 + (Month - 14) / 12) / 4 + 367 * (Month - 2 - (Month - 14) / 12 * 12) / 12 - 3 * (
            (Year + 4900 + (Month - 14) / 12) / 100) / 4
# 设置ESUNI值
ESUNI = 196.9
# 计算日地距离Dist
Dist = 1 - 0.01674 * math.cos((0.9856 * (JD - 4) * math.pi / 180))
# 计算太阳天顶角
cos = math.cos(math.radians(90 - 39.5))
inter = (math.pi * Dist * Dist) / (ESUNI * cos * cos)
# 大气校正参数设置
Lmini = -6.2
Lmax = 293.7
Qcal = 1
Qmax = 255
LIMIN = Lmini + (Qcal * (Lmax - Lmini) / Qmax)
LI = (0.01 * ESUNI * cos * cos) / (math.pi * Dist * Dist)
Lhazel = LIMIN - LI

b4=path+'T50SPJ_20190823T025551_B02.jp2'
b8=path+'T50SPJ_20190823T025551_B08.jp2'

Red=gdal_array.LoadFile(b4)
NIR=gdal_array.LoadFile(b8)

Red=inter*(Bias+Gains*Red-Lhazel)
NIR=inter*(Bias+Gains*NIR-Lhazel)

gdal_array.numpy.seterr(all="ignore")
ndvi=((NIR-Red)*1.0)/((NIR+Red)*1.0)
ndvi1=gdal_array.numpy.nan_to_num(ndvi)
target=path+'ndvi.tif'
out=gdal_array.SaveArray(ndvi1,target,format = "GTiff",prototype = b4)
out=None


 

3.结束

利用两个波段(近红、红),简单进行辐射校正后的ndvi计算,提取植被。

实际上,遥感图像处理对于细节的处理很多,针对不同传感器,参数和模型方法也不同,需要依据需求和场景灵活使用,本文只是简单依据流程进行的NDVI计算过程,之中的不足、错误还望指正。

  • 9
    点赞
  • 113
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
Python是一种高级编程语言,具有广泛的遥感数据处理功能。在处理遥感数据方面,Python可以通过各种库和工具来实现数据处理、可视化、分析和模型应用等多种功能。 首先,Python具有强大的数据处理能力,可以对遥感数据进行格式转换、裁剪、拼接等预处理操作。通过使用诸如GDAL、Rasterio等库,Python可以读取和写入各种常用的遥感数据格式,如GeoTIFF、ENVI格式等,方便进行数据处理。 其次,Python还提供了许多用于遥感数据可视化的库,如Matplotlib、Seaborn和Folium等。这些库可以绘制图表、散点图、热力图和地图,帮助用户直观地理解和展现遥感数据。 另外,Python遥感数据分析方面也表现出色。用户可以使用科学计算库(如NumPy和SciPy)进行常见的数据分析任务,如统计分析、空间分析、特征提取等。此外,Python还提供了机器学习和深度学习库(如scikit-learn和TensorFlow),方便用户进行目标检测、分类和遥感影像分割等高级分析任务。 最后,Python还支持各种遥感数据处理软件的接口,如ENVI、ArcGIS和QGIS等。这些接口使得用户能够方便地调用这些软件的功能,与他们进行联合分析。 综上所述,Python是一种非常适合处理遥感数据的编程语言。其功能强大且易于使用,提供了丰富的库和工具,能够满足用户在预处理、可视化、分析和模型应用等方面的需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

LionelMessi7

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

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

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

打赏作者

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

抵扣说明:

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

余额充值