首页 > 其他分享 >IDL根据Landsat QA波段去云处理【代码】

IDL根据Landsat QA波段去云处理【代码】

时间:2024-08-01 14:28:48浏览次数:12  
标签:02 dimensions L2SP Landsat 像素 QA IDL 20220511

IDL根据Landsat QA波段去云处理【代码】

​ landsat QA波段(质量评估波段)是Landsat卫星影像数据中的一个特殊波段,他在Landsat5-9的每个产品中都存在。虽然我们常用的Landsat影像数据有B1-B7波段,但QA波段并不是其中之一。它可以反映出云、云阴影、雪等类别的像素,常常应用在影像处理中对云像素去除。

​ 最近有在写landsat像素去云处理,查了网上许多QA波段值解释说明,发现都是基于二进制的,但IDL不同于GEE的算法,没有>>这种的按位运算符,只能先转成二进制,再自己写算法处理。算法写好后,为了发博客就去查了官网,又发现官网更新的QA波段值解释说明已经更新到了十进制,于是又写了一下根据十进制的去云处理(真的大哭)。

方法一:根据QA给定的二进制值解释进行处理

​ 上面的图片列出了QA波段的每一位所代表的含义,该含义为二进制存储的信息。

​ QA波段的存储方式为十进制,所以转换为二进制值进行判断,下图为某一像素二进制值说明。该像素为云的可能性很大。

代码思路:

  1. 读取图像,将十进制的数据转换为二进制格式
  2. 云像素识别,并标记,例如(只去除云像素和云阴影像素),为了方便,只使用了bit为3和4的两个为参考,并未加入置信值(confidence)
  3. 创建掩膜,对原图像进行掩膜
PRO LANDSAT_MASK_CLOUD
  COMPILE_OPT IDL2
  e = ENVI()
  
  raster = e.OpenRaster('F:\gbytemp\LC09_L2SP_127031_20220509_20220511_02_T1\LC09_L2SP_127031_20220509_20220511_02_T1_MTL.xml')
  qaPixelRaster = e.OpenRaster('F:\gbytemp\LC09_L2SP_127031_20220509_20220511_02_T1\LC09_L2SP_127031_20220509_20220511_02_T1_QA_PIXEL.TIF')
  data = qaPixelRaster.GetData()
  dimensions = SIZE(data, /DIMENSIONS)
  dataBit = data.toBits()
;  QA Bit    Description                values
;     0      Fill
;     1      Dilated Cloud              1
;     2      Cirrus                     1
;     3      Cloud                      1
;     4      Cloud Shadow               1
;     5      Snow                       1
;     8-9    Cloud Confidence           01Low 10Reserved 11 High
;     10-11  Cloud Shadow Confidence    01Low 10Reserved 11 High
;     12-14  Snow/Ice Confidence        01Low 10Reserved 11 High
;     14-15  Cirrus Confidence          01Low 10Reserved 11 High

  stop
  mask = MAKE_ARRAY(dimensions, VALUE=1, /INTEGER)
  FOR N = 0, dimensions[0]-1 DO BEGIN
    FOR M = 0, dimensions[1]-1 DO BEGIN
;      本文只用到bit 3(云)、bit 5(云阴影)进行去云操作
;      其中3和4表示二进制的位置,从右往左数(0开始)所以3和4的索引位置为-4和-5
      IF dataBit[-4, N, M] EQ 1 OR dataBit[-5, N, M] EQ 1 THEN BEGIN
        mask[N, M] = 0
      ENDIF
    ENDFOR
  ENDFOR
  

  file = e.GetTemporaryFilename()
  maskRaster = ENVIRaster(mask, URI=file)
  maskRaster.Save
  maskedRaster = ENVIMaskRaster(raster[0], maskRaster)

  e.Data.Add, maskedRaster
  view=e.GetView()
  layer=view.CreateLayer(maskedRaster)
  stop
END

去云结果对比图:

方法二:根据QA给定的十进制值解释进行处理

​ 十进制值解释含义如下:

代码思路:

  1. 读取图像
  2. 云像素识别,并标记,例如(只去除云像素和云阴影像素),为了方便,只使用了高置信值云22280、和高置信值云阴影23888为参考,
  3. 创建掩膜,对原图像进行掩膜
PRO LANDSAT_MASK_CLOUD
  COMPILE_OPT IDL2
  e = ENVI()
  
  raster = e.OpenRaster('F:\gbytemp\LC09_L2SP_127031_20220509_20220511_02_T1\LC09_L2SP_127031_20220509_20220511_02_T1_MTL.xml')
  qaPixelRaster = e.OpenRaster('F:\gbytemp\LC09_L2SP_127031_20220509_20220511_02_T1\LC09_L2SP_127031_20220509_20220511_02_T1_QA_PIXEL.TIF')
  data = qaPixelRaster.GetData()
  dimensions = SIZE(data, /DIMENSIONS)

  stop
  mask = MAKE_ARRAY(dimensions, VALUE=1, /INTEGER)
  FOR N = 0, dimensions[0]-1 DO BEGIN
    FOR M = 0, dimensions[1]-1 DO BEGIN
      IF data[N, M] EQ 55052 OR data[N, M] EQ 23888 THEN BEGIN
        mask[N, M] = 0
      ENDIF
    ENDFOR
  ENDFOR

  file = e.GetTemporaryFilename()
  maskRaster = ENVIRaster(mask, URI=file)
  maskRaster.Save
  maskedRaster = ENVIMaskRaster(raster[0], maskRaster)

  e.Data.Add, maskedRaster
  view=e.GetView()
  layer=view.CreateLayer(maskedRaster)
  stop
