金字塔和重采样的解析

金字塔的创建过程其实也就是一个重采样的过程,这是最重要的一点。

如果上面的部分都已经看过了,那么如何在ArcMap中更好的渲染一个栅格数据你已经知道了。可仅展示好一个栅格数据是不够的,我们还需要知道如何快速的展示一个栅格数据。

 

讲金字塔之前,先解释一下重采样的概念。

现如今我们有的影像数据大都是几十M到几十G不止。这样大小的栅格数据在ArcMap中是不能直接显示的。还记得我们前面举的那个例子么,一个606.903 MB的3波段8bit的栅格数据,共有15781列13442行。这个行列数已经是目前我们所使用的屏幕分辨率的10倍以上,也就是说在一个1600x900的显示器上,是根本没有办法把这么多象元全部显示出来的。所以,在显示的时候会进行栅格数据的重采样(Resample),得到能够适应显示器的一个较小行列数的栅格。简单一点说,可以理解为栅格数据的抽稀。

 

ArcGIS中提供的重采样(Resample)的方法有最邻近(Nearest), 双线性(bilinear),卷积(cubic),和Majority。这四种方式决定了结果栅格的象元值与原始数据象元值之间的关系。具体可以在Layer Properties图层属性的Display页下进行设置。



 

稍微罗嗦一下这四种方式的具体取值方法,不感兴趣的可以跳过。

最邻近,直接选取距离当前位置最近的象元值。此方法不改变底层像元值,速度最快。

双线性,通过当前位置的四个最邻近像元取值,具体就是根据这四个像元到中心的加权平均距离计算得到。

卷积,类似双线性,但是需要16个最邻近的像元参与运算。

众数,选择窗口范围内出现频率最高的那个像元值。

 

小结:根据图中的选项列表,我们可以看到,对于离散数据,合适用最邻近与众数,而连续型数据一般适合双线性和卷积。结合上文的取值方法具体来说,最邻近的结果最忠实于原数据,几何变形最小,众数较最邻近结果平滑。双线性和卷积得可以得到平滑的结果,但是都需要消耗系统资源进行重采样的计算。尤其是卷积需要更多的像元参与运算,消耗的时间也会更长。此外,卷积的结果栅格的值域范围可能超出原有数据的值域范围,对于精度要求很高的高程数据,这种重采样方式就不适用来。

 

 

现在我们再来说说金字塔。

为啥要使用金字塔捏?

 

介个主要还是为了提升栅格数据的显示的效率了。试想一下我们要加载一个栅格数据,电脑要进行的操作是将所有的数据全部从磁盘/数据库中取出来,然后经过重采样显示在屏幕上是要经过一段时间的。而对于现今常用的栅格数据来说,这个数据量一般都是几百M甚至几十G的,且不说从磁盘中读取出来需要时间,就是重采样的过程,也是要消耗很长的时间的。所以呢,通过每个比例尺下显示最合适分辨率的栅格,每次读取返回的数据量变小,显示的性能也就提升了。为什么数据量变小了呢,就是说在全图范围下显示较低分辨率的栅格(要小很多很多),而在大比例尺下,由于已经放大到一个较小的区域,所以要返回的数据量也还是很小的。这也就是金字塔文件能够提示栅格数据显示性能的原因了。

  

金字塔的创建过程其实也就是一个重采样的过程。而金字塔文件则是一组不同分辨率的栅格的组合。但是由于金字塔文件中,栅格的分辨率逐级递减,也就是说第2级金字塔是第1级金字塔分辨率的2倍,这种递减的方式使得Majority这种采样方式就不再适用了,采样方式仅限其他三种。

 



不是每一个数据都带有金字塔文件。好像MrSID, ECW这类文件,出于他们的压缩算法,每个文件都包括内置的金字塔。而tif,img格式之类的文件都是需要单独创建的。也就是在ArcMap中第一次加载的时候,系统会提示是否要创建金字塔文件?点击是,就会开始创建的过程了。

 

 

 

创建好的金字塔是什么格式的呢?

 

