这幅画是由像素块组成的。实际测量完像素后,计算实际值与预测值的差值,用该差值来表示第二个网格的颜色。后续的颜色值可以一个个滚雪球,这就是所谓的无损压缩。
如果完全舍弃一个小的差异,这种方法就属于有损压缩。
要想理解这个问题,就要从图像是如何数字化的开始。
我们先来看看一张玩具鸭的图片是如何数字化的。
首先把这张图分成几个小块,每个小块里的颜色用一个数字表示。
如果图像是纯黑纯白,那么每一块只能用1或0来表示。
如果图像是16色,那么每个块应该用一个4位二进制数来表示,因为4位二进制数有16种组合,每种组合代表一种颜色,正好可以表示16种颜色。
而真彩色位图的每一个小块都是由红、绿、蓝三种不同层次的色调组成的,表达起来更加复杂。
如果每种颜色有28个等级,就可以有224种颜色。因此,每个小块都需要24位二进制数来表示,这样就可以包含所有的颜色。
因此,数字图像越丰富多彩,需要记录的二进制数就越多。
小色块越多,分布越密集,一张图片的总数据量就越大。
回头看这张玩具鸭图片,如果分成154个色块(11 倍;14)(11 次;14),并按真彩色位图计算,数据总量为154 倍;24 = 3696154 times24=3696位。
这些小格子显然太大了。如果这样拆分画面,还原出来的画面就无法展现画面的细节。
在实际应用中,切割网格要密集得多。
这些网格其实就是我们常说的像素。
网格划分越多,像素越高,即分辨率越高。大家熟悉的显示分辨率是1024 倍;7681024 times768。
所谓数字图片,就是用二进制数字来表示图片的画面信息。
了解了图像数字化的真相,我们再来看看为什么图像可以被压缩和还原。
先看看滑雪地图。因为人体的颜色变化很大,但是天空空和雪的颜色很单调。可以想象,sky 空的值和雪所代表的每个网格的颜色应该是非常接近的。地图右下方的原始数据是相邻八个网格的颜色数据。因为相邻两个网格的数据差别不大,所以可以用实测后的第一个,求真实值和预测值的差值,用这个差值来表示第二个网格的颜色。然后,实际记录第三行的差异。
恢复数据时,当前颜色值是通过将差值与前一个值相加获得的。只要有第一个基础值,下面的色值就可以一个个滚雪球。
差值是用来记录颜色的,只是简单做了很多减法,恢复的时候再把数据加回去。所以称之为无损压缩。
如果只完全丢弃少数差异,而恢复时一个网格的颜色信息代表了周围多个网格的颜色,压缩率会更高,但这样网格之间的细微差异就会丢失。这种方法属于有损压缩。
压缩文件有很多种格式,你可以在自己的图片文件后看到 。bmp 或者 。jpg 是文件格式的名称。
bmp格式独立记录图像的每个网格,所以数据量很大。
如果按照前面提到的预测差值计算,就变成有损压缩类型,jpg格式就是其中之一。
对于两张画质基本相同的图片,jpg格式的数据量要比bmp小很多。
不过jpg虽然是有损压缩,但是画质损失很小。
因为它非常智能,比如可以自动对大面积相似颜色的飞机图像给出较大的压缩率,而对人群的图像给出较小的压缩率。
与上面提到的静态图像压缩相比,视频图像的压缩率更大。
视频图像文件也有多种文件格式。
一般一秒视频会切换到几十张图片,这些图片大部分都是一样的。但是每张图片都是独立采集的,所以avi格式生成的数据量非常大。
不仅可以对每张图片本身进行压缩,更重要的是还可以在帧间进行压缩,形成数据量少得多的mpeg格式。
当然也可以采用压缩率更高的rm格式。
RM格式的画质比mpeg差不了多少,但是数据量要小很多倍,在网络上传输更方便。
不同的视频有不同的相似之处。有些相似度很大的电视剧,可能几分钟后,演员坐在沙发上聊天,除了嘴部动作,每个画面基本一样。这类视频可以采用较大的压缩率,而动态性强的武侠片则需要较小的压缩率。这种格式是rmvb。
不像rm格式,它的压缩率是可变的,vb的意思是可变比特率。
rmvb比rm更高级。相同数据量的rmvb视频会比rm视频更清晰,而相同清晰度的视频在rmvb格式下数据量会更小。
一旦进行有损压缩,数据丢失,是否很难恢复画质?恢复起来很难,但也不是完全不可能。这里有一个关键概念 先验信息 先验信息是我们之前已经知道的。
比如下图左边的民国女子黑白照片的嘴唇压缩到这个灰度,右边的彩色图例就有五种可能。但是根据先验信息,美女的嘴唇不可能是绿色、蓝色、紫色,只能是右下方的红色。把它恢复成红色就行了。
根据先验信息,我们知道只有少数组合经常出现,绝大多数组合基本不会出现。如果我们得到一组模糊组合,它们与一个经常出现的组合和一个基本不会出现的组合具有相同的相似性,那么我们会毫不犹豫地认定它为经常出现的那个。
当然,基本不排除是组合不会出现的可能性。
这就好比如果那个民国美女真的画了蓝色的嘴唇,那么我们基于先验信息的判断可能是错误的。