唔,最近在做作业的时候,一些实验内容涉及到了用ENVI处理遥感图像,然后自己手动操作软件一遍遍的输入各种参数神马的感觉挺无聊。。。。然后决定自己用python里面的opencv库写个脚本批处理图像反射率的计算试试~

核心步骤就是 遥感影像光谱辐射定标 →大气校正→计算反射率这三步了

①、遥感影像的光谱辐射定标

由遥感器的灵敏度特征引起的辐射畸变主要由其光学系统或光电转换系统的特征形成的,光电转换系统的灵敏性特征通常很重复,其校正一般是通过定期的地面测定值进行的。

遥感器光谱辐射定标时采用以下转换算式:

遥感器各波段偏移与增益值从论文找了找后,找到这么一张表~

那么这么个函数就能定标咯:

def computL(gain,Dn,bias):

return (gain*Dn+bias)

②、遥感影像的大气校正

任何一种依赖大气物理模型的大气校正方法都需要先进行遥感器的辐射校准。

公式是这个咯(Chavez P S,Jr. Image -Based Atmospheric Correction Revisited and Improved Photogrammetric Engineering and Remote Sensing, 1996,62,1025 -1036)

其中:Lhazel——大气层光谱辐射值;LI,min——遥感器每一波段最小光谱辐射值;LI,1%——反射率为1%的黑体辐射值。

关于LI,min和LI,1%的计算公式就省略了啊,感兴趣的同学可以自己去查查论文~

而计算Lhazel需要的参数可以从遥感图像的头文件中获得一部分,还有一部分是固定的参数~这些都藏在ENVI的背后,不过自己写脚本的时候找出他们还是废了一番功夫的。

计算Lhazel的代码如下:

#ESUN

ESUNI71=196.9

cos=math.cos(math.radians(90-41.3509605))

#

Lmini=-6.2

Lmax=293.7

#

Qcal=1

Qmax=255

LIMIN=Lmini+(Qcal*(Lmax-Lmini)/Qmax)

LI=(0.01*ESUNI71*cos*cos)/(math.pi*D*D)

Lhazel=LIMIN-LI

③、计算遥感影像的反射率

根据太阳辐射和大气传输原理与过程,TM/ETM+数据地面反射率反演的数学模型可综合表达为:

其中:ρ——地面相对反射率;D——日地天文单位距离;LsatI——传感器光谱辐射值,即大气顶层的辐射能量;LhazeI——大气层辐射值;ESUNl——大气顶层的太阳平均光谱辐射,即大气顶层太阳辐照度;SZ——太阳天顶角。

这里提一下其中两个参数的计算公式:

日地天文单位距离 D=1 -0.01674 cos(0.9856×(JD-4)×π/180);

