数据的类型有很多种,例如数值、文字、表格、声音、图形和图像等。计算机不能直接处理这些数据,必须将这些数据以规定的二进制形式表示后,才能被计算机加以处理,这些规定的二进制形式就是数据的编码。在进行数据编码时应遵循系统性、标准性、实用性、扩充性和效率性,要考虑是否便于计算机存储和处理。下面介绍几种常用的数据编码。
计算机的数据包括数值型和非数值型两大类。数值型数据可以进行算术运算,非数值型数据不能进行算术运算。
1.数值型数据
(1)数的符号
由于数值有正有负,在计算机中用“0”表示“正”,用“1”表示“负”。一般把计算机内部将正负符号数字化后得到的数称为机器数,把计算机外部用“+”和“-”符号表示正负的数称为真值。机器数有两个特点:一是符号数字化,二是数的大小受机器字长的限制。
例如,假设计算机字长为8位,十进制真值-100的二进制真值形式为-1100100,机器数为11100100。-100的机器数形式如下所示:
其中,左侧的最高位“1”为数符,即符号位。
(2)定点数
计算机处理的数值数据很多是小数,带小数点的数据在计算机中通常有定点数和浮点数两种表示方法。在数学上,小数点一般用“.”来表示。在计算机中,小数点的表示采用人工约定的方法来实现,即约定小数点的位置,这样可以节省存储空间。
在定点数的表示方法中,约定所有数值数据的小数点隐含在某一个固定位置上。定点数分为定点整数和定点小数两种。
将小数点固定在最后一位数字之后的数称为定点整数。小数点并不真正占据1个二进制位,而是默认在最低位的右边。定点整数分为无符号整数和有符号整数。无符号整数的数码全部是数值位,不能表示负数。有符号整数的最高位表示符号,其他位是数值位。字长为 n 的有符号数可以表示的绝对值最大的负数为-2 n ,此时,数的最高位为1,它既表示符号位,又表示数值位。
表2-8中给出了8位、16位、32位、64位字长的计算机所能表示的无符号整数和有符号整数的范围。
表2-8 位数不同的数的表示范围
当小数点的位置固定在符号位和最高数值位之间时,称为定点小数。定点小数表示一个纯小数。
例如,若机器字长为8位,数值(11110000) B 表示的十进制数为-0.875。小数点隐含在从左侧数第一个“1”(符号位)和第二个“1”(数值位的最高位)之间,可以假想为1.1110000。
(3)浮点数
用定点数所能表示的数值范围非常有限,在做定点运算时,计算结果很容易超出字长的表示范围,不能满足实际问题的需要。所以当数据很大或很小时,通常用浮点数来表示。
浮点数是相对于定点数而言的,表示小数点位置是浮动的。比如7.6×10 2 、0.76×10 3 和7600×10 -1 等表示法表示的十进制数值是一样的,但小数点位置不一样。
浮点表示法与科学记数法类似,十进制的指数表示一般形式是 p = m ×10 n , p 为十进制数值, m 为尾数, n 为指数,10为基数。为了使浮点保持更高的精度以及有统一的表示形式,规定将浮点数写成规格化的形式,即十进制数尾数中的小数点在数值的第一个有效位的后面,这样便准确规定了小数点的位置。例如,+760的科学记数法的规格化形式只有一种,即+7.6×10 2 。
之前计算机制造商根据各自的需要来设计浮点数的表示规则以及浮点数的运算细节,这给代码的可移植性造成了重大的障碍。
1985年,IEEE 754标准问世,继而成为浮点数存储的一个通用工业标准,它也被许多CPU与浮点运算器采用。IEEE 754定义了表示浮点数的格式,包括负零与反常值,一些特殊数值(无穷与非数值),以及这些数值的“浮点数运算符”。IEEE 754提供了四种精度规范,其中最常用的是32位单精度浮点型和64位双精度浮点型。
下面介绍32位单精度浮点数在内存中的存储方式。
在32位单精度浮点数中最高位(第31位)为符号位,即占一个比特位;符号位往右的8位(即30位和23位之间)为指数位,也叫阶码位;最右侧的23位(即22位到0位之间)为尾数位。
图2-7给出了一个32位浮点数在内存中的存储示例图。
● 符号位 :用于表示这个浮点数是正数还是负数,0表示正数,1表示负数。
● 指数位 :用于表示以2为底的指数。为了表示起来更方便,浮点型的指数位都有一个固定的偏移量(bias),即把指数加上这个偏移量后会变成一个非负整数,这样指数位部分就不会出现负数了。在32位单精度类型中,偏移量是127。在64位双精度类型中,偏移量是1023。因此,图2-7中8个比特的指数位呈现的范围是[0,255],减去偏移量127后,可知这8个比特能表示[-127,128]范围内的指数。
● 尾数位 :用于存储尾数。首先对二进制浮点数的尾数进行规范化,即表示成“尾数*指数”的形式,并把尾数的小数点放在第一位和第二位之间,同时保证最高位是1,这个处理过程叫作规范化(normalized)。使用规范化处理,在存储尾数时可以省略前面的1和小数点,只记录尾数中小数点之后的部分,这样就节约了一位内存。
图2-7 IEEE 754中32位浮点数存储举例
如果实际浮点数的指数位不满足8位则应在高位补零;如果尾数位不满23位,则在低位补零。
【例2-11】 根据IEEE 754标准,给出十进制数37.625的单精度浮点表示方法。
解: (37.625) D =(100101.101) B
将二进制转换为以2为底的规范化指数形式:
100101.101=1.00101101×2 5
其中1.00101101是尾数,5是偏移前指数。
将指数加上偏移量:5+127=132。132即为偏移后指数。132转换为二进制为10000100。
隐藏尾数的高位1后,只需记录剩余的尾数部分:00101101。然后在低位补零,补齐23位。补零之后是00101101000000000000000。
由此得知,十进制浮点数37.625的符号位是0,偏移后指数位是10000100,补零后尾数位是00101101000000000000000。
把上述三部分按顺序放在32位浮点数容器中,即得到IEEE 754标准下,十进制数37.625的单精度浮点表示方法为01000010000101101000000000000000,即图2-7中的示例。
(4)原码、反码、补码
一个二进制数同时包含符号和数值两部分,将符号也数值化的数据称为机器数。在计算机中机器数的表示方法很多,常用的有原码、反码和补码三种形式。原码表示法简单易懂,但由于原码表示的数在运算时常要进行一些判断,从而增加了运算的复杂性,故引入反码和补码。三种表示法的定义如下。
●原码表示法:原码表示法是一种简单的机器数表示法,即用最高位表示符号,其余位表示数值。设 x 为真值,则[ x ] 原 表示 x 的原码。
●反码表示法:正数的反码与原码相同;负数的反码只须在原码的基础上把符号位以外的各位数按位“求反”(0变1,1变0)即可,用[ x ] 反 表示 x 的反码。
●补码表示法:正数的补码与原码相同;负数的补码是在原码的基础上符号位不变,数值各位取反(0变1,1变0),然后最低位加1,用[ x ] 补 表示 x 的补码。
从上面关于原码、反码、补码的定义可知:一个正数的原码、反码、补码的表示形式相同,符号位为0,数值位是真值本身;一个负数的原码、反码、补码的符号位都为1,数值位原码是真值本身,反码是各位取反,补码是各位取反后,最低位再加1。真值0的原码和反码表示不唯一,而补码表示是唯一的。
【例2-12】 已知 x 1 =+1100110, x 2 =-1100111,求 x 1 和 x 2 的原码、反码和补码。
解: 根据原码和反码、补码的转换规则,可知正数的原码和反码、补码一致。即
[ x 1 ] 原 =[ x 1 ] 反 =[ x 1 ] 补 =01100110
根据负数的转换规则,[ x 2 ] 原 =11100111,[ x 2 ] 反 =10011000,[ x 2 ] 补 =10011001。
在计算机中存储的数据,都是数的补码形式。计算机在计算时,所有数据也要转换成它的补码进行计算。
【例2-13】 计算9-5的结果。
解: 一般先将减法转换成加法,在进行补码的计算。
9-5=9+(-5)
如果用一个字节表示,9+(-5)=00001001B+11111011B=100000100B。
对于一个字节单元来说,最左边的1是溢出位,会被自动舍弃,因此结果就变成了00000100B,即+4。
同理,计算1-1时,先转换为1+(-1),其对应补码为1+(-1)=00000001B+11111111B=100000000,舍弃溢出位,得到答案为0。这就解决了二进制原码和反码中1-1不等于0的问题。
对一个字节的数据来说,正数部分的补码取值范围为00000000B到01111111B,对应十进制为[0,127]。负数部分的补码为10000001到11111111,其对应原码是11111111到10000001,对应十进制为[-127,-1]。除上述补码外,补码里面还有一个10000000B,直接规定这个补码对应的是-128。因此,一个字节表示的数的范围是[-128,+127]。
除原码、反码和补码外,还可以用移码表示机器数。无论正负数,直接对其补码的符号位取反,即可得到数的移码。浮点数的阶码通常用移码表示。移码可用于简化浮点数的乘除法运算。利用移码便于判断浮点数阶码的大小。
2.十进制数的编码——BCD码
人们习惯用十进制来记数,而计算机中采用的是二进制数。用4位二进制数来表示1位十进制数中的0~9这10个数码的编码称为BCD码。BCD码使二进制和十进制之间的转换非常便捷。相对于一般的浮点式记数法,采用BCD码,既可保存数值的精确度,又可避免计算机做浮点运算所耗费的时间。此外,对于其他需要高精确度的计算,也经常使用BCD编码。常见的BCD码有8421码、5421码和2421码等。在8421码中,每4位二进制数为一组,组内每个位置上的位权从左至右分别为8、4、2、1。以十进制数0~15为例,它们的8421 BCD码对应关系如表2-9所示。
表2-9 十进制数与8421 BCD码的关系
在使用计算机进行信息处理时,西文字符型数据是非常普遍的。西文字符包括各种字母、数字与符号等,它们在计算机中也同样需要用二进制进行统一编码。ASCII码(American Standard Code for Information Interchange)即美国标准信息交换码,是一种常用的西文字符编码标准。ASCII码被国际标准化组织(ISO)定为国际标准。
ASCII码有7位ASCII码和8位ASCII码两种。7位ASCII码称为基本ASCII码,是国际通用的ASCII码。用1字节表示7位ASCII码时,最高位为0,故7位二进制数可表示128个字符,它的范围为00000000B~01111111B。其中,包括52个英文字母(大、小写各26个)、0~9这10个数字及一些常用符号,如表2-10所示。
表2-10 ASCII码表
8位ASCII码称为扩充ASCII码,是8位二进制字符编码,其最高位有些为0,有些为1,范围为00000000B~11111111B,因此可以表示256种不同的字符。其中,00000000B~01111111B为基本部分,对应十进制数的范围为0~127,共计128种;10000000B~11111111B为扩充部分,范围为128~255,也有128种。尽管美国国家标准信息学会对扩充部分的ASCII码已给出定义,但在实际应用中多数国家都将ASCII码扩充部分规定为自己国家语言的字符代码,如中国把扩充ASCII码作为汉字的机内码。
关于ASCII码有以下几点说明:
●通常一个ASCII字符占用1字节(8bit),最高位为“0”。
●标准的7位ASCII码字符分为两类:一类是可显示的打印字符,共有95个;另一类是不可显示的控制符,通常是计算机系统专用的,共有33个(前32个码和最后一个码)。
●数字字符0~9的ASCII码是连续的,为30H~39H;ASCII码字符是区分大小写的,大写字母A~Z和小写英文字母a~z的ASCII码也是连续的,分别为41H~5AH和61H~7AH。例如:大写字母A的ASCII码为1000001B,即ASC(A)=65;小写字母a的ASCII码为1100001B,即ASC(a)=97。可推得ASC(C)=67,ASC(c)=99。
西文字母数量少,在计算机键盘上都有对应的输入按键。计算机内部存储和处理西文字符一般采用ASCII码就可以完成。汉字数量庞大,而且汉字字形、字体复杂多变,使用计算机对汉字进行处理就要复杂得多。汉字的输入要采用输入码;在计算机中存放和处理要使用机内码;输出时需要用对应的字形码进行显示和打印。即在汉字处理过程中需要经过多种编码的转换,下面分别介绍与汉字相关的编码。
1.汉字输入码
按标准键盘上按键的不同排列组合对汉字进行编码,作为汉字的输入码。汉字输入码也称外码,是为将汉字输入到计算机设计的代码。汉字是一种拼音、象形和会意文字,本身具有十分丰富的音、形、义等内涵。迄今为止,已有好几百种汉字输入码的编码方案问世,其中已经得到广泛使用的也多达几十种。选择不同的输入码方案,则输入的方法及按键次数、输入速度均有所不同。按照汉字输入的编码元素取材的不同,可将众多的汉字输入码分为如下4类。
1)区位输入法:区位输入法是利用区位码进行汉字输入的一种方法,又称内码输入法。汉字区位码由4位组成,前2位是区号,后2位是位号。区位码汉字输入法中的汉字编码无重码,便于向内部码转换。在熟练掌握汉字的区位码后,录入汉字的速度会很快,但记住全部区位码相当困难,所以区位码常用于录入特殊符号,如制表符、希腊字母等,或者输入发音、字形不规则的汉字、生僻字。
2)音码:音码是根据汉字的发音来确定汉字的编码,其特点是简单易学,但重码太多,输入速度较慢。常用的音码输入法有全拼输入法和双拼输入法。
3)形码:形码是根据汉字的字形结构来确定汉字的编码,其特点是重码较少,输入速度较快,但记忆量较大,熟练掌握较困难。著名的形码输入法是五笔字型输入法,它是我国的王永民教授在1983年发明的。五笔字型输入法是目前中国以及一些东南亚国家如新加坡、马来西亚等国的最常用的汉字输入法之一。20世纪末,随着智能拼音输入法的流行,使用五笔字型输入法的人数急剧下降。
4)音形码:音形码是既根据汉字的发音又根据汉字的形状来确定汉字编码的一种方法,其特点是编码规则简单,重码少,缺点是难记忆。例如,自然码就是一种“音形结合”的汉字输入方法。
2.汉字编码
我国的《信息交换用汉字编码字符集-基本集》(GB/T 2312—1980)中规定了信息交换所用的6763个汉字和682个非汉字图形符号的代码,即共有7445个代码。如此庞大的汉字集需要两个字节才能全部表示。每个汉字字符都对应了唯一的区位码、国标码和机内码。
1)区位码:将汉字字符按一定规则组织在一个94行94列的表中,称为区位码表。区位码表的行号也称区号、列号也称位号。此标准的汉字编码表有94行、94列。非汉字图形符号位于第1~11区,国标汉字集中的6763个汉字又按其使用频度、组词能力以及用途等因素分成一级常用汉字3755个,按音序排列;二级常用汉字3008个,按部首排列。3755个一级汉字位于第16~55区,3008个二级汉字位于第56~87区。每个汉字的区位码由其所在的区号和位号组成,即由区码和位码组成。例如,“大”字位于20区83位,区位码即为“2083”。
2)国标码:国家标准GB/T 2312—1980中的汉字代码除了十进制形式的区位码外,还有一种十六进制形式的编码,称为国标码。国标码是在不同汉字信息系统间进行汉字交换时所使用的编码。为了与ASCII码兼容,每个字节值应大于32,因为0~32为非图形字符码值。所以,将区位码转换成国标码,需要先将十进制区码和位码转换为十六进制的区码和位码,再将这个代码的高、低两个字节分别加上20H(十进制的32),就得到国标码。例如,“大”的区位码为“2083”,“2083”的二进制为0001010001010011B,十六进制形式为1453H。将1453H的两个字节分别加上20H后,得到的3473H,即为“大”的国标码。
3)机内码:汉字的机内码是供计算机系统内部进行存储、加工处理、传输统一使用的代码,又称为汉字内部码或汉字内码。西文字符的机内码就是它的ASCII码,ASCII码的最高位为“0”。而国标码前后字节的最高位也为0,为了避免与ASCII码发生冲突,把汉字国标码两个字节的最高位一律由“0”改为“1”,即把国标码的每个字节都加上80H(十进制的128),就得到了汉字的机内码。
如“大”字的国标码为3473H,将两个字节分别加上80H后,得到其机内码为B4F3H。
在办公软件中选择“插入”|“符号”命令,打开“符号”对话框,找到“大”字,可以看到“大”字的机内码对应的十六进制为B4F3H,如图2-8所示。
机内码表示简单,解决了在中西文表示时,机内码存在二义性的问题。除机内码外,还有如GBK、UCS、BIG5、Unicode等多种编码方案。其中,Unicode码又称万国码或统一码,是一个国际编码标准,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。比如,U+0639表示阿拉伯字母Ain,U+0041表示英语的大写字母A,U+4E25表示汉字“严”。但是正因为Unicode包含了所有的字符,而有些国家的字符用1个字节便可以表示,还有一些国家的字符要用多个字节才能表示出来。这产生了两个问题:第一,如果有2个字节的数据,那计算机怎么知道这2个字节是表示1个汉字还是表示2个英文字母呢?第二,不同字符需要的存储长度不一样,如果Unicode规定用2个字节存储字符,那么英文字符存储时前面1个字节都是0,这就浪费了存储空间。为解决以上两个问题,UTF-8、UTF-16和UTF-32开始被采用,其中UTF-8是在互联网上使用最广的一种Unicode的实现方式。
图2-8 “大”字的机内码
UTF-8最大的特点在于它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。UTF-8的编码规则有两条:
●对于单字节的符号,字节的第一位设为0,后面7位为这个符号的Unicode码。因此对于英文字母,UTF-8编码和ASCII码是相同的。
●对于 n 字节的符号( n >1),第一个字节的前 n 位都设为1,第 n +1位设为0,后面字节的前两位都设为10。剩下的其他二进制位,全部为这个符号的Unicode码。
3.汉字的字形码
汉字字形码是汉字字库中存储的汉字字形的数字化信息,用于汉字的显示和打印。常用的输出设备是显示器与打印机。汉字字形码通常用点阵(字模)、矢量等方式表示。常用的字形点阵有16×16点阵、24×24点阵、48×48点阵、96×96点阵、128×128点阵、256×256点阵。点阵的点数越多,字的表达质量也越高,越美观,但占用的存储空间也就越大。以“大”的16×16点阵为例(见图2-9a),每个点位用1位二进制表示,1表示有点,0表示没有点,则每行需用16个点,即2字节,共16行,则占用32字节。所有汉字的字模点阵构成“字库”。不同的字体有不同的字库,如黑体、仿宋体、楷体等。字库中存储了每个汉字的点阵代码,当显示输出时才检索字库,根据字模点阵输出字形。矢量汉字保存在矢量字库中,它保存的是对每一个汉字的描述信息,比如一个笔画的起始/终止坐标、半径、弧度等。在显示、打印这一类矢量汉字时,要经过一系列的数学运算才能输出结果。矢量汉字理论上可以被无限地放大,笔画轮廓仍然能保持圆滑。
Windows使用的字库也为以上两类,在FONTS目录下,如果字体扩展名为FON,表示该文件为点阵字库,扩展名为TTF则表示矢量字库。
4.汉字处理流程
通过输入设备将汉字外码送入计算机,再由汉字系统将其转换成内码存储、传送和处理,当需要输出时,再由汉字系统调用字库中汉字的字形码得到结果,整个过程如图2-9b所示。
图2-9 “大”字点阵和汉字处理流程
当前互联网和物联网的快速发展丰富了数据获取的方式,加快了数据获取的速度,譬如各种传感器可以实时获取来自自然信源的数据,网络爬虫工具可以在短时间内获取大量网络数据。除数值、字符外,计算机还需要处理声音、图像、视频等信息,这些信息也需要转换成二进制数后才能被计算机存储和处理。
1.声音的表示
声音(也称音频)是物体振动产生的波,包括语音、音乐以及自然界发出的各种声音。声音通常用模拟波的方式表示,振幅反映声音的音量。频率反映声音的音调,通常以赫兹(Hz)表示。音频是连续变化的模拟信号,而计算机只能处理数字信号,要使计算机能处理音频信号,必须把模拟音频信号转换成用“0”和“1”表示的数字信号,这就是音频的数字化。声音信息的数字化需要经过采样、量化、编码等过程。
(1)采样
采样的对象是通过话筒等装置转换后得到的模拟信号。某一时刻在模拟声音波形上的一个幅度值(电压值)称为样本,获取样本的过程叫作采样。单位时间(一般为1s)内采集样本的次数,称为采样频率,单位为Hz。采样频率越高,用采样数据表示的声音就越接近于原始波形,数字化音频的质量也就越高。根据奈奎斯特采样定理,44.1kHz可以重现频率低于22.05kHz的所有音频。这覆盖了正常人能够听到的所有频率。所以在采集模拟信号时,常采用44.1kHz作为高质量声音的采样频率。
(2)量化
量化是指把采样得到的模拟电压值用所属区域对应的数字来表示。用来量化样本值的二进制位数称为量化位数。量化位数越多,所得到的量化值越接近原始波形的采样值。常见的量化位数有8位、16位、24位等。声音的量化位数也叫声音的位深度。
(3)编码
编码是把量化后的数据用二进制数据形式表示。用一组0和1数字表示的声音,称为数字音频。编码之后得到的数字音频数据是以文件的形式保存在计算机中的。图2-10是声音采样、量化、编码过程示意图,图中以 t A 、 t B 和 t C 时刻采样的三个点A、B、C为例,给出其编码形式和对应幅值。该例采用3位量化位数。
图2-10 声音信号的编码
决定数字音频质量的主要因素是采样频率、量化位数和声道数。采样频率越高,数字音频的质量越好;量化位数越多,数字音频的质量越好;双声道(立体声)的声音质量要好于单声道。
记录每秒存储声音容量的公式为:
采样频率×采样精度(位数)×声道数÷8=字节数
例如,用44.10kHz的采样频率,每个采样点用16位的精度存储,则录制10s的立体声节目,其WAV格式文件所需的存储量为:
44100Hz×16bit×2×10s/8=1764000B=1.68MB
在对声音质量要求不高时,降低采样频率、采样精度的位数或利用单声道来录制声音,可减小声音文件的容量。
(4)音频压缩
因为无损的音频文件过大,不便于存储、网络共享或传输,所以有了音频压缩的概念。音频压缩技术指的是对原始数字音频信号流运用适当的数字信号处理技术,在不损失有用信息量或所引入损失可忽略的条件下,降低(压缩)其码率,也称为压缩编码。它必须具有相应的逆变换,称为解压缩或解码。
音频压缩编码采取去除声音信号中冗余成分的方法来实现。所谓冗余成分指的是音频中不能被人耳感知到的信号,它们对确定声音的音色、音调等信息没有任何的帮助。冗余信号包含人耳听觉范围外的音频信号以及被掩蔽掉的音频信号等。例如,人耳所能察觉的声音信号的频率范围为20Hz~20kHz,除此之外的其他频率人耳无法察觉,都可视为冗余信号。此外,根据人耳听觉的生理和心理声学现象,当一个强音信号与一个弱音信号同时存在时,弱音信号将被强音信号掩蔽,这样弱音信号就可以被视为冗余信号而不用传送。
我们生活中常遇到MP3格式的音频文件,MP3就是一种有损的音频压缩技术,其全称是动态影像专家压缩标准音频层面3(Moving Picture Experts Group Audio Layer Ⅲ)。MP3的压缩比通常是10:1。
2.图像的表示
矢量图形文件存储的是生成图形的指令,因此不必对图形中的每个点进行数字化处理。现实中的图像是一种模拟信号。图像的数字化涉及对图像的采样、量化和编码等。
(1)采样
采样就是把时间上和空间上连续的图像转换成离散点的过程。采样的实质是用若干个像素点来描述一幅图像。在一定的面积上采样的点数(像素数)称为图像的“分辨率”,用点的“行数×列数”表示。分辨率越高,图像质量越好,容量也越大。
(2)量化
量化是在图像离散化后,将表示图像色彩浓淡的连续变化值离散成整数值的过程。在多媒体计算机系统中,图像的颜色用若干位二进制数表示,称为图像的颜色深度或亮度。常用的二进制位数有8位、16位、24位和32位。
在计算机中,常用以下类型的图像文件。
●黑白图:图像的颜色深度为1位,即用一个二进制位1和0表示纯白、纯黑两种情况。
●灰度图:图像的颜色深度为8位,占1个字节,灰度级别为256级。通过调整黑白两色的程度(称为颜色灰度)可以有效地显示单色图像。
●RGB 24位真彩色:彩色图像由红、绿、蓝三基色通过不同的强度混合而成,当强度分成256级(值为0~255)时,占24位,就构成了2 24 =16777216种颜色的“真彩色”图像。
无论从采样还是量化来讲,数字化图像必然会丢掉一些数据,与模拟图像有一定的差距。但这个差距可以控制得非常小,以至于人的肉眼难以分辨,此时,人们可以将数字化图像等同于模拟图像。
(3)编码
图像的分辨率和像素点的颜色深度决定了图像文件的大小,计算公式为:
行数×列数×颜色深度÷8=字节数
例如,当要表示一个分辨率为640×480像素的“24位真彩色”图像时,需要的存储空间为640×480×24bit÷8≈1MB。
由此可见,数字化后的图像数据量十分巨大,必须采用编码技术来压缩信息。编码是图像传输与存储的关键。
数据压缩通过编码技术来降低数据存储时所需的空间,当需要使用压缩文件时,再进行解压缩。根据压缩后的数据经解压缩后是否能准确恢复到压缩前的数据进行分类,可将数据压缩技术分为无损压缩和有损压缩两类。
无损压缩由于能确保解压后的数据不失真,一般用于文本数据、程序以及重要图片和图像的压缩。无损压缩比一般为2:1~5:1,因此不适合实时处理图像、视频和音频数据。典型的无损压缩软件有WinZip、WinRAR软件等。
有损压缩方法以牺牲某些信息(这部分信息基本不影响对原始数据的理解)为代价,换取了较高的压缩比。有损压缩具有不可恢复性,也就是还原后的数据与原始数据存在差异,一般用于图像、视频和音频数据的压缩,压缩比高达几十到几百。例如,在位图图像存储形式的数据中,像素与像素之间无论是列方向还是行方向都具有很大的相关性,因此数据的冗余度很大。这就允许在人的视觉、听觉允许的误差范围内对图像进行大量的压缩。20世纪80年代,国际标准化组织(ISO)和国际电信联盟(ITU)联合成立了两个专家组——联合图像专家组(Joint Photographic Experts Group,JPEG)和运动图像专家组(Moving Picture Experts Group,MPEG),分别制定了静态和动态图像压缩的工业标准,目前主要有JPEG和MPEG两种类型的标准。
3.条形码
条形码(barcode)是将宽度不等的多个黑条和空白按照一定的编码规则排列,用以表达一组信息的图形标识符。常见的条形码是由反射率相差很大的黑条(简称条)和白条(简称空)排成的平行线图案。条形码可以标出物品的生产国、制造厂家、商品名称、生产日期、图书分类号、邮件起止地点等许多信息,具有操作简单、信息采集速度快、信息采集量大、可靠性高、成本低廉等特点。因而在商品流通、图书管理、邮政管理、银行系统等许多领域都得到广泛的应用。
由于条形码符号中的条和空对光线具有不同的反射率,从而使条码扫描器接收到强弱不同的反射光信号,相应地产生电位高低不同的电脉冲。而条码符号中条和空的宽度则决定电位高低不同的电脉冲信号的长短。扫描器接收到的光信号需要转换成电信号并通过放大电路进行放大。经过电路放大的条形码电信号是一种平滑的起伏信号,这种信号被称为“模拟电信号”。“模拟电信号”需经整形变成通常的“数字信号”。根据码制所对应的编码规则,译码器便可将“数字信号”识读成数字、字符信息。
世界上常用的码制有EAN条形码、UPC条形码、二五条形码、交叉二五条形码、库德巴条形码、三九条形码和128条形码等,而商品上最常使用的就是EAN商品条形码。
EAN商品条形码由国际物品编码协会制定,是国际上使用最广泛的一种商品条形码。EAN商品条形码分为EAN-13(标准版)和EAN-8(缩短版)两种。
EAN-13通用商品条形码一般由前缀部分、制造厂商代码、商品代码和校验码组成。商品条形码中的前缀码是用来标识国家或地区的代码,由国际物品编码协会进行赋码。制造厂商代码的赋码权在各个国家或地区的物品编码组织,我国由国家物品编码中心赋予制造厂商代码。商品代码是用来标识商品的代码,赋码权由产品生产企业自己行使,生产企业按照规定条件自己决定在自己的何种商品上使用哪些阿拉伯数字作为商品条形码。商品条形码最后用1位校验码来校验商品条形码中左起第l~12数字代码的正确性。图2-11为一个EAN13条形码的示例。
图2-11 EAN13条形码
其中,690为国家代码,2234为厂商代码,56789为商品代码,最末位2为校验码。
4.二维码
二维码是用某种特定的几何图形按一定规律在平面(二维方向)上分布的、黑白相间的、记录数据符号信息的图形。二维码可以分为堆叠式(行排式)二维码和矩阵式二维码,如图2-12和图2-13所示。堆叠式二维码形态上是由多行一维码堆叠而成的;矩阵式二维码以矩阵的形式组成,在矩阵相应元素位置上用“点”表示二进制“1”,用“空”表示二进制“0”。可以通过图像输入设备或光电扫描设备自动识读二维码。
图2-12 堆叠式二维码
图2-13 矩阵式二维码
常见的二维码码制有:Data Matrix、MaxiCode、Aztec、QR Code、Vericode、PDF417、Ultracode、Code 49、Code 16K等。
二维码与条形码除了码制不同外,还具有以下区别。
●信息容载量不一样,一维码的信息仅能是字母和数字,尺寸大空间利用率低决定了信息容载量低,一般仅能容纳30个字符,而二维码信息容载量比一维码大得多,最多容纳1850个字符。
●应用范围不一样,一维码的表达信息是水平方向,高度一般是为了方便条码设备读取,不能直接表达商品信息,需要将条码信息传入数据库进行分析。二维码可在水平和垂直两个方向表达信息,可直接存储商品信息,无须另接数据库。
●纠错能力不一样:一维码纠错功能较差,若一维码破损,就会造成条码不能识别。二维码纠错率从低到高分为L、M、Q、H四个等级,每个等级的最大纠错率分别是7%、15%、25%、30%,二维码纠错等级可以在条码生成软件中手动设置。所以,二维码即使发生一些破损,也可以进行读取。
常见的二维码为QR Code,QR全称为Quick Response,它是由日本Denso公司于1994年9月研制的一种矩阵二维码符号,具有一维条码及其他二维条码所具有的信息容量大、可靠性高、可表示汉字及图像多种文字信息、保密防伪性强等优点。目前有许多条码生成软件,用户可以自己制作相应的条码。
随着智能设备的普遍使用,二维码信息的扫描和读取越来越方便,人们可以通过扫描二维码完成信息登记、购买商品等,二维码已成为人们生活中不可或缺的事物。但是,二维码也存在一定的安全隐患,不能随意扫描非官方的或未经过验证的二维码应用。