END

去云结果对比图:

标签:02,dimensions,L2SP,Landsat,像素,QA,IDL,20220511
From: https://www.cnblogs.com/gaogao-web/p/18336580

相关文章

  • 2. mqant——进阶篇
    6.RPC高级用法6.1动态监听handler有些场景下,我们无法在编译阶段提前实现或注册好所有的handler,但在执行时可以通过一些动态规则动态分配handler。mqant也支持这样的功能场景6.1.1 handler监听器typeRPCListenerinterface{/**NoFoundFunction当未找到请......
  • Python 检测 USB 设备 - IDLE 和 CMD 解释器之间的不同结果
    我正在尝试解决VDI解决方案中智能卡设备的USB重定向问题。我正在使用pyscard模块作为智能卡。对于进一步的上下文,主要问题是当浏览器插件调用用于处理智能卡的python脚本时,未检测到读卡器。关于问题,当我从CMD解释器运行此代码片段时,我收到空列表,表示系统上未找......
  • 基于CNN卷积神经网络的MQAM调制识别matlab仿真
    1.算法运行效果图预览(完整程序运行后无水印)  2.算法运行软件版本matlab2022a 3.部分核心程序(完整版代码包含中文注释,训练库) digitDatasetPath=['Image_train\'];imds=imageDatastore(digitDatasetPath,'IncludeSubfolders',true,'LabelSource','fold......
  • qaq(曾经の NOIP 模考)
    TomoyukiMIzuyama要出\(n\)道题,他现在有\(m\)个不同的乱码,他非常的阴间,所以他决定先决定先用这群乱码起好第一个题目的名字,之后每个题目都直接从上一个题目名字中找一个子序列当做自己的名字。现在他想知道,在第\(i\)道题目名字长度为\(a_i\)的情况下(\(a_1\gea_2\ge\cd......
  • 谷歌为什么要用AIDL替代HIDL(HAL)?
    背景:官方:https://source.android.com/devices/architecture/aidl/aidl-hals.Google在Android11引入了AIDLforHALs,旨在代替HIDL原先的作用。在之后的Android版本推荐使用AIDL实现Hal层的访问。这样做的原因,应该有以下几点:AIDL比HIDL存在的时间更长(仅从Android8到Androi......
  • 【转】软件测试的4个职业阶段,你在哪个阶段?(另回答:QA与测试的区别在哪?)
    最近一直在忙的项目刚刚上线交付完成,让自己有了些许喘息的时间。人总是这样,在忙碌的时候,能心无旁骛关注并做好一件事,已是万幸。而全力而为之后的闲暇总是如此的珍贵,在这难得的空隙中,不自觉的开始对自己的职业规划进行了重新审视。回首过去,我意识到,很多像我一样从事软件测......
  • AndroidQ 打通应用层到HAL层---(HIDL服务实现)
    什么是HIDLHIDL全称为HALinterfacedefinitionlanguage(发音为“hide-l”)是用于指定HAL和其用户之间的接口的一种接口描述语言(IDL),AndroidO开始引入了HIDL这个概念,HIDL和应用层AIDL差不多,AIDL常用于连接App和Framework,HIDL则是用来连接Framework和HAL,AIDL使用Binder通信,HI......
  • javaJDK以及IDLE软件的安装
    记录数据开发实习生的学习之路目录记录数据开发实习生的学习之路前言一、java的安装说明二、intelijIDLE的安装总结前言本文用于从零开始,零基础学习java和sql以适应工作要求,博主会将每日学习的进度同步到文章中,希望能给大家一些帮助一、java的安装说明:本......
  • IDLE-python windows官方安装包下载国内镜像下载地址汇总
    此为IDLE-windows安装包,exe格式只能在windowsx64系统下面使用序号版本名称下载地址1IDLE-python-3.12.4-amd64.exe点我下载2IDLE-python-3.11.9-amd64.exe点我下载3IDLE-python-3.10.11-amd64.exe点我下载4IDLE-python-3.9.13-amd64.exe点我下载5IDLE-python-3.8.10-amd6......
  • 解决Landsat 5 TM L2影像在ENVI中打不开的情况
    打开Landsat5TML2影像的MTL文件在ENVI中报错如下:解决方法:打开MTL文件更改两个地方:1.将第一行改为:GROUP=L1_METADATA_FILE;2.L2级的影像已经过校正处理,正确的应该是如下图所示*****_SR_B*.TIF,但是在MTL里面往下拉还有一处地方的各波段名称没有更改过来,将下图红色框内......