(JD为遥感成像的儒略日(Julian Day),计算公式为:

JD=K-32075+1461*(I+4800+(J-14)/12)/4+367*(J-2-(J-14)/12*12)/12-3*((I+4900+(J-14)/12)/100)/4

I、J、K分别为年、月、日

有了这些,最后就能直接算出来反射率啦,粗糙代码如下,因为是写着玩的,也没怎么处理:

不过需要注意的是,遥感图像进行计算跟输出的时候,需要使用uint16类型的数组来存储的(uint8长度不够啊。。)

一些参数涉及到浮点数计算,如果对处理结果有极高要求的话,最好使用专门的科学运算库(像我这种渣学校才不介意这些)

import cv2

import numpy as np

import math

img1=cv2.imread('F:\L71121040_04020030220_B10.TIF')

#图像格式转换

img10=cv2.cvtColor(img1,cv2.COLOR_BGR2GRAY)

#计算JD

I=2003

J=2

K=20

JD=K-32075+1461*(I+4800+ (J-14)/12)/4+367*(J-2-(J-14)/12*12)/12-3*((I+4900+(J-14)/12)/100)/4

#设置ESUNI值

ESUNI71=196.9

#计算日地距离D

D=1-0.01674*math.cos((0.9856*(JD-4)*math.pi/180))

#计算太阳天顶角

cos=math.cos(math.radians(90-41.3509605))

inter=(math.pi*D*D)/(ESUNI71*cos*cos)

#大气校正参数设置

Lmini=-6.2

Lmax=293.7

Qcal=1

Qmax=255

LIMIN=Lmini+(Qcal*(Lmax-Lmini)/Qmax)

LI=(0.01*ESUNI71*cos*cos)/(math.pi*D*D)

Lhazel=LIMIN-LI

def copy(img,new1):

new1= np.zeros(img.shape,dtype='uint16')

new1[:,:] = img[:,:]

def computL(gain,Dn,bias):

return (gain*Dn+bias)

if __name__ == '__main__':

print 'D=',D

print 'cosZS=',cos

print 'Lhazel=',Lhazel

#计算图像反射率

result=np.zeros(img.shape,dtype='uint16')

for i in range(0,img.shape(1)):

for j in range(0,img.shape(0)):

Lsat=computL(1.18070871,img10[i,j],-7.38070852)

result[i,j]=inter*(Lsat-Lhazel)*1000

#保存图像

cv2.imwrite("F:\\result.tif", result)

cv2.namedWindow("Image")

cv2.imshow("Image", result)

cv2.waitKey(0)

python大气校正_Python 处理遥感图像:光谱辐射定标、大气校正和计算反射率相关推荐

  1. tm影像辐射定标_ENVI+遥感图像的辐射定标

    实验:遥感图像的辐射定标 1. 实验目的与任务: ( 1 )了解辐射定标的原理: ( 2 )使用 ENVI 软件自带的定标工具定标 ( 3 )学习使用波段运算进行辐射定标. 2. 实验设备与数据: 设 ...

  2. Python遥感图像处理应用篇(四):python如何使用numpy读取遥感图像光谱值

    1.数据准备 1.1 影像数据选取 这里选取一景OLI8(Landsat8)数据作为测试数据,该数据已经进行过辐射定标和大气校正.该数据显示如下 数据信息:轨道号12340  时间20190817  ...

  3. Python遥感图像处理应用篇(五):python如何使用numpy对遥感图像做卷积运算

    本篇接着上一篇(Python遥感图像处理应用篇(四):python如何使用numpy读取遥感图像光谱值)继续深入,对遥感图像做卷积运算处理 1.基本思路 1.1 设置卷积核 这里就用3*3大小的卷积核 ...

  4. 基于遥感图像光谱通道的地物分类(Matlab)

    @遥感图像光谱通道分类(Matlab) 基于遥感图像光谱通道的地物分类(Matlab) 一.实践数据与目的 1.高光谱影像: 高光谱影像的光谱通道数通常多达数十甚至数百个以上,而且各光谱通道间往往是连 ...

  5. 遥感ENVI5.1辐射定标以及大气矫正

    遥感ENVI5.1辐射定标以及大气矫正 打开文件 辐射定标 输入TM的6个波段的定标系数,定标系数在TXT文件中 输入定标系数如图所示 也可以在对数据[鼠标右键] [Edit Header] [Atr ...

  6. python画矢量场_Python中的图像渐变矢量场

    我试图使用 Python获取 Gradient Vector Field的图像(类似于 this matlab question). 这是原始图片: 这是我的代码: import numpy as n ...

  7. python 拉普拉斯锐化_Python+OpenCV拉普拉斯图像锐化

    **Python实现基于OpenCV的拉普拉斯图像锐化** 研一学习数字图像处理(刚萨雷斯版),导师让我用 Python 编写基于拉普拉斯算子的图像锐化,并且是在不直接调用OpenCV的情况下,由于现 ...

  8. Linux系统下Sen2Cor对Sentinel哨兵2号遥感数据预处理(辐射定标和大气校正)Sen2Cor下载,使用

    Sen2Cor插件的作用是对哨兵2号数据进行大气校正和辐射定标,将L1C数据,处理成为L2A数据.网上用window的教程有很多,这是linux的下载安装使用Sen2Sor的教程,我的系统是ubunt ...

  9. 关于ENVI5.1/5.3 软件在辐射定标+大气校正过程中出现的基础问题

    本文也发表于知乎:https://zhuanlan.zhihu.com/p/142523241 关于辐射定标后影像全黑问题 出现问题的原因是: 电脑运行内存不是很多 出现这个问题的可能大都是4G运存 ...

最新文章

  1. 程序员崩溃的40多个瞬间!!!太形象了,你遇到过几个?
  2. Stuart Russell:智能本质和人工智能安全的巨大挑战
  3. oracle dbms lob,如何使用DBMS_LOB从文件中加载CLOB数据
  4. java core日志在哪里_java-如何在未启用日志记录功能的情况下在...
  5. Java入门超简单程序Song List
  6. CentOS启用sudo方法
  7. react 父子组件传值
  8. JAVA-容器(2)-Collection
  9. 游戏开发unity资源管理系列:查看AssetBundle的工具-AssetStudio
  10. android n sdk,Android SDK (phần 6) pptx
  11. ​VB语言凉凉了!微软宣布放弃不再​更新,GitHub正式收购 npm ,力挺整个JavaScript生态!...
  12. RMON MIB:远程监控管理信息库
  13. 【新塘N76E003】NU-LINK脱机烧写
  14. 怎么把电脑上的python软件卸载干净_如何将电脑上的各种软件彻底卸载干净呢?...
  15. 超全的机器学习深度学习资料汇总,惠存!
  16. Smokeping安装教程
  17. jQuery学习之旅 Item1 选择器【一】
  18. java毕业生设计中小型连锁超市配送中心配送管理计算机源码+系统+mysql+调试部署+lw
  19. 九龙证券|300亿空袭,港股吓懵了!
  20. Nginx的配置与优化

热门文章

  1. zynqpl端时钟_zynq中纯PL编程 - CSDN博客
  2. C++基础与深度解析第七章:深入IO
  3. C++之继承探究(七):虚析构函数
  4. java lambda 画蛇添足_什么时候使用Lambda函数?
  5. HTML中布局flex的标签,CSS3---Flex布局--项目属性
  6. xssfsheet removerow 剩下空白行怎么处理_糟糕!开瓶时酒塞不小心掉进酒里该怎么处理?...
  7. 鸿蒙app迁移,余承东宣布:明年3月P40首发鸿蒙系统!主流App将迁移鸿蒙
  8. php raido mysql,linux – 如何停止并修复已失败且I / O挂起的RAID 5阵列?
  9. Spring Security login
  10. SpringBoot 工程目录 整合mybatis-neo4j(注解类型)-增删改查