首先要说的是,不管创建了多少层级的金字塔,都是存在同一个文件里面,这个文件的文件名与原始栅格数据同名。然后需要注意的是,在10.0版本之前,所有ArcGIS支持读写的栅格的金字塔文件都是.rrd为后缀的(reduced resolution dataset),而10.0版本后,借由GDAL的强大功能,除img格式的金字塔仍是rrd之外,其他格式的栅格金字塔更新为.ovr格式(overview)。

 

对于传统的rrd格式的金字塔,对不同层级的金字塔栅格均不支持压缩,而每一级金字塔的分辨率都是上一级的2倍,所以每一层级的金字塔文件的大小都可以直接计算出来。由于是按照1/4的级数递减,…1/4^n,整个金字塔文件的数据量前三级金字塔占了大部分。具体数值参见下表。



 

对于新推出的.ovr格式的文件来说,其最大的优点就是提供LZ77或者JPEG的压缩了。如何选择了jpeg压缩,可以进一步选择压缩质量(0-100),默认值仍然是75。但是要注意的是,要使用JPEG压缩的数据格式必须能够支持按照Jpeg规范存储数据。使用压缩后,显而易见的好处就是结果金字塔文件要比不压缩的要小,ovr文件大概是原始未压缩大小的8%。如果金字塔文件也进行了压缩(jpeg压缩),这个比率更可以达到2%。具体数值参见下表。


 


金字塔的层级到底建多少级最好呢?

 

这个问题可以说是金字塔所有的问题中被问到的最多的了。大家都知道创建金字塔可以加速栅格数据的显示,那么是不是建的层级数越多越好呢?可以预见到的,金字塔的层级越多,所占的磁盘空间也就越大。在创建金字塔的时候,创建层级越多所消耗的时间也就越长。

 

更重要的是,不知道你有没有想过,创建10-20级的金字塔是否有意义呢?

既然金字塔的原理是对原始栅格数据的向下重采样,也就是,每增加一级金字塔,分辨率x2,那么建到第16级的时候,分辨率已经达到原始数据的2的16次幂65536倍了,即使原始数据是10cm的高分辨率航空影像,最高一级金字塔的分辨率也有6554m了,是不是一个很夸张的数字?也就是说,如果原始影像是用在1:500的比例尺下的,最上一级金字塔只会在1:3276万的比例尺下才会取到。更何况,在多次重采样的过程中,原始数据的信息也会丢失大半。什么意思呢,就是在最上面一级金字塔上只能看到朦胧模糊的抽象画了。

 

所以呢,一般建议金字塔创建6-7级就可以满足性能上的需求了。大家也可以注意一下,比如ArcGIS online上的影像底图,或者Google Maps上的影像数据,都是多分辨率的,在大比例尺下使用高分辨率的航空影像或者高精度卫片,而在省级或者国家范围的都是用的低分辨率的卫星影片的。分辨率从20cm到1m, 30m,60m,100m等等…这样的方式既可以保证显示的速率,又可以保证信息的完整性。

 

说到金字塔的层级,那么我们在创建金字塔的时候,如何设置要创建的层级的数量呢?

 

在10.0及以后的版本中,不管是在ArcCatalog中,栅格数据上右键创建金字塔(build pyramid),还是通过GP工具进行创建,都可以在界面中直接输入。但是老版本的用户在运行工具时,并没有这个参数,这个时候就需要在环境变量里面进行设置了。见下图。


 

 

另外,老版本中对于金字塔这一个参数也仅有present/absent这两种选择,是看不到具体创建了多少层级的。只有在10.0以后的版本中,才能在栅格数据的属性列表中看到具体创建了多少层级的金字塔,见下图:


 

 

如何删掉栅格的金字塔呢?

 

由于在第一次将栅格数据加载到ArcMap时会自动提示金字塔的创建,可能慌忙之中创建的金字塔并不符合自己的要求,就会涉及到将现有金字塔删掉重建的问题了。如果是基于文件方式存储的栅格数据,直接浏览到当前文件夹,删到后缀为rrd或者ovr的文件,就可以快速的删除金字塔文件。但是如果数据入库了,比如file geodatabase,如何删除呢?同样,我们也可以通过运行build pyramid工具。但是这个时候,需要将pyramid level设置成0(老版本在环境变量中设置),运行完工具金字塔文件就被删除掉了。

 http://blog.csdn.net/redhairp/article/details/7310202


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值