ENVI_IDL:批量获取影像文件各个波段的中值并输出为csv文件

01 实验数据

诸多.float后缀的影像文件(但以ENVI默认格式存储)

02 实验思路

迭代循环所有影像文件所在的文件夹, 获取每一个float后缀的影像文件,并对每一个影像文件进行循环,获取循环文件的每一个波段影像的中值,最后将其输出为csv文件(每一列表示一个影像文件各个波段的中值数)

03 部分函数说明

Result = SIZE( Expression [, / L64 ] [, / DIMENSIONS | , / FILE_LUN | , / FILE_OFFSET | , / N_DIMENSIONS | , / N_ELEMENTS | , / SNAME , | , / STRUCTURE | , / TNAME | , / TYPE ] )
解释:expresion表示传入的数组,size函数依次返回该数组的维度、列数、行数、数组元素的数据类型(返回类型代码)、数组元素的总个数;(以一维数组形式返回)

(除了L64之外,上述所有关键字参数用于确定SIZE函数的返回值,并且它们是互斥的——最多只能指定上述关键字之一)

部分参数说明:

DIMENSIONS
将此关键字设置为返回Expression的维度。如果Expression是标量,则结果是包含0的标量。对于数组、列表和哈希表,结果是包含数组或列表维度的数组。如果Expression中的元素数量需要,结果为32位整数,如果需要,为64位整数。设置L64以强制在所有情况下返回64位整数。如果Expression未定义,则IDL报告八个维度。(例如是3列4行的数组,那么返回3 4)

L64
默认情况下,SIZE的结果在可能的情况下为32位整数,如果Expression中的元素数量需要,则为64位整数。设置L64以强制在所有情况下返回64位整数。除了影响默认结果外,L64还影响DIMENSIONS、FILE_OFFSET、N_ELEMENTS和STRUCTURE关键字的输出。

N_DIMENSIONS
将此关键字设置为返回Expression中的维数(如果它是数组或列表)。如果Expression是标量或未定义的,则返回0。

N_ELEMENTS
将此关键字设置为返回Expression中的数据元素数量。设置此关键字相当于使用N_ELEMENTS函数。如果Expression中的元素数量需要,则结果将为32位整数,如果需要,则为64位整数。设置L64以强制在所有情况下返回64位整数。如果Expression未定义,则返回0。

其中,数据类型代码的指代如下:

Result = MEDIAN(Array [, Width] [, /DOUBLE] [, DIMENSION=value] [, /EVEN])

其中,参数的含义为:

- Array:要计算中位数的数组。
- Width:指定中位数计算的窗口大小。默认情况下,中位数计算的窗口大小为1,即只考虑每个元素本身的值。如果指定了Width参数,则中位数计算的窗口大小为2*Width+1。例如,如果Width=2,则计算的窗口大小为5,包括当前元素及其相邻的4个元素。如果Width=0,则计算的窗口大小为1,即只考虑当前元素本身的值。
- /DOUBLE:指定计算中间结果时使用双精度浮点数。默认情况下,MEDIAN函数使用单精度浮点数计算中间结果。
- DIMENSION=value:指定在哪个维度上计算中位数。默认情况下,MEDIAN函数在整个数组上计算中位数。如果指定了DIMENSION参数,则在指定的维度上计算中位数。例如,如果DIMENSION=1,则在数组的第一维(行)上计算中位数。
- /EVEN:指定在计算中位数时,如果窗口大小为偶数,则取中间两个数的平均值作为中位数。默认情况下,如果窗口大小为偶数,则取第二个中间数作为中位数。

04 代码部分

