目录

1. 实验内容

2.编程

2.1 代码部分

2.2 运行结果


1. 实验内容

——————————————————————————————————————————————————————————————————————————————————————

—————————————————————————————————————————————————————————————————————————————————————

这里没什么新的知识点,就是各个地方的数组定义要注意一下啊,有的是无符号数组,有的是字节型数组。最变态的是由于风云四号卫星数据比较大,一个数组占用内存甚至达到300M+,所以不用的内存需要即使处理,否则如果是循环那么很容易出现内存无法分配到数组的错误出现。还有就是一些函数你可能了解,但是有些参数陌生所以需要多看帮助了解了解。

总体思路:

1. 打开目录获取相关数据。

2. 对获取的数据进行提取获取三个波段的数据集。

3. 然后使用三维数组存储上面的三个波段数据并用write_tiff输出即可。

上面是波段合成,下面是线性拉伸。

1. 将范围限制在2%~98%之间。

2. 将一些细节进行处理,如南北极转换、数组类型创建正确等等。

3. 借write_jpeg函数输出即可。

——————————————————————————————————————————————————————————————————————————————————————

2.编程

2.1 代码部分

function get_hdf5_ds, file_path, ds_name; 该函数是获取hdf4文件的数据集; 获取文件idfile_id = h5f_open(file_path); 获取数据集idds_id = h5d_open(file_id, ds_name); 获取数据集数据ds_data = h5d_read(ds_id); 关闭文件h5f_close, file_id; 返回数据集数据return, ds_data
endpro week_seven_test; 本程序用于波段合成和线性拉伸(以风云4号数据为例); 这里需要说一嘴,风云4号卫星数据我现在拿的是hdf5数据,但是它的后缀是.hdf而不是.he5,搞得我前面的函数写错了(现在订正过来了); 路径in_dir = 'D:/IDL_program/experiment_data/chapter_4/'out_dir = 'D:/IDL_program/experiment_data/chapter_4/tiff_520/'if file_test(out_dir, /directory) eq 0.0 then file_mkdir, out_dir  ; 不存在该目录就创建; 获取in_dir路径下的hdf5文件的所有路径hdf_path_list = file_search(in_dir, '*DISK*.hdf', count=hdf_count)  ; 注意这个hdf5文件不是he5作为后缀名; 获取hdf5文件的所有名称hdf_name_list = file_basename(hdf_path_list, '.hdf')  ; 去掉了后缀名; 循环处理hdf文件for hdf_i = 0, hdf_count - 1 do begin; 获取该循环下的hdf文件的路径hdf_path = hdf_path_list[hdf_i]; 获取该循环下的hdf文件的名称hdf_name = hdf_name_list[hdf_i]; 输出路径out_path = out_dir + hdf_name + '_mix.tiff'; 获取hdf文件的三个数据集的数据(由hdf explorer知道该数据是16-bit-unsigned-integer)band_red = get_hdf5_ds(hdf_path, 'NOMChannel03')band_green = get_hdf5_ds(hdf_path, 'NOMChannel02')band_blue = get_hdf5_ds(hdf_path, 'NOMChannel01'); 获取该数据的sizeband_size = size(band_red); colband_col = band_size[1]; rowband_row = band_size[2]; 创建合成波段的数组band = uintarr(3, band_col, band_row)  ; 你可能会uintarr(band_col, band_row, 3),但是后面的函数要求是要波段数放在前面; 将三个波段放在上面的波段合成数组中band[0, *, *] = band_redband[1, *, *] = band_greenband[2, *, *] = band_blue; 后面都不会使用这几个变量了,但是它们占据的内存空间又特别大,所以将它们赋空值释放空间band_red = !nullband_green = !nullband_blue = !null; 将无效值(有效值是0-4095)变成0band = ((band lt 4095) and (band gt 0)) * band; 波段合成并输出write_tiff, out_path, band, /short  ; 你将这个band传入后write_tiff函数会自己进行波段合成; 另外,由于band数组是uintarr,所以指定数据类型是/short; 线性拉伸; 获取一个波段的数组元素个数band_element = n_elements(band[0, *, *]); 知道一个波段的数组2% 98%的元素个数min_pos = 0.02 * band_elementmax_pos = 0.98 * band_element; 将每一个波段的数据进行排序; 创建存储拉伸后的数据的数组jpeg_data = bytarr(3, band_col, band_row)  ; 需要字节型数组for band_i = 0, 2 do begin; 获取该循环下的波段数据temp_band = band[band_i, *, *]; sort()将排序(从小到大)之后的索引按顺序返回band_sort = sort(temp_band); 获取最大最小值的索引min_index = band_sort[min_pos]max_index = band_sort[max_pos]; 获取最大最小值min_data = temp_band[min_index]max_data = temp_band[max_index]; 对其进行拉伸jpeg_data[band_i, *, *] = bytscl(temp_band, min=min_data, max=max_data); 解除内存占用temp_band = !nullendfor; 输出为jpeg图像文件write_jpeg, out_dir + hdf_name_list[hdf_i] + '_way.jpeg', jpeg_data,true=1, order=1; true=1表示传入数据中波段数在第一维,2表示在第二维,3表示在第三维。order表示翻转图片(由于做完之后会南北极颠倒所以需要翻转过来); 关闭内存占用jpeg_data = !nullband = !nullendforprint, '>>> 完毕!'
end

——————————————————————————————————————————————————————————————————————————————————————

2.2 运行结果

—————————————————————————————————————————————————————————————————————————————————————

