1.3 数字图像概述
我们日常所说的图像其实已经是一个数字化的概念了。在生活中,人眼看到的不管是景色还是物体都是连续的,人们一般也常说看到了什么景色、建筑物、动植物等,而不会说我今天看到了一幅故宫的图像,对于人眼来说,是没有数量的概念的。我们要使用计算设备处理人们看到的景物,引申到我们接收到的信息,就必须对其进行数字化,以获得能够在电子设备上进行处理的数据,即数字化的图像。一个抽象的偏物理学范畴的定义类似于图像是摄影空间中物体对光源的反射和折射在摄影平面上的投影产生的。而视频是按照一定的时间间隔连续获取的图像的序列,然后又在一定的时间范围内连续播放。由于人眼视觉的暂留特性,人眼看到播放的离散的视频的时候,会在大脑中产生一段连续的画面,就好像日常我们看到的连续的景物一样,是不是很神奇?顺便提一句,在英文中,如何区别一幅独立图像和视频序列中的图像呢?尽管它们从物理上讲是完全一致的图像,但我们使用“帧”这个词来标识视频中的图像,英文为Frame,以区别Picture、Image等词。下面我们介绍数字图像中的几个重要概念。
1.3.1 数字化过程——采样
通过在大学学习的数电、模电课程,我们知道要从模拟信号转变为数字信号,需要引入采样和量化的概念。理论上,在某些特定时刻对这种模拟信号进行测量就叫作采样,得到的结果可以称为离散时间信号。采样的离散信号主要有时间属性和幅值属性,那么与之相对,在时间和幅值上都连续的信号,就可以称为模拟信号。按照什么样的时间间隔做采样,才能尽可能地保证在数字化过程中信息不丢失,以便将来可以尽可能完整地把数字信号恢复为模拟信号呢?哈里·奈奎斯特(Harry Nyquist)、克劳德·香农(Cloud Shannon)、埃德蒙·泰勒·惠特克、弗拉基米尔·科捷利尼科夫等人分别独立地发现了我们现在熟知的采样定理(sampling theorem),即采样频率不应低于原始信号的两倍,按照这样的频率采样,就可以把采样后的信号还原成原来的信号,这也叫作无损数字化(lossless digitization)。举个例子:我们熟知的激光唱片(Compact Disc)的采样率一般都是44.1kHz,或者是48kHz的,这是因为人耳的听觉感知范围在20kHz以内,也就是在超声波和次声波之间,所以,我们听到的音乐可以高保真。
我们知道信号不只有频率信息,还有强度信息,那么如何描述强度信息呢?这就要引入采样精度的概念,如果说采样频率指的是在时间轴上对信号进行采样,那么采样精度指的就是在强度轴上对信号进行采样。在时间轴上遵循采样定理,就可以近乎完整地复现原始信号,而在强度轴上则不必依赖采样定理,我们只要在一定的范围内给出人眼或人耳能够接受的精度即可。再拿我们熟悉的音频来举例,如果我们规定一个声音只有四个响度级别,分别用0、1、2、3(0, 22)来标识,那四个响度中间的间隔就会很大,声音听上去就很不连续。那如果用28=256的响度级别来表示的话,每个响度中间的间隔就很小,声音听上去比较连贯、舒服。采样精度一般通过2的指数来标识,比如上例中前一种精度为2,后一种精度为8。
对于图像也是一样的,为了保证在数字化过程中信息不丢失,也同样需要根据采样的原则,使用至少两倍于图像空间信号的频率进行采样。但是在实际使用中,由于很难测定图像信号的频率,人们通常只是简单地将图像按照一个约定俗成的密度进行采样,例如,每行1920个采样点,每幅图像1080行等。每个采样点被称为像素(pixel),一幅图像采样的行数和列数分别代表着图像的高(height)和宽(width),一幅图像包含的所有像素的数量称为图像的尺寸(size),也可以认为是分辨率(resolution),通常表示为宽×高,例如1920×1080。
既然视频对应的是一个图像序列,那么这个序列的密度通常使用帧率(frame rate)来标识,其定义为人们在获取或显示一段视频的时候,每秒逐行扫描处理的图像数量,单位即为每秒的帧数(frame per second)。按照人眼视觉暂留的特性,一般要求每秒至少有10帧图像,因为人眼暂留的时间大概为100毫秒,各个电视电影厂商按照自己设备的特点定义了24fps、25fps、30fps、40fps等,如何在各个帧率之间做转换也是视频处理中需要研究的一部分内容。
1.3.2 帧和场
不知道读者是否注意到了,在前面介绍帧率的时候,我们使用逐行扫描这个概念,其实这个概念是从老式电视上借鉴过来的。老式电视采用一种叫作阴极射线管(cathode ray tube)的元器件进行显示,这种很占空间的显示设备现在已经不常见了。它的显示原理非常简单,就是先在屏幕上按一定方式紧密排列涂了红、绿、蓝三种颜色的荧光粉点或荧光粉条,然后再用由灯丝加热的阴极管经聚焦极形成很细的电子束,并在阳极高压下以极高的速度去轰击屏幕上的荧光粉层,这样屏幕就显现出了图案。但是由于荧光粉被点亮后很快会熄灭,因此电子束必须不断地循环轰击荧光粉层,并且要在一定的时间内(也就是按照一定的速率)重新扫描完一幅完整的画面,这个速率就被定义为屏幕的刷新率(refresh rate)。
在实际应用过程中有多种扫描方式,例如直线扫描、圆形扫描、螺旋扫描等。其中,直线扫描又可分为逐行扫描和隔行扫描两种。逐行扫描比较好理解,就是电子束在屏幕上一行紧接着一行从左到右、从上到下地扫描。隔行扫描的电子束则是扫描完一行之后,不扫描这行的下一行,而是跳到这一行的下一行的再下一行进行扫描,例如规定行数从0开始,扫描完了第0行之后,开始扫描第2行,然后是第4行,直到偶数行全部扫描完之后,跳到第1行再开始扫描,然后是第3行,以此类推。就这样,一幅图像被按照奇偶行硬生生地分成了两幅图像,我们把分出来的半幅图像定义为场(field),从第一个像素开始的场称为顶场(top field),另一个场称为底场(bottom field)。扫描完一个场所需要的时间称为场周期(field period),所以一幅图像需要两个场周期才能完成扫描。那么仿照帧率的定义,我们就知道视频在获取或者显示的时候,每秒按照隔行扫描处理的图像数称为场率(f i eld rate)。
这里再引申介绍一下消隐(blank)和同步(sync)的概念,虽然它们与本书介绍的内容关系不大,但是作为显示方面的基本知识,希望大家做一个简单了解。无论是逐行扫描还是隔行扫描,为了完成对整个屏幕的扫描,电子束既要做水平方向的运动,又要做垂直方向的运动,这是因为电子束扫描完一行后,需要跳到下一行,或者隔一行继续扫描,那么在换行的时候,电子束就不能发射了,否则会在屏幕上留下一道斜线,影响观看,也就是说在换行的时候,我们需要隐藏电子束。了解了原理,我们来看具体过程。当电子束扫描到一行的最右端时,需要快速返回到下一行的最左端的过程,就叫作行消隐(horizontal blank)。同理,当电子束扫描到屏幕的右下角后,需要返回到屏幕左上角,准备开始扫描下一帧或场的过程就叫作垂直消隐(vertical blank)。
消隐的概念主要是指显示设备,而同步的概念就与显示设备的刷新率和显示图像的帧率相关了。垂直同步VSync(Vertical Synchronization)指显示图像的帧率与显示器的刷新率同步。简单来说就是显示图像的帧率不会超过显示器的刷新率,每次显示一帧图像,一个同步操作会被执行,同步的时刻就是显示器扫描线结束最后一行扫描准备开始第一行扫描的时刻。同理,水平同步HSync(Horizonal Synchronization)就是每扫描一行做一次同步。
1.3.3 视频图像属性
介绍完相关的背景知识之后,下面系统地介绍一下视频图像的各类属性,例如宽、高、尺寸、分辨率、精度(深度)等。图像的基本单元是像素,像素是抽象概念,没有大小之分,就像在平面几何中,点是一个概念,是最小单位,并且没有大小之分一样。图像的分辨率反映的是图像像素的密度,对于同样大小的一幅图像,组成该图像的像素数目越多,说明图像像素密度越高,图像就越逼真、清晰,反之,图像就显得模糊、粗糙。直接表述一帧图像的像素点不够直观,并且绝大部分的显示设备是长方形的,因此采用长方形的方式,按照行和列的二维矩阵方式来定义一帧图像,列数和行数分别称作一帧图像的宽和高。例如一帧图像的尺寸为600×400,那么它的像素点有600×400=240000个。同一个视频序列中图像的分辨率是相同的。
对每一个图像我们都必须将其定义在某个色彩空间模型中,否则就没有办法识别这个图像。并且,由于大部分色彩空间模型都采用三分量的方式,所以每个像素都需要三个数值来标识,每一个分量被称为一个通道(channel)。每个通道都有自己的精度,三个通道的精度可以相同,也可以不相同,而一个像素的精度就是这三个通道精度的累加。例如对于RGB色彩空间模型,三个分量R、G、B分别用8比特的数值来标识,那么一个像素的精度就是8+8+8=24比特,也可以说这个像素的深度是24,或者说图像的深度是24。每个像素可能表示的颜色范围是224=16777216。也就是说,一个像素的深度越深,那么它占有的比特数越多,能表达的颜色也就越丰富。在早些年手机分辨率没有这么高的情况下,还出现过RGB565的格式,就是R通道占5比特,G通道占6比特,B通道占5比特,加起来就是5+6+5=16比特,这样一个像素的深度就是16。现在,这种各通道不一致的比特分配情况已经很少见了,所以有时候也以一个通道的比特数作为整个像素的深度值,比如目前比较流行的10比特图像,就是说像素的每一个通道都是10比特的,那么一个像素最少需要10+10+10=30比特来标识。
了解了图像的色彩空间模型、尺寸和深度信息,我们就可以知道一幅图像需要占据多少比特的存储空间了。比如一幅采用RGB888格式的色彩空间模型的图像,它的尺寸为1280×720,像素深度为8,那么这幅图像占据的存储空间为1280×720×8×3=22118400比特=2764800字节(byte)。
上面是图像的属性,那么视频作为图像的序列,还有其自身的一些特性,比如码率,一般也是使用每秒采集或显示的比特数(bit per second,简称bps,书中记作b/s,读作每秒比特数)来衡量。请注意是比特,即常说的b,不是byte,也就是通常说的B。这个指标对于未压缩的视频来说意义不大,一般常用在压缩后的视频流上。
另外,纵横比(aspect ratio)这个概念一般指显示设备宽和高的比例,比如4:3、16:9等。为显示设备设置纵横比是为了适应人眼的特性。而对于图像,只要宽和高固定了,纵横比也就固定了,所以图像一般没有纵横比的概念。但是对于显示设备,纵横比就有意义了。