【可视化-2】将图像当作DSM进行三维显示
上一篇文章中,已经跳出颜色或者亮度的局限,将图像视作一般化的栅格数据,并提供了四种利用颜色和亮度来直观表示栅格间取值差异的可视化方法。
栅格数据的四种可视化方式
这一回,我们又要从一般化走向特殊化。栅格数据,究其本质其实是为了在相互垂直的两个方向按照一定的采样间隔记录二维空间中各处的属性值(可以是亮度、光谱值、温度、湿度、降水量、风速等),普通数字图像的二维空间是三维空间投影出来的。这个采样间隔就是分辨率,更准确的叫法应该是空间分辨率。地表的起伏也可以用栅格数据进行记录,选择一个参考平面,记录各个采样点处离参考平面的距离;在地理领域这种数据叫做DEM或者DSM。可见,一般的栅格数据与DSM、DEM的区别,仅在于采样间隔未知或者单位不是米。如果人为给定一个采样间隔,将像元值视作离开参考平面的距离,那么一般栅格数据可以视作DSM、DEM。因此一般栅格数据也可以当作地形数据进行三维显示。
对栅格数据进行三维显示与使用颜色和亮度进行二维显示相比,对栅格上数值的大小关系和变换趋势能够提供更加直观和更加准确的感受。在进行三维显示时数值的大小实际上是用长短表示的,能够确保数值与观感的线性关系;而颜色和亮度的感受与相应电磁波的强度不具有线性关系。
下图为一幅DSM数据分别按照灰度显示和三维显示的结果。
DSM进行灰度显示DSM三维显示
三维显示工具的启动
使用tGis Desktop进行栅格数据三维显示的操作步骤非常方便,点击图中红框内的三维显示工具,在显示窗口中绘制需要显示的区域,之后将会自动弹出三维显示窗口。在三维显示窗口中会将绘制的多边形显示出来,还会显示一个参考平面,用于辅助观察栅格上数值的大小。
三维显示工具,与三维显示范围
拉伸栅格数值
通过对栅格数值的拉伸可以实现细节增强或者细节抑制。使用较大的拉伸系数时,放大了局部的差异,可以更加清晰地观察细节。使用较小地拉伸系数时,缩小了局部的差异,可以更准确地观察整体数值分布。
拉伸栅格数值
移动参考平面
通过移动参考平面,可以更加准确地观察不同位置数值之间地大小关系。
平移参考平面
顶点着色
当前可以使用不同渐变色进行顶点着色,或者直接显示为三角网。(下图纯绿色的实际上时三角网,因为太密集了,看不出来)
使用不同渐变色进行顶点着色,或者直接显示为三角网。纯绿色的实际上是三角网
可视化例子
梯度图像梯度的三维显示红色通道的三维显示亮度的三维显示分割结果局部分割结果三维显示(这是没意义的)通过多视几何原理从无人机俯拍照片生成的DSM(与深度图类似)将上面的DSM进行三维显示
实现这些可视化功能的软件完全开源的,感兴趣的可以自行下载源码编译。栅格数据IO用的GDAL,软件界面一开始用的Qt最近改成了wxWidgets,还依赖的一个内存池(elr_memory_pool)。
https://github.com/tgis-top/tGis
【可视化-2】将图像当作DSM进行三维显示的更多相关文章
- 科学计算三维可视化---TVTK管线与数据加载(可视化管线和图像管线了解)
一:TVTK的管线 使用管线技术将TVTK中各个对象穿连起来,几乎所有渲染引擎都会提到管线技术 在TVTK中,每个对象只需要实现相对简单的任务,整个管线则能根据用户的需求,实现复杂的数据可视化处理. ...
- Python 数据可视化 -- pillow 处理图像
Python 图像库(Python Image Library,PIL)为 Python 提供了图像处理能力. PIL 官网:http://www.pythonware.com/products/pi ...
- OpenCV3 for python3 学习笔记3-----用OpenCV3处理图像2
3.5.Canny边缘检测 OpenCV提供了Canny边缘检测函数来识别边缘.它有5个步骤:使用高斯滤波器对图像进行去噪.计算梯度.在边缘上使用最大抑制(NMS).在检测到的边缘上使用双阀值去除 假 ...
- 科学计算三维可视化---Mlab基础(管线控制函数)
科学计算三维可视化---TVTK管线与数据加载(可视化管线和图像管线了解) 科学计算三维可视化---Mayavi入门(Mayavi管线) Mlab管线控制函数的调用 Sources:数据源 Filte ...
- OpenCV图像的轮廓的匹配
http://blog.sina.com.cn/s/blog_67a7426a0101cxl0.html 一个跟轮廓相关的最常用到的功能是匹配两个轮廓.如果有两个轮廓,如何比较它们;或者如何比较一个轮 ...
- tensorflow学习笔记——图像数据处理
喜欢摄影的盆友都知道图像的亮度,对比度等属性对图像的影响是非常大的,相同物体在不同亮度,对比度下差别非常大.然而在很多图像识别问题中,这些因素都不应该影响最后的结果.所以本文将学习如何对图像数据进行预 ...
- 基于Qt5的排序算法简单可视化
之前写了几个排序算法,然后看到别人将排序算法的过程可视化出来,所以就想尝试一下,然后就用Qt简单写了个界面,用QImage和QPainter来画图显示,代码比较简单. 我的想法是画图的时候,图像的X轴 ...
- 使用Keras构建深度图像搜索引擎
动机 想象一下,如果有数十万到数百万张图像的数据集,却没有描述每张图像内容的元数据.我们如何建立一个系统,能够找到这些图像的子集来更好地回答用户的搜索查询? 我们基本上需要的是一个搜索引擎,它能够根据 ...
- 深度学习与计算机视觉教程(15) | 视觉模型可视化与可解释性(CV通关指南·完结)
作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/37 本文地址:http://www.showmeai.tech/article-det ...
随机推荐
- Rsync服务常见问题及解决
1. rsync服务端开启的iptables防火墙/selinux没关 [客户端的错误] No route to host [错误演示过程] [root@nfs01 tmp]# rsync -avz ...
- 怎么查看HBase表的创建时间
前几天HBase出现了RIT告警,忽然发现发出告警的Region所属的表并不是我创建出来的,于是就想看看这些表是怎么来的. 一时也没什么头绪,就先看看这些表是什么时候创建出来的吧,然后再根据时间点看看 ...
- 【初学】Spring源码笔记之零:阅读源码
笔记要求 了解Java语言 了解Spring Framework的基础 会使用Maven 关于本笔记 起因 本职数据分析,为公司内部人员开发数据处理系统,使用了Python/Django+Bootst ...
- java 面向对象(八):面向对象的特征一:封装性
面向对象的特征一:封装与隐藏1.为什么要引入封装性?我们程序设计追求“高内聚,低耦合”.高内聚 :类的内部数据操作细节自己完成,不允许外部干涉:低耦合 :仅对外暴露少量的方法用于使用. 隐藏对象内部的 ...
- python 面向对象专题(三):继承
目录 Python面向对象03 /继承 1. 初识继承 2. 单继承 3. 多继承 4. 总结 1. 初识继承 概念:专业角度:如果B类继承A类,B类就称为子类,派生类,A类就称为父类,超类,基类 种 ...
- bzoj3791作业*
bzoj3791作业 题意: 对一个01序列进行染色,每次能将一个区间染上色(可覆盖之前染的),共能染k次,求最大正确染色个数.n≤100000,m≤50. 题解: 结论:染k次最多能把序列分成2*k ...
- DQL:查询表中的记录
DQL:查询表中的记录 * select * from 表名; 1. 语法: select 字段列表 from 表名列表 where 条件列表 group by 分组字段 having 分组之后的条件 ...
- [Qt2D绘图]-01Qt2D绘图基本绘制和填充
Qt的文档位置为 Paint System 大纲: 简介 先看一个小例子 基本的绘制和填充 使用画笔(Qpen) 使用画刷(QBrush) ...
- Python Hacking Tools - Vulnerability Scanner
Security Header website: https://securityheaders.com/ Scan the target website: https://www.hackthiss ...
- ClickHouse源码笔记2:聚合流程的实现
上篇笔记讲到了聚合函数的实现并且带大家看了聚合函数是如何注册到ClickHouse之中的并被调用使用的.这篇笔记,笔者会续上上篇的内容,将剖析一把ClickHouse聚合流程的整体实现. 第二篇文章, ...