Calipso-VFM产品数据读取与显示

  • 介绍
    • 一、数据下载
    • 二、数据说明
    • 三、代码
    • 四、代码整体简易分析
    • 五、代码细致分析

介绍

因为制备标签数据集,所以需要使用星载激光雷达的产品。从激光雷达的准确性来说可以作为标签数据集。
CALIPSO有很多重要的数据和产品,这里只介绍我所使用CALIPSO Lidar Level 2 Vertical Feature Mask (VFM)。
我也是刚刚接触,所以记录下来,一点一点分析他的程序,希望对像我这样的初学者有所帮助吧。

2022.3.9日更新:

最近我发现私聊和评论的人都在问一些问题,看来大家搞这玩意的还不少哈哈,好像网上关于这种的东西确实很少,所以今天我把剩余的程序补充一下,顺道好好吃透。希望能对大家有些帮助,如果大家还有什么新的见解,可以在评论区里评论,我也算初学者所以有不对的地方还希望大家给予纠正。

原来的程序有些不对的地方,我已经上传了新的程序,链接已更新可以重新下载

2022.11.29日更新:

因为一些人私信问数据怎么下载,补充了数据下载的流程博文。

一、数据下载

数据具体下载教程移步:http://t.csdn.cn/msJpY

数据下载的方式倒是有很多,这里我给出网址:

1.https://asdc.larc.nasa.gov/project/CALIPSO/CAL_LID_L2_VFM-Standard-V4-20_V4-20
2.https://subset.larc.nasa.gov/calipso/login.php
3.https://search.earthdata.nasa.gov/search

第三个肯定搞遥感的都不陌生

选择合适的日期和路线区域,因为激光雷达在不同的时间有不同的覆盖区域。

上面俩个网址好像可以选择区域,然后下载该区域内星载激光雷达的数据,具体就不做演示了。你们自己探索下。

不过网速有些下的慢,建议翻翻翻墙

二、数据说明

CALIPSO产品手册:https://download.csdn.net/download/jnbfknasf113/73786532
还有数据解释:
https://www-calipso.larc.nasa.gov/resources/calipso_users_guide/data_summaries/vfm/

例子产品名称:CAL_LID_L2_VFM-Standard-V4-20.2019-03-03T17-48-16ZN.hdf 具体看手册吧

三、代码

这是官方提供的代码,在压缩包里我放了两个vfm文件,作为例子熟悉。

原来上传的代码我跑了一下确实有问题,现在重新上传了新的。
New3.9更新:代码下载:https://download.csdn.net/download/jnbfknasf113/84117526

接下来一步一步的分析:
matlab双击HDF文件,就可以查看和导入文件,因为是单个案例我们就这样导入了,不再写代码导入了。

导入后:

我们先用他的程序画一下

调到这程序菜单下:

vfm_plot(Feature_Classification_Flags,[1 1000],'all')

运行结果:

这就是垂直特征掩膜。
有人问了,附上一个关于海雾识别的图。从这张图上就可以看明白了。

四、代码整体简易分析

电脑画太费时间就用手画了一下,对于大佬来说基本就能了解这三个函数的作用了。不理解的可以看代码细致分析。

VFM_type:就是将一行Featrue_class 1*5515 数组中的数值按照逻辑AND的形式将其转化为类型。因为原来数组中的数是二进制十六位的数,其每几位代表不同属性。前三位代表其类型。所以我们通过将这些数组中的数值和7(因为7的二进制十六位为0000000000000111)逻辑AND就获得了,一行数值在0-7的数组,并且获得0-7所对应的标签。

VFM_row2block:将VFM_type返回的一行数组转化为545*15的块。具体看细致讲解

VFM_plot:Feature_class一行数据经过VFM_type和VFM_row2block就变成了一个545*15的块。这个函数就是按照输入要求将Feature_class[1 最大3728行] 生成的小块都拼接起来,并且按照他们每个像素代表的实际距离(比如一个像素点占0.333KM)设置X Y坐标,然后作图

五、代码细致分析

一点一点看代码吧

从vfm-plot可以看出所需要的参数,以及设置显示不同类型。