pro batch_extract_median
  ; 二次开发接口
  compile_opt IDL2
  e = envi(/headless) ; Launch the application
  
  
  ; 所有需要提取的文件的所在目录
  in_path = "C:\Users\HeZehuang\Desktop\66"
  
  ; 获取in_path目录下所有满足后缀为.float的文件
  files_path = file_search(in_path, "*.float", count=files_amount)
  
  ; 创建存储所有影像中值的csv文件
  csvfile_path = "C:\Users\HeZehuang\Desktop\median.csv"
  ; 存储所有影像中值的矩阵
  box_median = fltarr(files_amount, 128)
  
  
  ; 进入循环对每一个文件做批量处理
  for file_i = 0, files_amount - 1 do begin
    ; 获取当前循环下的文件路径
    file_path = files_path[file_i];
    file_name = FILE_BASENAME(file_path, ".float")
    
    ; 获取该文件数据
    dat = e.OpenRaster(file_path)
    dat_data = dat.GetData()
    
    ; 获取该文件的行列数以及波段数,这里需要注意,这里size函数的输出结果与前文的讲解不一致,可能
    ; 与该文件是ENVI默认格式有关,一般读取tiff等格式时就是正常的,所以大家最好打开ENVI看一下行列
    ; 以及波段数在数组的哪个索引上
    dat_size = size(dat_data)
    dat_col = dat_size[1]
    dat_row = dat_size[3]
    dat_channel = dat_size[2]
    
    ; 对当前循环的文件再次循环,找到每一个波段的中值
    for channel_i = 0, dat_channel - 1 do begin
      ; 获取当前波段影像的中值
      data = dat_data[channel_i, *, *]
      channel_median = median(data[where(data ne 0.0)], /EVEN)
      
      ; 存储当前循环文件下的第channel_i波段的中值
      box_median[file_i, channel_i] = channel_median
    endfor
    print, file_name, "提取中值完毕"
  endfor
  
  ; 将保存在矩阵中的中值全部存储为csv格式
  write_csv, csvfile_path, box_median
end

如果有问题,欢迎一起探讨.

<p>炒茄子</p>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/1301.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

设计模式之单例模式~

设计模式包含很多&#xff0c;但与面试相关的设计模式是单例模式&#xff0c;单例模式的写法有好几种&#xff0c;我们主要学习这三种—饿汉式单例&#xff0c;懒汉式单例、登记式单例,这篇文章我们主要学习饿汉式单例 单例模式&#xff1a; 满足要点&#xff1a; 私有构造 …

改进YOLO系列 | CVPR2023最新 PConv | 提供 YOLOv5 / YOLOv7 / YOLOv7-tiny 模型 YAML 文件

DWConv是Conv的一种流行变体,已被广泛用作许多神经网络的关键构建块。对于输入 I ∈ R c h w I \in R^{c \times h \times w} I∈

用chatgpt写insar地质灾害的论文,重复率只有1.8%,chatgpt4.0写论文不是梦

突发奇想&#xff0c;想用chatgpt写一篇论文&#xff0c;并看看查重率&#xff0c;结果很惊艳&#xff0c;说明是确实可行的&#xff0c;请看下图。 下面是完整的文字内容。 InSAR (Interferometric Synthetic Aperture Radar) 地质灾害监测技术是一种基于合成孔径雷达…

GPT-4,终于来了!

就在昨天凌晨&#xff0c;OpenAI发布了多模态预训练大模型GPT-4。 这不昨天一觉醒来&#xff0c;GPT-4都快刷屏了&#xff0c;不管是在朋友圈还是网络上都看到了很多信息和文章。 GPT是Generative Pre-trained Transformer的缩写&#xff0c;也即生成型预训练变换模型的意思。…

jupyter的安装和使用

目录 ❤ Jupyter Notebook是什么&#xff1f; notebook jupyter 简介 notebook jupyter 组成 网页应用 文档 主要特点 ❤ jupyter notebook的安装 notebook jupyter 安装有两种途径 1.通过Anaconda进行安装 2.通过pip进行安装 启动jupyter notebook ❤ jupyter …

5G(NR)信道带宽和发射带宽---频率资源

前言 查看此文之前建议先看看这篇 5G(NR)频率资源划分_nr运营商频段划分_达帮主的博客-CSDN博客NR频率有上面几个划分 &#xff0c;可以使用低于1GHz的频端&#xff0c;既可以使用高于30GHz高频端。使用频端高于30GHz那我们称之为高频或者毫米波。使用毫米波是5G网络区别于4G…

蓝桥冲刺31天之317

在这个时代&#xff0c;我们总是在比较&#xff0c;觉得自己不够好 其实不必羡慕别人的闪光点 每个人都是属于自己的限量版 做你喜欢并且擅长的事&#xff0c;做到极致 自然会找到自己独一无二的价值 鸟不跟鱼比游泳&#xff0c;鱼不跟鸟比飞翔 你我各有所长 A&#xff1a;组队…

【数学基础】你还不理解最大似然估计吗?一篇文章带你快速了解掌握

&#x1f4da;引言 &#x1f64b;‍♂️作者简介&#xff1a;生鱼同学&#xff0c;大数据科学与技术专业硕士在读&#x1f468;‍&#x1f393;&#xff0c;曾获得华为杯数学建模国家二等奖&#x1f3c6;&#xff0c;MathorCup 数学建模竞赛国家二等奖&#x1f3c5;&#xff0c…

