我爱学习网 52xx.cn我爱学习网菜单按钮
  • 搜索

为什么数字图像可以被压缩?

如果想要搞清楚这个问题,就要从图像是如何被数字化的谈起。先来看一张玩具鸭子的图片是怎么被数字化的。

首先,要把这张图片分成若干小块,每个小块中的颜色用一个数字来表示。如果图像是纯黑纯白两色的,那每块只用1或0表示即可。如果图像是16色的,那每块就要用4位二进制数来表示,因为4位二进制数有16种组合,每种组合表示一种颜色,正好可以表示16种颜色。而真彩色位图的每个小块,都是由不同等级的红、绿、蓝三种色彩组合的,表达起来就更复杂一些。如果每种颜色有28个等级,那就可以有224种颜色,这样一来,每小块就需要24位二进制数来表示,才能囊括所有色彩。

由此可见,数字图像色彩越绚丽,需要记录的二进制数就越多。小色块越多,分布得越密,则一幅图的总数据量就越大。

回头来看这个玩具鸭子图片,如果像图中所示被分成了154个色块(11×14),并按真彩色位图来计算,则总数据量就是154×24=3696比特。这些小格子显然是太大了,如果这样来切分图片,还原后的图片就不能表现图片的细节。在实际应用中切分的格子要密得多。这些格子其实就是我们常说的像素。格子分得越多表示像素越高,也就是分辨率越高,大家都熟悉的显示器分辨率就是1024×768。所谓数字图片,就是将图片的画面信息用二进制数字来表示。

知道了图像数字化的道理,再来看图像为什么可以被压缩和还原。先看一张滑雪图,由于人体的色彩变化比较多,而天空和雪的色彩却非常单调,可以想象,天空与雪所代表的每个小格颜色的数值应该非常接近,图右下的原始数据是8个相邻格子的色彩数据,由于两个相邻格子的数据差异很小,所以可以用第一个格子的数据来表达第二个格子数据的预测值,经实际测量后,把真实值与预测值的差值求出来,并利用这个差值来表示第二个格子的色彩,那么,实际记录下的就是第三行差值。恢复数据时,用前面一个值加上差值,就是当前的色彩值,只要有第一位的基础值,后面的色彩值就可以滚雪球似的一个个求出来。用差值来记录色彩,只是简单地进行了很多个减法运算,在还原时再加回来,数据并没有一丁点的损失,因此被称为无损压缩。如果把很少的差值彻底丢弃,在还原时让一个格子的色彩信息代表了周围很多格子的色彩,则压缩率更高,但这样一来格子之间的微小差别就丢失了,这种方法属于有损压缩

压缩文件有很多种格式,你在自己的图片文件后看到的“.bmp”或“.jpg”就是文件格式的名称。bmp格式是将图像的每个格子都独立记录的,因此数据量很大。如果按照前述的预测差值运算后,就变成了有损压缩格式,jpg格式就是其中之一。对于画质基本相同的两幅图像,jpg格式的数据量要比bmp小得多。不过,虽然jpg是有损压缩的,但画质的损失非常小。因为它是很智能的,比如它可以自动对有大面积相似色彩的飞机图片给予较大的压缩率,而对人群图片给予较小的压缩率。

相对于上述的静态的图像压缩,视频图像压缩率就更大了。视频图像文件也有很多文件格式。一般情况下,一秒钟视频会切换成几十张画面,而这些画面的绝大部分都是相同的,可是采集是每幅独立采的,因此生成的avi格式的数据量是很大的。不仅每幅画面本身可以压缩,更重要的是幅与幅之间也可以压缩,这就形成了数据量小得多的mpeg格式。当然,也可以采用压缩率更高的rm格式。rm格式的画质比mpeg差得不多,但数据量却小了很多倍,更方便在网上传输

不同的视频,幅与幅之间的相似度是不同的,有些相似度很大的电视剧,也许在几分钟内,演员都坐在沙发上聊天,除了嘴巴动作外每幅画面都基本一样,对这种视频可以采用较大的压缩率,而对动感性很强的武打片,则需要采用较小的压缩率,这种格式就是rmvb。跟rm格式不同的是,它的压缩率是可变的,vb就是可变比特率的意思。rmvb则比rm更先进,相同数据量的rmvb视频会比rm视频清晰,而相同清晰度的视频,rmvb格式的数据量会更小。

是不是一旦进行了有损压缩,数据缺失了,画质就很难复原了?是很难复原,但这也并不是完全不可能,这里面有个关键的概念是“先验信息”(先验信息也就是我们以前已经知道了的知识)。例如下图左边这张民国女性黑白照片的嘴唇,要压缩成这个灰度,右边的彩色图例中有五种可能,但通过先验信息知道,美女的嘴唇不可能是绿的、蓝的和紫的,只能是右下的红色,把它还原成红色就对了。

根据先验信息我们知道,只有极少数的组合是经常出现的,绝大多数的组合基本不会出现的,如果我们得到了一组模糊不清的组合,它跟经常出现的某个组合基本不会出现的某个组合的相似度一样,那我们就毫不犹豫地认定它就是那个经常出现的组合。当然,它是那个基本不会出现的组合的可能性也是不能排除的。就好比那个民国美女如果真的涂了蓝嘴唇,那我们依靠先验信息做的判断就可能出错了。

【发散思维】一张数字图像可以被无限压缩吗?