代码是调用不同的函数的,所以我就按照他的流程一点一点的讲解研究,为了方便刚接触matlab的初学者,所以我尽可能地讲地细致一点。对于大佬来说就有点多余了,大佬可以快速浏览找出自己需要的


一看就明白:vfm_row2block函数:转换第一行数据,并转换为一个块(块变量会自动创建)。
它的返回时[block,typetext]即一个块和TypeText文本
细致解释:
vfm_plot(Feature_Classification_Flags,[1 1000],‘all’);

这个函数的输入形参和对应的:vfm:Feature_Classification_Flags------- lims:[1 1000]----------type:all
所以这个函数的翻译就是 vfm_row2block(Feature_Classification_Flags的一行数据,‘all’)输入第一行数据和类型。

走:

程序中输入输出讲解明白。输入一行1*5515输出一个二位数组.

在这里插入图片描述 vfm_row2block(Feature_Classification_Flags(1,:),‘all’)

vfmrow:Feature_Classification_Flags(1,:)-------------type:‘all’
这个函数输入有两个属性:第一个是一行数据 ,其实是类型咱们地输入是“all”
Strcmp函数就是进行字符串地比对以此选择,因为输入是“all”不是AllNew所以进入红线vfm_type(vfmrow,type)。
传入还是vfm_type(Feature_Classification_Flags(1,:),‘all’)。
走:

vfm_type简单地来说就是把咱们输入地这一行Feature_Classification_Flags(1,:)转化为1-7地类型因为本身这个Feature_Classification_Flags矩阵貌似是十进制地还需要把他转化成为二进制16位,其每几位代表了某个属性具体看激光雷达说明书:https://download.csdn.net/download/jnbfknasf113/73786532?spm=1001.2014.3001.5503
下面是部分截图:


从这个说明书可以可以看出有的是两位代表某一个属性,有的是三位代表某个属性,有的是一位代表某个属性。所以我们需要把这个取出来,怎么取?这个代码就是掩码,umask3=uint16(7) 7转化成二进制就是111以此类推。

为什么类型是 3位表示?很简单因为在类型分类中8中类型,2的三次方,所以需要三位。其他的以此类推。

因为我们输入了 tyoe=‘all’ 所以执行第一个Case;
插基础知识,没有学过的别搞混了:

与其他的程序设计语言的switch-case语句不同的是,在MATLAB语言中,当其中一个case语句后的条件为真时,switch-case语句不对其后的case语句进行判断,也就是说在MATLAB语言中,即使有多条case判断语句为真,也只执行所遇到的第一条为真的语句

vfm_row:Feature_Classification_Flags(1,:)
tyoe=bitand(umask3,Feature_Classification_Flags(1,:)) 这句话就是对于这一行数据都进行逻辑AND计算。
举个简单的例子把
假如 这一行第一列的天气类型晴空clear air 里面的数转化为二进制是十六位 0000000000102001 这个数不只代表了天气类型还有其他的属性,我们通过逻辑AND让其与 7(其十六位二进制为0000000000000111) 计算 。这样计算结果为:0000000000000001。转化为十进制不就是 1 ,1就代表了“clear air”

通过这个bitand(umask3,vfmrow)函数
我们就将原来:Feature_Classification_Flags(1,:) 可能是[1 10 203 23 22 2]这样的一行数组成功的转化为了类型数组 [1 2 3 4 5 2 2] (pass:这两个数组是我瞎编的,我没计算啊,只是用作展示) 同时我们获得了每个数对应的标签CLassText 。

好了我们拿到了这个函数的返回[type,ClassText] 向上返回
回到vfm_row2block 拿到 Atyped和TypeText

接下来:

这个地方,这里给出了解释。分为三个范围分别占 55行 200行 290行。列是15列看下面的图就理解了。

创建的block为545*15的矩阵,并且矩阵所有的数初始化为10;

offset初始为1 步长为55
这一步,怎么说呢,简单是很简单。说不是很好说。直接手画!这两个图是对应的通过这两个图你们大概就可以明白了。


就是从这个 生成好Featrue_class里拿出55个数变成5列。
下面的代码也是同理。
这一块代码是 56行到255行