JAVA并发编程之锁

1、乐观锁和悲观锁 1.1、悲观锁 认为自己在使用数据的时候一定有别的线程来修改数据&#xff0c;因此在获取数据的时候会加锁&#xff0c;确保数据不会别的线程修改。synchronized关键字和Lock的实现类都是悲观锁。适合写操作多的场景&#xff0c;先加锁可以保证写操作时数据…

leetcode刷题之回文链表

目录 做题思路 代码实现 1.找到链表的中间节点 2.反转中间节点之后的链表 3.判断倒置的后半部分的链表是否等于前半部分的链表 整体代码展示 总结&#xff1a; 这里是题目链接。 这道题目的意思是&#xff1a;判断该链表中后半部分倒置是否跟前半部分相同&#xff0c;如…

java 每日一练 (8)

文章目录1. 单选题2. 编程题1. 单选题 1. 下列选项中关于 java 中 super 关键字的说法正确的是 () A&#xff1a; super 关键字是在子类对象内部指代父类对象的引用. B &#xff1a; super 关键字不仅可以指代子类的直接父类&#xff0c;还可以直接指代父类的父类. C &#…

API-Server的监听器Controller的List分页失效

前言 最近做项目&#xff0c;还是K8S的插件监听器&#xff08;理论上插件都是通过API-server通信&#xff09;&#xff0c;官方的不同写法居然都能出现争议&#xff0c;争议点就是对API-Server的请求的耗时&#xff0c;说是会影响API-Server。实际上通过源码分析两着有差别&am…

<script>标签在html中书写位置-课后程序(JavaScript前端开发案例教程-黑马程序员编著-第1章-课后作业)

【案例1-1】 <script>标签在html中书写位置 一、案例描述 考核知识点 <script>标签可以放在html中什么位置 练习目标 掌握<script>标签放在页面中不同位置的区别。 需求分析 将JavaScript标识放置<Head>... </Head>在头部之间&#xff0c;使之…

LInux指令之文件目录类

文章目录一、帮助指令二、文件目录类ls指令cd指令 &#xff08;切换目录&#xff09;mkdir指令&#xff08;创建目录&#xff09;rmdir指令&#xff08;删除目录&#xff09;touch指令&#xff08;创建空文件&#xff09;cp指令(拷贝文件)rm指令mv指令cat指令(查看)more指令les…

GEE:计算1990-2021年的指数最大值和最小值,并根据最大最小值对每一副影像归一化

本文记录了在GEE平台上计算影像集合中所有像素的最大值和最小值。并且根据该最大最小值对所有影像进行最大最小值归一化。以SAVI为例,记录了主要函数的使用方法和代码。 结果如图所示, 文章目录 一、计算每一副影像的最大值或者最小值,并将最值保存在 List 中二、计算 Lis…

AD域安全攻防实践(附攻防矩阵图)

以域控为基础架构&#xff0c;通过域控实现对用户和计算机资源的统一管理&#xff0c;带来便利的同时也成为了最受攻击者重点攻击的集权系统。 01、攻击篇 针对域控的攻击技术&#xff0c;在Windows通用攻击技术的基础上自成一套技术体系&#xff0c;将AD域攻防分为信息收集、权…

安装Docker

Docker分为CE和EE两大版本。CE即社区版&#xff08;免费&#xff0c;支持周期7个月&#xff09;&#xff0c;EE即企业版&#xff0c;强调安全&#xff0c;付费使用&#xff0c;支持周期 24 个月。 Docker CE 分为 stable test 和 nightly 三个更新频道。 官方网站上有各种环境…

Nacos 注册中心 - 健康检查机制源码

目录 1. 健康检查介绍 2. 客户端健康检查 2.1 临时实例的健康检查 2.2 永久实例的健康检查 3. 服务端健康检查 3.1 临时实例的健康检查 3.2 永久实例服务端健康检查 1. 健康检查介绍 当一个服务实例注册到 Nacos 中后&#xff0c;其他服务就可以从 Nacos 中查询出该服务…

LeetCode234_234. 回文链表

LeetCode234_234. 回文链表 一、描述 给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为回文链表。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,2,1] 输出&#xff1a;true示例 2&…

Day920.结构化日志业务审计日志 -SpringBoot与K8s云原生微服务实践

结构化日志&业务审计日志 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于结构化日志&业务审计日志的内容。 1、什么是结构化日志 结构化日志&#xff08;Structured Logging&#xff09;是一种将日志信息组织为结构化数据的技术。 传统的日志通常是一些文…