关于压缩
上节咱们说到影像/栅格数据所占的空间可以通过像元深度和行列数推算出来。可是常常遇到的情况是我们在Windows的资源管理器里面看到的影像大小与计算出来的不等,这又是怎么一回事儿呢?
之前我们说到的都叫未压缩大小(Uncompressed Size)。而在绝大多数情况下,影像的数据量都非常大,为了节省磁盘空间就需要把影像数据压缩一下,也就出现了上面所说的大小不等的情况。压缩影像的好处是显而易见的,不仅是节省了磁盘空间,在通过网络传输时也大大节省了带宽,提高了网络服务的性能。但是任何事物都有两面性,影像压缩也不例外。压缩影像是不能够直接在屏幕上显示出来的,都必须经历一个解压缩的过程。一般情况下,影像的压缩比率越大,解压缩的时间也就越长。也就是说,将影像压缩到非常小的时候,虽然节省了空间,但是在使用时会占用非常大的系统资源。要求快速显示的话,对CPU要求是非常高的。
影像压缩算法分成两种,有损压缩和无损压缩。我们常见的JPEG,JPEG2000都属于有损压缩。而LZ77和Run-Length Encoding(RLE)则是无损压缩。
这两种压缩有什么区别呢,从有损这个字眼也能够看出来图像会有损失。简单的说就是使用无损压缩的影像能够通过解压缩完全还原到影像压缩前的状态,而有损压缩则会造成影像的失真。
ArcGIS中支持的压缩类型见下表:
除了上面列出来的,影像压缩的算法可谓是琳琅满目,层出不穷。在这里一一说明白是不可能的了。所以特找出几个比较典型的压缩类型来简单说说,不涉及算法的代码。内容可能有点枯燥,觉得无聊的可以直接跳到小结部分。
我们来看看RLE是怎样压缩影像的。
假使我们有这样一张1bit的黑白影像,B表示1,W表示0。
WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWBWWWWWWWWWWWWWW
在使用RLE压缩算法以后,我们得到的就是:
12W1B12W3B24W1B14W。
很显然,这种算法并没有改变影像的像元值,也就是进行了无损压缩。但是采用重新编码的方式能够压缩的幅度并不大。
再来看看最常见的有损压缩JEPG。
JPEG之所以在日常生活中被广泛的应用,肯定是因为其益处大大的好。好在哪里呢,当然就是其强大的压缩比率。对于一个常见的256色的8bit彩色影像,一般无损压缩能达到的压缩比率为1/2到1/3。但是同样的影像使用jpeg压缩,在保证视觉上无差异的情况下可以达到1/20 至1/40。如果对影像质量要求不高,象是用于缩略图或者索引图,更可以压缩到1/100。举个例子,如果一景影像使用Jpeg压缩,得到的影像大小仅与1/10大小的拇指图所占空间一样,但是这样却不妨碍压缩后的影像显示出比拇指图更多的细节。
要实现如此大的压缩比率,显然通过编码的方式是行不通的。正如上面提到过的,jepg是保证视觉无差异的情况下进行的压缩。
先讲个小知识。除了RGB的渲染方式外,颜色也可以通过YCbCr的方式进行渲染,其中Y代表亮度,Cb和Cr则代表色度、饱和度。由于人类的眼睛,至少是绝大多数人的眼睛对亮度的细微变化非常敏感,但是对色彩的改变就没那么在意。所以对一张图片/影像来说,相对Cb和Cr,Y值更重要一些。
JPEG压缩的原理就是通过余弦变换的方式对Cb和Cr部分取值来增大压缩的程度。具体实现的算法也有很多种,这里就不深入的说了,有兴趣的童鞋可以自行google.
另外还有一种就是GIS筒子们所喜闻乐见的MrSID格式了。
这是一种基于离散小波变换的压缩模式,同jpeg2000和ecw格式。原理是将原始图像分割成多个不同分辨率下的小图像,然后再提取其主要信息。为啥专业人员更喜欢它呢,因为即使在1/100的压缩比率下,压缩后的影像仍然能够保证很小的视觉失真。是的,你没有看错,MrSID也会造成数据的损失。即使在较小的(1/20或1/30)的压缩比率下,压缩后的影像看上去完全没有视觉差异,但是像元值与原始数据仍然有差异,所以不建议对MrSID格式的数据进行分析。BUT,对于巨大的卫星影像来说,MrSID的格式仍然被广泛使用。因为MrSID可以实现更高效,压缩比率更大且视觉差异很小的压缩结果(与jpeg的压缩方式相比),而这样是非常方便网络传输的。并且,MrSID压缩与解压缩速度更快一些。
在ArcGIS的老版本中(9.3和9.3.1),提供了Raster to MrSID的影像压缩功能。在ArcCatalog中一个为压缩大小不超过50M的影像上右键,可以看到这个选项。在ArcGIS 10的版本中,就不再有这个“测试版”的MrSID压缩功能了。但是呢,我们仍然可以借助强大的GDAL来实现大影像的MrSID格式的压缩。
压缩质量的选择
在ArcGIS中导出影像成JPEG或者TIFF格式的时候,会发现JPEG压缩还有不同的比例选择,Compression Quality (1-100)。这个值表示了啥呢?首先要说的是,这个数值并不代表压缩大小的比率,也不是保留的信息的比率,只体现了结果数据的质量。简单的说选择的数值越小,压缩的越多,图像质量越差。直观视觉感受见下图。
另外呢,对于全彩色的影像,建议的最佳的选择是75%。这个值是在看不出差异的标准下能得到的最大的压缩比率。需要注意的一点是,由于jpeg对于亮度的压缩比率很小,和彩色的影像相比较,灰度图的压缩比率就很有限了。在人眼看不出差异的标准下,一般只能压缩10%-25%的大小。