1、图像编解码技术及应用1 图像编解码技术概论:在当前的图像压缩领域中常用的技术有:BMP、EPS、GIF、JPG、PDF、PIC、PNG、PSD、TIF。上述技术间的差异主要存在于图像编解码的算法不同,通过对算法的研究可以使我们更加容易的理解图像压缩的原理。位图格式(BMP)是在 DOS时代就出现的一种元老级文件格式,因此它是DOS和 WINDOWS操作系统上的标准的 WINGDOWS点阵图像格式,以此文件格式存储时,采用一种非破坏性的 RLE压缩,不会省略任何图像的细部信息。EPS是最常见的线条稿共享文件格式,它是以 PostScript语言为开发基础,所以 EPS文件能够同时兼容矢量和点阵图
2、形,所有的排版或图像处理软件如PageMaker或 Illustrator等,都提供了读入或置入 EPS格式文件的能力,而且 RGB和 CMYK对象也可以保有各自的原始的色彩模式。GIF应该是在网络上最常见的一种压缩文件格式,它的英文全名 Graphic Interchange format,当初研发的目的是为了最小化电缆上的传输,因此能采用 LZW方式进行压缩,但可显示的颜色范围只局限于 256索引色,目前所采用的 GIF图形共有两种格式:87a 和 89a,常见于网页上建议的小动画制作,其中GIF89a还可提供透明色效果,点阵图形,灰度图形或者索引颜色模式皆可存储为此种文件格式 JPG跟
3、GIF一样为网络上最常见道的图像格式,其英文正式名称为 Joint Photographic Experts Group,它是以全彩模式进行显示色彩,是目前最有效率的一种压缩格式,常用于照片或连续色调的显示,而且没有 GIF去掉图像细部信息的缺点,但需要注意的是此类图像需要自行设置压缩程度,在打开时JPG图像会自动解压缩,不过要注意的是 JPG采用的压缩是破坏性的压缩,因此会在一定程度上减损图像本身的品质。 PDF是 Adobe公司近几年权力推行的一种文件格式,它已 Post Level2语言为其开发基础,同时可显示矢量及点阵的数码图形,同时还具有文件搜寻及网上预览的功能,即所谓电子化文件的观
4、念,我们只要利用 PageMaker或Illustrator设计完成一个出版文件,并以 PDF格式输出便可发送出去,不会有分色、装订和印刷的烦恼,而且可适用相当多的平台,如Macintosh、Windows、UNIX 以及 DOS。PDF 文件的浏览器为 Acrobat Reader。 PIC是苹果(Macintosh)操作系统的标准文件格式,以 QuickDraw显示语言为开发基础,是少数可以同时支持矢量和点阵的图像类型,利用 Macintosh色彩上的优势,PIC 可以支持任何颜色深度,尺寸及分辨率,甚至可支持到 32位的图像。 PNG是由 GIF衍生出来的一种新的图像格式,似乎有取代 G
5、IF的趋势,同样适用于网页图像显示,同时采用非破坏性的压缩方式来缩减文件大小,在传输时亦可以渐次的方式将接收到的图像显示出来,不必苦等数据传输完毕后才能一窥全貌。 PSD是 Photoshop中的标准文件格式,是 Adobe公司为 Photoshop量身定做的定制格式,也是唯一支持 Photoshop所有功能的文件类型,包括图层、通道、路径等,在存储时会进行非破坏性压缩以减少存储空间,打开时速度也较其他格式快些,在作品未定稿前强烈建议以此种文件格式存储,以便日后修改。TIF是由 Aldus公司早期所研发的一种文件格式,至今仍然是图像文件的主流格式之一,同时横跨苹果(Macintosh)和个人电
6、脑(PC)两大操作系统平台,可以说是跨平台操作的标准文件格式,而且也广泛支持图像打印的规格,如分色的处理功能,它所使用的是一种 LZW的非破坏性压缩。遗憾的是不支持矢量图形。2BMP、GIF、JPEG 图像编解码详解:一、 行程长度压缩 原理是将一扫描行中的颜色值相同的相邻像素用一个计数值和那些像素的颜色值来代替。例如:aaabccccccddeee,则可用 3a1b6c2d3e来代替。对于拥有大面积,相同颜色区域的图像,用 RLE压缩方法非常有效。由 RLE原理派生出许多具体行程压缩方法: 1.PCX 行程压缩方法: 该算法实际上是位映射格式到压缩格式的转换算法,该算法对于连续出现 1次的字
7、节 Ch,若 Ch0xc0则压缩时在该字节前加上0xc1,否则直接输出 Ch,对于连续出现 N 次的字节 Ch,则压缩成 0xc0N,Ch这两个字节,因而 N最大只能为 ffc0=3fh(十进制为 63),当 N大于 63时, 则需分多次压缩。 2.BI_RLE8 压缩方法:在 WINDOWS的位图文件中采用了这种压缩方法。该压缩方法编码也是以两个字节为基本单位。其中第一个字节规定了用第二个字节指定的颜色重复次数。 如编码 0504表示从当前位置开始连续显示 5个颜色值为 04的像素。当第二个字节为零时第二个字节有特殊含义:0 表示行末;1 表示图末;2 转义后面 2个字节, 这两个字节分别表
8、示下一像素相对于当前位置的水平位移和垂直位移。这种压缩方法所能压缩的图像像素位数最大为 8位(256色)图像。3.BI_RLE 压缩方法: 该方法也用于 WINDOWS位图文件中,它与 BI_RLE8编码类似,唯一不同是:BI_RLE4 的一个字节包含了两个像素的颜色,因此,它只能压缩的颜色数不超过 16的图像。因而这种压缩应用范围有限。 4.紧缩位压缩方法(Packbits):该方法是用于 Apple公司的 Macintosh机上的位图数据压缩 方法, TIFF 规范中使用了这种方法, 这种压缩方法与BI_RLE8压缩方法相似,如 1c1c1c2132325648 压缩为:83 1c 21
9、81 32 56 48,显而易见, 这种压缩方法最好情况是每连续 128个字节相同,这 128个字节可压缩为一个数值 7f。这种方法还是非常有效的。 二、霍夫曼编码压缩: 也是一种常用的压缩方法。是 1952年为文本文件建立的,其基本原理是频繁使用的数据用较短的代码代替,很少使用的数据用较长的代码代替,每个数据的代码各不相同。这些代码都是二进制码,且码的长度是可变的。如: 有一个原始数据序列,ABACCDAA 则编码为 A(0),B(10),C(110),(D111),压缩后为010011011011100。产生霍夫曼编码需要对原始数据扫描两遍,第一遍扫描要精确地统计出原始数据中的每个值出现的
10、频率,第二遍是建立霍夫曼树并进行编码,由于需要建立二叉树并遍历二叉树生成编码,因此数据压缩和还原速度都较慢,但简单有效,因而得到广泛的应用。三、LZW 压缩方法 LZW 压缩技术比其它大多数压缩技术都复杂, 压缩效率也较高。其基本原理是把每一个第一次出现的字符串用一个数值来编码,在还原程序中再将这个数值还成原来的字符 串,如用数值 0x100代替字符串“abccddeee“这样每当出现该字符串时,都用 0x100代替,起到了压缩的作用。 至于 0x100与字符串的对应关系则是在压缩过程中动态生成的,而且这种对应关系是隐含在压缩数据中,随着解压缩的进行这张编码表会从压缩数据中逐步得到恢复,后面的
11、压缩数据再根据前面数据产生的对应关系产生更多的对应关系。直到压缩文件结束为止。LZW 是可逆的, 所有信息全部保留。四、算术压缩方法 算术压缩与霍夫曼编码压缩方法类似,只不过它比霍夫曼编码更加有效。算术压缩适合于由相同的重复序列组成的文件,算术压缩接近压缩的理论极限。这种方法,是将不同的序列映像到 0到 1之间的区域内,该区域表示成可变精度(位数 )的二进制小数,越不常见的数据要的精度越高(更多的位数),这种方法比较复杂,因而不太常用。五、JPEG( 联合摄影专家组 Joint Photographic Exprerts Group) JPEG 标准与其它的标准不同,它定义了不兼容的编码方法,
12、在它最常用的模式中,它是带失真的,一个从 JPEG文件恢复出来的图像与原始图像总是不同的,但有损压缩重建后的图像常常比原始图像的效果更好。JPEG 的另一个显著的特点是它的压缩比例相当高,原图像大小与压缩后的图像大小相比,比例可以从 1到 8090不等。 这种方法效 果也好,适合多媒体系统。介绍完了压缩算法,我们来简要介绍一下三种位图格式的异同和它们之间的相互转换。2.1 BMP:图象文件就是描绘了一幅图象的计算机磁盘文件。形成数字图象数据后,将其存储在计算机里的方法有 2种,即位映射和向量处理方式。我们这里主要讨论的是位图。不同图象软件几乎都用各种的方法处理图象,图象格式也多种多样,它主要包
13、括文件识别头和图象数据。文件识别头用来让计算机判断是哪种文件格式,图象数据包含了整个对图象描绘相关数据,包括调色板、位图映象等。根据压缩算法不同,映象方式也不同,下面简要介绍一下压缩算法。位图文件头:包含 BMP图象文件的类型、显示内容等信息。typedef struct tagBITMAPFILEHEADER WORD bfType; / 位图文件的类型,必须为 BM DWORD bfSize; / 位图文件的大小,以字节为单位 WORD bfReserved1; / 位图文件保留字,必须为 0 WORD bfReserved2; / 位图文件保留字,必须为 0 DWORD bfOffBit
14、s; / 位图数据的起始位置,以相对于位图文件头的偏移量表示 BITMAPFILEHEADER; 0x0000H - 0x0001H 2 BYTES 文件标识 基本上就是BM0x0002H - 0x0005H 4 BYTES 表示整个文件的大小 字节顺序是否固定 little_Endian or big_Endian?0x0006H - 0x0009H 4 BYTES 保留 必须设置为 00x000AH - 0x000DH 4 BYTES 位图数据的偏移量 从文件开始计算位图信息数据结构由 BITMAPINFOHEADER和 RGBQUAD两个数据结构组成 接下来为位图信息头: typedef
15、 struct tagBITMAPINFOHEADER DWORD biSize; / 本结构所占用字节数 LONG biWidth; / 位图的宽度,以像素为单位 LONG biHeight; / 位图的高度,以像素为单位 WORD biPlanes; / 目标设备的级别,必须为 1 WORD biBitCount / 每个像素所需的位数,必须是 1(双色),/ 4(16色),8(256 色)或 24(真彩色)之一 DWORD biCompression; / 位图压缩类型,必须是 0(不压缩), / 1(BI_RLE8压缩类型)或 2(BI_RLE4压缩类型)之一 DWORD biSize
16、Image; / 位图的大小,以字节为单位 LONG biXPelsPerMeter; / 位图水平分辨率,每米像素数 LONG biYPelsPerMeter; / 位图垂直分辨率,每米像素数 DWORD biClrUsed; / 位图实际使用的颜色表中的颜色数 DWORD biClrImportant; / 位图显示过程中重要的颜色数 BITMAPINFOHEADER; 其中 BITMAPINFOHEADER数据结构包含了有关 BMP图象的宽、高、压缩方法等信息。0x000EH - 0x0011H 4 BYTES 位图信息头的长度大小 整个结构的大小,可能会增加字段,所以需要读取该值0x0
17、012H - 0x0015H 4 BYTES 位图宽度 单位像素0x0016H - 0x0019H 4 BYTES 位图高度 单位像素还有另一个用处,就是指明该图像是倒向的位图,还是正向的位图。如果该值是一个正数,图像是倒向的,如果该值是一个负数,图像是正向的。当高度值是一个负数时(正向图像)图像将不能被压缩,压缩方式不能是 BI_RLE8或BI_RLE4。0x001AH - 0x001BH 2 BYTES 位图的位面数 总是 10x001CH - 0x001DH 2 BYTES 每个像素的位数 值为 1 4 8 16 24 320x001EH - 0x0021H 4 BYTES 压缩方式(0
18、 不压缩 BI_RGB 1 RLE-8压缩,8 位 RLE压缩 BI_RLE8 每个象素 8比特的 RLE压缩编码,压缩格式由 2字节组成 2 RLE-4压缩,4 位 RLE压缩 BI_RLE4 每个象素 4比特的 RLE压缩编码,压缩格式由 2字节组成 3 Bitfields位域存放方式 BI_BITFILEDS 每个象素的比特由指定的掩码决定)0x0022H - 0x0024H 4 BYTES 位图数据大小 必须是 4的整数倍,说明图象的大小,以字节为单位。当用 BI_RGB格式时,可设置为 0。0x0026H - 0x0029H 4 BYTES 水平分辨率 对于设备无关图 ,设置成为 0
19、0x002AH - 0x002DH 4 BYTES 垂直分辨率 对于设备无关图 ,设置成为 0typedef struct tagRGBQUAD BYTE rgbBlue; / 蓝色的亮度(值范围为 0-255) BYTE rgbGreen; / 绿色的亮度(值范围为 0-255) BYTE rgbRed; / 红色的亮度(值范围为 0-255) BYTE rgbReserved; / 保留,必须为 0 RGBQUAD; 0x002EH - 0x0031H 4 BYTES 使用的颜色数 说明位图实际使用的颜色表中的颜色索引数,设为 0的话,则说明使用所有调色板项,如果有调色板,则大小等于 2V
20、ALUE(0x001CH - 0x001DH) 16位及以上位图不使用颜色表。0x0032H - 0x0035H 4 BYTES 重要的颜色数 指定重要的颜色数, 一般设置为 0,表示所有的颜色一样重要 如果设置的不等于 0或者颜色数,就只有这么多值数据结构 RGBQUAD定义一种颜色。位图阵列:位图阵列记录了图象的每一个象素值。从图象的左下角开始逐行扫描图象。从左到右,从上到下,将图象的象素值逐一记录下来,这些记录象素值的字节组成了位图阵列。位图阵列数据的存储格式有压缩和非压缩两种格式。1 非压缩格式 位图中的每一个点的象素值对应与位图阵列的若干位,而位图阵列的若干位由图象的高度、宽度及图象
21、的颜色数决定。2 压缩格式 在 bmp格式文件中,Windows 支持 BI-RLE8和 BI-RLE4两种压缩类型的存储格式。图象数据:BMP图象数据的存储顺序是由下而上(图象上下颠倒存储),而图象的宽度(以字节为单位)必须是 4的倍数。如果不足 4的倍数必须补足。虽然 BMP图象数据有 BI_RLE8和 BI_RLE4两种压缩格式,但是使用很少。BI_RLE8和 BI_RLE4(RunLength压缩):二者的差别在于前者以 8位为一个处理单位,后者以 4位为一个处理单位。解压缩时,每次读取 2字节数据(BYTE1 , BYTE2)BYTE1!= 0x0 BYTE1为数据重复值,将 BYT
22、E2重复 BYTE1次BYTE1=0x00,BYTE2=0x00表示此扫描线结束(end of line)BYTE1=0x00, BYTE2=0x01表示文档结束(end of file)BYTE1=0x00, BYTE2=0x02坐标位移指示,表示后面两个字节分别是指下一个像素位置与目前像素位置的水平和垂直位移数值。BYTE1=0x00, BYTE2=0x030xFF BYTE2为数据读取值。连续读取 BYTE2个字节的数据,而 BYTE2必须是 2的整数倍,否则必须补足。例:一段压缩数据(BI_RLE8)如下:0x03 0x04 0x05 0x06 0x00 0x03 0x45 0x56
23、0x67 0x00 0x02 0x78 0x00 0x02 0x05 0x01 0x02 0x78 0x00 0x00 0x04 0x1E 0x00 0x01BYTE1 BYTE20x03 0x04 0x04 0x04 0x04 0x05 0x06 0x06 0x06 0x06 0x06 0x06 0x00 0x03 (0x45 0x56 0x67 0x00) 0x45 0x56 0x67 0x02 0x78 0x78 0x78 0x00 0x02 (0x05 0x01) 右移 5点,下移一点 0x02 0x78 0x78 0x78 0x00 0x00 End of line 0x04 0x1
24、E 0x1E 0x1E 0x1E 0x1E 0x00 0x01 End of file 一段压缩数据(BI_RLE4)如下: 0x03 0x04 0x05 0x06 0x00 0x03 0x45 0x60 0x04 0x63 0x03 0x78 0x00 0x02 0x05 0x01 0x03 0x78 0x00 0x00 0x05 0xD4 0x00 0x01 0x03 0x04 0x00 0x04 0x00 0x05 0x06 0x00 0x06 0x00 0x06 0x00 0x00 0x03 (0x45 0x60) 0x04 0x05 0x06 0x04 0x63 0x06 0x03
25、0x06 0x03 0x03 0x78 0x07 0x08 0x07 0x00 0x02 (0x05 0x01)右移 5点,下移一点 0x03 0x78 0x07 0x08 0x07 0x00 0x00 End of line 0x05 0xD4 0x0D 0x05 0x0D 0x05 0x0D 0x00 0x01 End of file紧跟在彩色表之后的是图象数据字节阵列。图象的每一扫描行由表示图象象素的连续的字节组成,每一行的字节数取决于图象的颜色数目和用象素表示的图象宽度。扫描行是由底向上存储的,这就是说,阵列中的第一个字节表示位图左下角的象素,而最后一个字节表示位图右上角的象素。(只针
26、对与倒向DIB,如果是正向 DIB,则扫描行是由顶向下存储的),倒向 DIB的原点在图像的左下角,而正向 DIB的原点在图像的左上角。同时,每一扫描行的字节数必需是 4的整倍数,也就是 DWORD对齐的。如果你想确保图像的扫描行 DWORD对齐,可使用下面的代码:(width*biBitCount)+31)5)2起始地址为:(如果该部分存在的话)sizeof(第一部分) + sizeof(第二部分) 读取位图文件的时候第一部分应该不变,需要根据第二部分的 0x000EH-0x0011H的值大小来确定第二部分的数据大小。整个区域的大小:N * 4 BYTES 4个字节依次表示 BGRA, 编程中
27、是 RGBA 这里是 little_Endian具体大小依赖很多数值起始地址为:VALUE(0x000AH - 0x000DH)整个区域的大小:具体每个像素的表示方法,依赖 0x001CH - 0x001DH每个像素的位数0x001EH - 0x0021H压缩方式0x002EH - 0x0031H颜色表大小0x001CH - 0x001DH 每个像素的位数biBitCount=1 表示位图最多有两种颜色,缺省情况下是黑色和白色,你也可以自己定义这两种颜色。图像信息头装调色板中将有两个调色板项,称为索引 0和索引 1。图象数据阵列中的每一位表示一个象素。如果一个位是 0,显示时就使用索引 0的
28、RGB值,如果位是 1,则使用索引 1的 RGB值。biBitCount=4 表示位图最多有 16种颜色。每个象素用 4位表示,并用这 4位作为彩色表的表项来查找该象素的颜色。例如,如果位图中的第一个字节为0x1F,它表示有两个象素,第一象素的颜色就在彩色表的第 2表项中查找,而第二个象素的颜色就在彩色表的第 16表项中查找。此时,调色板中缺省情况下会有 16个 RGB项。对应于索引 0到索引 15。biBitCount=8 表示位图最多有 256种颜色。每个象素用 8位表示,并用这 8位作为彩色表的表项来查找该象素的颜色。例如,如果位图中的第一个字节为 0x1F,这个象素的颜色就在彩色表的第 32表项中查找。此时,缺省情况下,调色板中会有 256个 RGB项,对应于索引 0到索引 255。
Copyright © 2018-2021 Wenke99.com All rights reserved
工信部备案号:浙ICP备20026746号-2
公安局备案号:浙公网安备33038302330469号
本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。