当前位置: 首页 > news >正文

栅格那点儿事(一)---Raster是个啥子东西

Raster是个啥子东西

 

现如今,不仅是在遥感应用中能看到花花绿绿的影像了,在GIS应用中也能随处看到她们的身影。在各种在线地图中,卫星影像作为底图与矢量的道路层叠加;高程DEM作为高程来源实现地形的山影效果。相信大家对影像这个词,应该一点儿也不感到陌生。

 

那么栅格呢?相对与我们熟悉的影像,这俩只是名词上的区别么?

栅格(Raster)和影像(Images/Imagery)在GIS应用中经常被相互指代。如果非要区别一下呢,影像是指通过各种遥感设备,传感器,或者照相机得到的电子的或者纸质的图片,栅格则是一种数据模型,用来特指影像存储方式的。类比一下,如果把ArcGIS中存储显示的图片都称之为酒的话,栅格就是酒瓶,而影像就是瓶中的美酒了。

 

咱们再来仔细看看栅格数据。

 

如果说使用矢量来描绘我们的世界,需要使用到点,线或者是面。而构成点,线,或者面的最小单元,是点(结点)。那么另外一种用于描绘地物的数据-栅格的最小单元又是什么呢?

 

如果你曾经好奇的把影像/栅格数据放大放大再放大,那么可能会注意到,当放大到某一个层级后,栅格数据就会变成下图所示的状态,变成了一个个的小格子。这些小格子,就是栅格数据的最小单元,Cell,也叫像元。对影像来说,这个最小的单元被叫做pixel,像素。

 

 

熟悉shape格式的筒子们都知道,线或者面数据都是通过点串来存储的。打开属性表也能够看到,撇开业务属性,就空间属性而言,每一条线就是一条记录,而这条记录中存储的shape再展开来才是构成这条线的点串的坐标(xy坐标)。而栅格数据的组织方式就非常的简单,有多简单呢,它就是一矩阵!栅格/影像数据看起来很复杂,还那么大一块,但是其实就是按行和列存储的像元。栅格运算的时候与矩阵运算是一样的,找到相应的位置,然后将象元值进行相应的加减乘除就可以了。

 

通过矩阵方式存储的栅格数据有显而易见的优点,数据结构简单。矢量的点,线,面也可以存储在栅格数据中,这样更方便参与空间分析的运算。BUT,将地物都栅格化了存储也有自己的弊端的。首先,栅格化之后,数据的精度取决于且仅取决于栅格的象元大小。象元越小,数据的所占的磁盘空间越大,处理起来越慢。再有呢,就是栅格的最小单元是不能够再分割的,在数据存储或者重建的时候会有误差。例如像元大小为1m的栅格是不能精确存储边长为10.5m的矢量边的。

 

正如上面提到的,像元有个不能被改变的特性,就是它是一个正方形,长 = 宽 = 像元大小 = 格网大小(栅格) = 分辨率(影像)。对于一个栅格来说,长与宽可以不同,说明栅格的行数与列数不等,也就是每一行的像元数与每一列的像元数不等。但是在一个栅格数据中,像元大小是一定的。

 

象元值又代表了什么呢?

如果需要了解一个矢量数据的属性,我们Identify一下,就可以看到该矢量背后的故事。这个多边形代表的是那个省,这个省的人口有多少,编码是什么等等等等。那么我们Identify一下栅格的某个位置,得到的RGB的值表示又是什么意思呢?

 

小时候的自然课应该也有讲过,世间万物对不同光的吸收和反射是不同的。而我们看到的影像,就是通过传感器记录下每一个位置对红光(Red),绿光(Green)和蓝光(Blue)的反射值得到的。(高级传感器例如卫星上用的还记录了更多光波段的反射值,这里不罗嗦了)栅格数据中,代表实际“属性”的像元值就是反射值。

 

当然了,反射值只是针对航片,卫片和照片的。对于DEM或者其他高程影像来说,像元值代表的就是该位置的实际高度。而土地分类图中每一个像元值代表的是该位置上的土地利用类型。

 

还有一个问题,就是如果栅格都是矩阵,那么为什么会有离散数据(Discrete Data)和连续数据(Continues Data)的区别?

这个是由于栅格数据所表现的事物类型是多种多样的。根据栅格中像元值的分布类型,将他们分成了3类,离散数据(有时也叫专题数据),主要是指分类结果数据,例如土地利用图;连续数据,一般是真实地物的直接体现,比如各种遥感影像,DEM,温度图等等等等;最后一类是图片,例如扫描地图或者楼房照片等。

 

预告一下,下一贴要讲讲像元深度(pixel depth),波段等属性信息。

转载于:https://www.cnblogs.com/xiaocai0923/p/7502649.html

相关文章:

  • 【命令2】
  • DropDownList联动
  • Ta还没有分享呢,过段时间再来看看吧~ 解决办法
  • 如何拿CSDN博客上的原图
  • Hibernate中@Embedded和@Embeddable注解
  • Spring MVC使用@RestController生成JSON示例
  • Tyrion中文文档(含示例源码)
  • 控制域名忘记续费,三星数百万台手机陷入“任人宰割”境地
  • 【趣味题】够买餐具
  • 《大道至简》第一章读后感(伪代码)
  • 新态势感知系列(1):从态势感知到全方位态势感知
  • [noip模拟]计蒜姬BFS
  • Android零基础入门第63节:过时但仍值得学习的选项卡TabHost
  • 「vmware」虚拟机与主机共享目录
  • 找出潜在威胁 端点侦测与反制系统
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • Java 多线程编程之:notify 和 wait 用法
  • JavaScript DOM 10 - 滚动
  • Java-详解HashMap
  • SSH 免密登录
  • Tornado学习笔记(1)
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • vue2.0项目引入element-ui
  • Web Storage相关
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 基于 Babel 的 npm 包最小化设置
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 试着探索高并发下的系统架构面貌
  • 智能网联汽车信息安全
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • ​Python 3 新特性:类型注解
  • #13 yum、编译安装与sed命令的使用
  • (1)Nginx简介和安装教程
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (C#)一个最简单的链表类
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (黑马C++)L06 重载与继承
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (九)信息融合方式简介
  • (论文阅读30/100)Convolutional Pose Machines
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .Net Winform开发笔记(一)
  • @ConditionalOnProperty注解使用说明
  • @requestBody写与不写的情况
  • [ C++ ] STL---string类的使用指南
  • [20170713] 无法访问SQL Server
  • [28期] lamp兄弟连28期学员手册,请大家务必看一下
  • [Android] 修改设备访问权限
  • [C#] 如何调用Python脚本程序
  • [CISCN2019 华东北赛区]Web2
  • [HOW TO]怎么在iPhone程序中实现可多选可搜索按字母排序的联系人选择器
  • [IDF]啥?