继续同理


最后我们通过这个函数vfm_row2block函数 拿到了由这个一行也就行1*5515 变成了一个由0-7标签组成的块矩阵
block 就是这个矩阵。

好我们现在回到vfm_plot

继续走

通过前面的分析我们已经知道了vfm_row2block是将一行Feature_class数据转化为545*15的块,并且块中由0-7标签构成。这个循环则是将这些一行一行的数据都变成小块拼接起来。如下图所示:这样大家应该能够明白了。当然我们可以自己设定lims 在原来设置的[1 1000] 最大可以设置1-3728

接着

插入知识点:

nargin是用来判断输入变量个数的函数,这样就可以针对不同的情况执行不同的功能。通常可以用他来设定一些默认值,如下面的函数。

这里会判断道理我们输入了几个参数,实际上我们只输入了三个,函数本身要求我们输入五个。

如果我们输入了五个的话,肯定输入了noplot,就自动关闭 作图了。同时判断 我们输入的imgsize是否是两个。这里imgsize指的是最后生成的那个图的大小。
我们来看看作图如何做吧。

**这里imgsize指的是最后生成的那个图的大小。**有的话就按照规定的图片大小作图,没有的话就按照1024*512的大小作图。

设置x y轴坐标,这里是根据我的们lims设置的。我们输入的Feature_class总共有3728行也就是意味着最大lims设置为3728 因为我们是 block块的大小为545*15 所以每个y就是545 每个x 就是 (lims(2)-lims(1))*15这个应该可以理解。temp就是设置一个数组从0开始步长为1长度为(lims(2)-lims(1))*15。这个是为了后面生成距离数组。

 x = lims(1)*15*333/1000 + 333*temp/1000; % distance in km

从这个块属性我们知道了一个块的长度为5km,那么简单除法 15个像素点 5/15=0.33333 也就是说每个像素点是0.333KM,这个代码后面的333*temp/1000我一说大家就可以明白了。前面这个我也不是很清楚为什么会这样。留疑。

获取到y 为[1 2 …454]大小为55+200+290=545.从这里我们可以看出y方向上这个小块的个分辨率的距离是不同的。CALIPSO 数据的垂直和水平分辨率随平均海平面以上的高度而变化。
根据这张图就可以看懂了。这个代码的意思。根据不同的分辨率设置y不同的值。
好了回来。
我们现在已经获取了x,y值了。

设置窗口大小。

红线标的就是关键的画图。后面gca设置句柄,后面不设置y轴翻转。对代码的理解这一块影响不大。
最后最后上图,图比我说的明白多了

至此对于这个显示部分的代码原理都讲解结束了,但是这是显示一个类型,还有其他的。都是这个原理,大家只要理解了这个,剩下的摸一会就明白了。

还有人问了:如果用云分类怎么搞?那就用它整体的块就好了就是这部分


我们拿到了这个block矩阵,x 每15个像素点对应一个经纬度。 y可以获取其高度。只要我们和经纬度对应起来就是处理矩阵的问题了!

至此结束谢谢观看!