黑图是没有经过线性拉伸的,所以普通照片查看器只能隐隐看得到一些(但是使用ENVI、Arcgis可以清晰查看)。清晰的地球照片是经过线性拉伸的。可以直接用照片查看器打开
——————————————————————————————————————————————————————————————————————————————————————

——————————————————————————————————————————————————————————————————————————————————————我是炒茄子,不用谢

ENVI_IDL: 对风云四号卫星数据波段合成和线性拉伸并分别生成TIFF格式和JPEG格式相关推荐

  1. 简单处理GPM数据和风云四号卫星数据

    上一篇博客介绍了GPM数据和风云四号卫星数据的下载,本篇博客简介一些简单的处理和数据可视化操作. 一.GPM数据 直接将下载好的文件直接拖入ArcMap中. 双击左侧图层下方的precipitatio ...

  2. 风云四号圆盘数据转等经纬工具

    生成的NC结果 处理过程 处理过程 处理工具关注 作者后可以直接下载 下载地址

  3. 读取风云4号卫星FullMask_Grid.raw文件

    读取风云4号卫星FullMask_Grid.raw文件 1.下载FullMask_Grid.raw文件 下载网址:国家卫星气象中心(http://satellite.nsmc.org.cn/Porta ...

  4. 东方大观:使用IDL程序制作风云四号的时序动图

    摘要 基于风云四号全圆盘L1数据,制作时序动图.其实没什么实际含义,就是做出来后看着很有趣. 中文版下载,英文版下载.下载后双击运行即可.最好IDL8.5或以上 数取选取 FY4A-AGRI的L1级数 ...

  5. 使用RSD对高分1号卫星数据进行批量大气校正

    高分数据处理可以有下述5中选项 MSS数据的批量正射校正 MSS数据批量正射校正和大气校正 PAN 数据的批量正射校正 MSS与PAN批量正射校正和融合 MSS与PAN批量正射校正.MSS的大气校正和 ...

  6. 使用RSD批量正射校正和批量融合高分1号卫星数据

    这里提供菜命令的方式启动批量处理.菜单批量处理进行以下几种处理工作. MSS数据的批量正射校正 MSS数据批量正射校正和大气校正 PAN 数据的批量正射校正 MSS与PAN批量正射校正和融合 MSS与 ...

  7. 高分二号(GF-2)号卫星数据的查询下载地址和方法

    高分二号卫星是我国自主研制的首颗空间分辨优于1米的民用光学遥感卫星可在平台中查询到,搭载有两台高分辨率1米全色.4米多光谱相机,具有亚米级空间分辨率.高定位精度和快速姿态机动能力等特点,有效地提升了卫 ...

  8. 风云三号卫星相关学习记录

    Q:风云三号能开展空气质量监测吗? A:大气中气溶胶含量与空气质量密切相关,利用风云三号A星的气溶胶光学厚度产品可区分清洁大气.轻度污染大气.污染大气和重度污染大气,能对空气质量进行评价. 利用紫外臭 ...

  9. 微波matlab,科学网—matlab风云3号卫星微波数据读取 - 彭邦的博文

    之前自己在读取风云3号数据时候,各种查资料都没有找到相关的内容,后来自己慢慢摸索终于将数据读了出来,虽然方法很笨,但是算是达到了基本效果吧.给自己记录下,也分享给大家. 中间值得注意的是我读取的是风云 ...

最新文章

  1. python使用imbalanced-learn的RandomOverSampler方法进行上采样处理数据不平衡问题
  2. python3精简笔记——开篇
  3. [19/03/16-星期六] 常用类_Date时间类DateFormat类
  4. b+树时间复杂度_数据结构:线性表,栈,队列,数组,字符串,树和二叉树,哈希表...
  5. 写给开发者——从比特币脚本引擎到以太坊虚拟机
  6. 2019年应届生平均起薪5610元 一线城市吸引力首次跌破30%
  7. 《运营之光》-- 学习笔记(二)
  8. java怎样读取数据库表中字段的数据类型?
  9. render java_render 实现v-model
  10. 异地备份——windows 与 linux
  11. Linux_access the file or directory which start with -
  12. VMware vSphere client 5.1登录出现这个错误:客户端无法向服务器发送完整请求
  13. c51单片机c语言交通灯的程序设计,基于51单片机的交通灯设计(三)-编写c51程序
  14. ubuntu报错:RuntimeError : unexcepted EOF, excepted 2599001 more bytes. The file might be corrupted.
  15. 用于暴露感测的太阳传感器_凯利讯半导体
  16. nyoj71 独木舟上的旅行
  17. 记录一些视频直播测试地址 rtmp rtsp http
  18. 2021 年高校毕业生就业调查报告发布,本科毕业月平均起薪 5825 元?
  19. 强化学习初探索——Q-table 举例,附可执行Python代码
  20. DNS安全防护解决方案

热门文章

  1. 硅谷钢铁侠-读书笔记
  2. 在win10中如何运行c语言,Win10技巧:如何把“运行”固定到开始菜单?
  3. [C]成员运算符.和间接成员运算符-浅析
  4. 临时购物车用户购物车
  5. 同态加密Paillier
  6. linux下使用AppImage打包qt程序
  7. 3D游戏场景管理概述
  8. 90页PPT详细介绍大数据治理平台解决方案|附PPT下载
  9. 《周鸿祎自述-我的互联网方法论》读后感
  10. 产品必备技能(八):如何如何进行产品功能设计?附实操产品功能设计实例(微记账)