星载激光雷达CALIPSO-VFM产品数据读取与显示相关推荐

  1. 【CALIPSO】星载激光雷达CALIPSO产品数据下载教程

    [CALIPSO]星载激光雷达产品下载教程 星载激光雷达产品下载教程 一.下载地址 二.注册登录 三.选择数据 1. 选择产品 2. 时间选择 3. 区域选择 4. 确认提交 5. 下载文件预览 6. ...

  2. 星载激光雷达的数据读取与显示

    星载激光雷达的数据读取与显示 1.实习目的 了解星载激光雷达数据集结构: 了解星载激光雷达数据读取与显示: 了解m_map工具箱画地图的用法: 2.实习内容 2.1卫星路径显示 2.2 CALIPSO ...

  3. caliop 数据可视化_星载激光雷达CALIOP数据处理算法概述

    收稿日期 : 2017-08-05 : 修订日期 : 2017-11-27 基金项目 : (2016YFC0200700 , 2016YFC1400902 , 2016YFC400905) : (41 ...

  4. 协同多种SAR数据及多光谱数据的星载激光雷达GEDI森林生物量估测

    协同多种SAR数据及多光谱数据的星载激光雷达GEDI森林生物量估测 GEDI生物量估测的现实应用 前段时间,基本梳理了一下ICESat-2与GEDI树高相关研究的一些知识点.近段时间,有看到很多学者做 ...

  5. 雷达高度计数据读取与显示

    雷达高度计数据读取与显示 1.实验目的 2.实验软件 3.实验数据 4.实验过程与结果 1. 实验目的 了解雷达高度计数据读取.处理.显示操作步骤. 了解雷达高度计在海面高度提取等方面的应用 2.实验 ...

  6. 〖3D激光点云〗激光雷达点云bin文件读取和显示!

    激光雷达点云bin文件读取和显示! 文章目录 一. 代码 二. 结果 三. 显示 四. 参考 首先声明文章主要参考:Ronny Restrepo!其中包括如下的内容. 点云数据的介绍 图像和点云坐标系 ...

  7. livechart 只显示 y 值_基于Python语言的SEGY格式地震数据读取与显示编程

    敬请关注<地学新视野> 摘要:本文简单介绍了SEG-Y地震数据文件格式,以及如何用Python语言编写读写SEG-Y格式的地震数据并绘制地震剖面,其中用到了Segyio和matplotli ...

  8. 小程序——云开发数据库的数据读取出来显示到页面

    最近在做小程序,遇到一个小问题,要将云开发数据库的数据读取出来显示到页面 JS页面: 1.数据库初始化 const db = wx.cloud.database() 2.定义一个变量,将this赋给它 ...

  9. ArcGIS应用(二十二)Arcmap加载激光雷达las格式数据

    1.使用数据 使用Icesat-2星载激光雷达ATL03数据,数据格式为las格式. 2.使用工具 Argis工具箱中的LAS Dataset工具模块,位于Data Management Tools里 ...

最新文章

  1. System.exit(0)和System.exit(1)区别
  2. stl的set,multiset, map, multimap, deque, list, stack, queue, priority_queue
  3. 2.2.3 动量梯度下降法
  4. python画图y轴在右侧_解决python中画图时x,y轴名称出现中文乱码的问题
  5. 深入理解RCU | RCU源码剖析
  6. 【Elasticsearch】index [index] blocked by: [TOO_MANY_REQUESTS/12/index read-only / allow delete (api)]
  7. 丝蛋白行业调研报告 - 市场现状分析与发展前景预测
  8. 上计算机课玩游戏检讨400字,上网课玩游戏检讨书
  9. python ppt_从 Python 中学习 PPT 制作技巧
  10. matlab 最小二乘法拟合_最小二乘法与高斯马尔科夫定理(无偏性、有效性)
  11. Tensorflow入门之 Win10 运行 linux 子系统
  12. 如何刷机:iphone8锁屏密码错误多次,手机停用,连接iTunes,磁盘已满,双重认证弊端!
  13. Linux 阻塞和非阻塞 IO 实验
  14. 实训...实训...
  15. html5选择年月日 年月日时分 年月日时分秒
  16. sam卡、M1卡、PSAM卡、IC卡区别
  17. 一句话完美去除plt保存图像的白边 (plt.savefig去白边, 坐标值和轴)
  18. 栋的月结 | 第一回合(定期更新、动态、架构、云技术、算法、后端、前端、收听/收看、英文、书籍、影视、好歌、新奇)[含泪总结.. 憋泪分享!]
  19. 【前端三剑客三】JavaScript的手术刀剖析第三篇
  20. Flutter高仿微信-第58篇-扫一扫

热门文章

  1. 群晖网络不通_一次拯救群晖NAS数据的历程
  2. 技术文档,完成课程表的抓包操作
  3. 殷俊个人简历 计算机科学,殷俊
  4. 全球治理指标WGI(1996-2018年)
  5. Mac流程图工具-StarUML介绍
  6. js 闭包和函数自调用方法
  7. 鼠标右键单击出现右侧下拉列表(方法一)
  8. MFC--视图窗口显示图片
  9. 前后端联调(1) ——Web前端部分
  10. MEF 基础简介 四