当前位置:文档之家› jpeg编解码过程详解海王博客园

jpeg编解码过程详解海王博客园

jpeg编解码过程详解海王博客园
jpeg编解码过程详解海王博客园

JPEG编解码过程详解- 海王- 博客园

JPEG(Joint Photographic Experts Group)是联合图像专家小组的英文缩写。它由国际电话与电报咨询委员会CCITT(The International Telegraph and Telephone Consultative Committee)与国际标准化组织ISO于1986年联合

成立的一个小组,负责制定静态数字图像的编码标准。

小组一直致力于标准化工作,开发研制出连续色调、多级灰度、静止图像的数字图像压缩编码方法,即JPEG

算法。JPEG算法被确定为国际通用标准,其适用范围广泛,除用于静态图像编码外,还推广到电视图像序列的帧

内图像压缩。而用JPEG算法压缩出来的静态图片文件称为JPEG文件,扩展名通常为*.jpg、*.jpe*.jpeg。

JPEG专家组开发了两种基本的压缩算法、两种数据编码方法、四种编码模式。具体如下:

压缩算法:

l 有损的离散余弦变换(Discrete Cosine Transform,DCT);l 无损的预测技术压缩。

数据编码方法:

l 哈夫曼编码;

l 算术编码;

编码模式:

l 基于DCT顺序模式:编/解码通过一次扫描完成;

l 基于DCT递进模式:编/解码需要多次扫描完成,扫描效果从粗糙到精细,逐级递进;

l 无损模式:基于DPCM,保证解码后完全精确恢复到原图像采样值;

l 层次模式:图像在多个空间多种分辨率进行编码,可以根据需要只对低分辨率数据作解码,放弃高分辨率信息。

在实际应用中,JPEG图像使用的是离散余弦变换、哈夫曼编码、顺序模式。

JPEG压缩编码算法的主要计算步骤如下:

(0) 8*8分块。

(1) 正向离散余弦变换(FDCT)。

(2) 量化(quantization)。

(3) Z字形编码(zigzag scan)。

(4) 使用差分脉冲编码调制(DPCM)对直流系数(DC)进行编码。

(5) 使用行程长度编码(RLE)对交流系数(AC)进行编码。

(6) 熵编码。

笔者在实践过程中查阅了大量的资料,发现大多数书籍资料和网上资料都是从编码角度分析JPEG的编/解码方式,

并且都只是介绍编码过程中的主要方法。所以,本文从解码角度详细分析JPEG的编/解码过程,并且加入许多笔

者实践过程中遇到的问题和解决方法,希望从另一个角度说明问题,以更好帮助读者结合其他资料解决问题。

不过,介绍解码过程之前,首先要了解JPEG文件中数据的存储格式。一、JPEG文件格式介绍

JPEG文件使用的数据存储方式有多种。最常用的格式称为JPEG文件交换格式(JPEG File Interchange Format,JFIF )。而JPEG文件大体上可以分成两个部分:标记码(Tag)和压缩数据。

标记码由两个字节构成,其前一个字节是固定值0xFF,后一个字节则根据不同意义有不同数值。在每个标记码之前

还可以添加数目不限的无意义的0xFF填充,也就说连续的多个0xFF可以被理解为一个0xFF,并表示一个标记码

的开始。而在一个完整的两字节的标记码后,就是该标记码对应的压缩数据流,记录了关于文件的诸种信息。

常用的标记有SOI、APP0、DQT、SOF0、DHT、DRI、SOS、EOI。

注意,SOI等都是标记的名称。在文件中,标记码是以标记代码形式出现。例如SOI的标记代码为0xFFD8

,即在JPEG文件中的如果出现数据0xFFD8,则表示此处为一个SOI标记。

本文附录列出一张完整的JPEG定义的标记表,供读者查阅。这里仅列出几个常用标记的标记代码、占用字

节长度和表示的意义。

l SOI,Start of Image,图像开始

u 标记代码2字节

固定值0xFFD8

l APP0,Application,应用程序保留标记0

u 标记代码2字节

固定值0xFFE0

u 包含9个具体字段:

①数据长度2字节①~

⑨9个字段的总长度

即不包括标记代码,但包括本字段

②标识符5字节固

定值0x4A46494600,即字符串“JFIF0”

③版本号2字节一般是0x0102,表示JFIF的版本号1.2

可能会有其他数值代表其他版本

④X和Y的密度单位1字节只有三个值可选

0:无单位;1:点数/英寸;2:点数/厘米

⑤X方向像素密度2字节取值范围未知

⑥Y方向像素密度2字节取值范围未知

⑦缩略图水平像素数目1字节取值范围未知

⑧缩略图垂直像素数目1字节取值范围未知

⑨缩略图RGB位图长度可能是3的倍数缩略图RGB位图数据

本标记段可以包含图像的一个微缩版本,存为24位的RGB 像素。如果没有微缩图像(这种情况更常见),则

字段⑦“缩略图水平像素数目”和字段⑧

“缩略图垂直像素数目”的值均为0。

l APPn,Application,应用程序保留标记n,其中n=1~15(任选)

u 标记代码2字节

固定值0xFFE1~0xFFF

u 包含2个具体字段:

①数据长度2字节①~

②2个字段的总长度

即不包括标记代码,但包括本字段

②详细信息数据长度-2字节内容不定

例如,Adobe Photoshop生成的JPEG图像中就用了APP1和APP13两个标记段分别存储了一幅图像的副本。

l DQT,Define Quantization Table,定义量化表

u 标记代码2字节

固定值0xFFDB

u 包含9个具体字段:

①数据长度2字节字段①和多个字段②的总长度

即不包括标记代码,但包括本字段

②量化表数据长度-2字节

a) 精度及量化表ID 1字节高4位:

精度,只有两个可选值

0:8位;1:16位

低4位:量化表ID,取值范围为0~3

b) 表项(64×(精度+1))字节

例如8位精度的量化表

其表项长度为64×(0+1)=64字节

本标记段中,字段②可以重复出现,表示多个量化表,但最多只能出现4次。

l SOF0,Start of Frame,帧图像开始

u 标记代码2字节固定值

0xFFC0

u 包含9个具体字段:

①数据长度2字节①~⑥六个字段的总长度

即不包括标记代码,但包括本字段

②精度1字节每个数据样本的位

通常是8位,一般软件都不支持12位和16位

③图像高度2字节图像高度(单位:像素),如果不支持DNL 就必须>0

④图像宽度2字节图像宽度(单位:像素),如果不支持DNL 就必须>0

⑤颜色分量数1字节只有3个数值可选

1:灰度图;3:YCrCb或YIQ;4:CMYK

而JFIF中使用YCrCb,故这里颜色分量数恒为3

⑥颜色分量信息颜色分量数×3字节(通常为9字节)

a) 颜色分量ID 1字节

b) 水平/垂直采样因子1字节高4位:水平采样因子

低4位:垂直采样因子

(曾经看到某资料把这两者调转了)

c) 量化表1字节

当前分量使用的量化表的ID本标记段中,字段⑥应该重复出现,有多少个颜色分量(字段⑤),就出现多少次(一般为3次)。

l DHT,Difine Huffman Table,定义哈夫曼表

u 标记代码2字节

固定值0xFFC4

u 包含2个具体字段:

①数据长度2字节

字段①和多个字段②的总长度

即不包括标记代码,但包括本字段

②哈夫曼表数据长度-2字节

a) 表ID和表类型1字节

高4位:类型,只有两个值可选

0:DC直流;1:AC交流

低4位:哈夫曼表ID,

注意,DC表和AC表分开编码

b) 不同位数的码字数量16字节

c) 编码内容16个不同位数的码字数量之和(字节)本标记段中,字段②可以重复出现(一般4次),也可以致出现1次。例如,Adobe Photoshop 生成

的JPEG图片文件中只有1个DHT标记段,里边包含了4个哈夫曼表;而Macromedia Fireworks生成

的JPEG图片文件则有4个DHT标记段,每个DHT标记段只有一个哈夫曼表。

l DRI,Define Restart Interval,定义差分编码累计复位的间隔

u 标记代码2字节

固定值0xFFDD

u 包含2个具体字段:

①数据长度2字节

固定值0x0004,①~②两个字段的总长度

即不包括标记代码,但包括本字段

②MCU块的单元中的重新开始间隔

2字节设其值为n,则表示每n个MCU块就有一个

RSTn标记。第一个标记是RST0,第二个是

RST1等,RST7后再从RST0重复。

如果没有本标记段,或间隔值为0时,就表示不存在重开始间隔和标记RST

l SOS,Start of Scan,扫描开始12字节

u 标记代码2字节固定值0xFFDA

u 包含2个具体字段:

①数据长度2字节①~④两个字段的总长度

即不包括标记代码,但包括本字段

②颜色分量数1字节应该和SOF 中的字段⑤的值相同,即:

1:灰度图是;3:YCrCb或YIQ;4:CMYK。

而JFIF中使用YCrCb,故这里颜色分量数恒为3

③颜色分量信息

a) 颜色分量ID 1字节

b) 直流/交流系数表号1字节高4位:直流分量使用的哈夫曼树编号

低4位:交流分量使用的哈夫曼树编号

④压缩图像数据

a)谱选择开始1字节

固定值0x00

b)谱选择结束1字节

固定值0x3F

c)谱选择1字节

在基本JPEG中总为00

本标记段中,字段③应该重复出现,有多少个颜色分量(字段②),就出现多少次(一般为3次)。

本段结束后,紧接着就是真正的图像信息了。图像信息直至遇到一个标记代码就自动结束,一般就是以EOI标记表示结束。

l EOI,End of Image,图像结束2字节

u 标记代码2字节固定值

0xFFD9

这里补充说明一下,由于在JPEG文件中0xFF具有标志性的意思,所以在压缩数据流(真正的图像信息)中

出现0xFF,就需要作特别处理。具体方法是,在数据0xFF 后添加一个没有意义的0x00。换句话说,如果在图像数

据流中遇到0xFF,应该检测其紧接着的字符,如果是

1)0x00,则表示0xFF是图像流的组成部分,需要进行译码;2)0xD9,则与0xFF组成标记EOI,则图像流结束,同时图像文件结束;

3)0xD0~0xD7,则组成RSTn标记,则要忽视整个RSTn标记,即不对当前0xFF和紧接的0xDn两个字节进行译码,并按RST标记的规则调整译码变量;

3)0xFF,则忽视当前0xFF,对后一个0xFF再作判断;

4)其他数值,则忽视当前0xFF,并保留紧接的此数值用于译码。

二、JPEG解码过程详解

下面来详细讲述JPEG文件的解码过程。

1.读入文件的相关信息

按照上述的JPEG文件数据存储方式,把要解码的文件的相关信息一一读出,为接下来的解码工作做好准备。

参考方法是,设计一系列的结构体对应各个标记,并存储标记内表示的信息。其中图像长宽、多个量化

表和哈夫曼表、水平/垂直采样因子等多项信息比较重要。以下给出读取过程中的两个问题。

1)整个文件的大体结构

JFIF格式的JPEG文件(*.jpg)的一般顺序为:

SOI(0xFFD8)

APP0(0xFFE0)

[APPn(0xFFEn)]可选

DQT(0xFFDB)

SOF0(0xFFC0)

DHT(0xFFC4)

SOS(0xFFDA)

压缩数据

EOI(0xFFD9)

2)字的高低位问题

JPEG文件格式中,一个字(16位)的存储使用的是Motorola 格式, 而不是Intel 格式。也就是说, 一个字的

高字节(高8位)在数据流的前面, 低字节(低8位)在数据流的后面,与平时习惯的Intel格式不一样。.

3)读出哈夫曼表数据

a)理论说明

在标记段DHT内,包含了一个或者多个的哈夫曼表。对于单一个哈夫曼表,应该包括了三部分:

l 哈夫曼表ID和表类型

这个字节的值为一般只有四个0x00、0x01、0x10、0x11。0x00表示DC直流0号表;

0x01表示DC直流1号表;

0x10表示AC交流0号表;

0x11表示AC交流1号表。

l 不同位数的码字数量

JPEG文件的哈夫曼编码只能是1~16位。这个字段的16个字节分别表示1~16位的编码码字在哈夫曼树中的个数。

l 编码内容

这个字段记录了哈夫曼树中各个叶子结点的权。所以,上一字段(不同位数的码字数量)的16个数

值之和就应该是本字段的长度,也就是哈夫曼树中叶子结点个数。

b)举例说明

以下面一段哈夫曼表数据举例说明(数据全部以16进制表

示):

11 00 02 02 00 05 01 06 01 00 00 00 00 00 00 00 00

00 01 11 02 21 03 31 41 12 51 61 71 81 91 22 13 32红色部分(第1字节)为哈夫曼表ID和表类型,其值0x11表示此部分数据描述的是AC交流1号表。

蓝色部分(2~17字节)为不同位数的码字的数量。这16个数值实际意义为:没有1位和4

位的哈夫曼码字;2位和3位的码字各有2个;5位码字有5个;6位和8位码字各有1个;7位码字各有6个;没有9

位或以上的码字。

绿色部分(18~34字节)为编码内容。由蓝色部分数据知道,此哈夫曼树有0+2+2+0+5+1+6+1=17个叶子结点,

即本字段应该有17个字节。这段数据表示17个叶子结点按从小到大排列,其权值依次为0、1、11、2、21、3、31、41……

4)建立哈夫曼树

a)理论说明

在读出哈夫曼表的数据后,就要建立哈夫曼树。具体方法为:1)第一个码字必定为0。

如果第一个码字位数为1,则码字为0;

如果第一个码字位数为2,则码字为00;

如此类推。

2)从第二个码字开始,

如果它和它前面的码字位数相同,则当前码字为它前面的码字加1;

如果它的位数比它前面的码字位数大,则当前码字是前面的码字加1后再在后边添若干个0,直至满足位数长度为止。b)举例说明

继续以上边的例子说明问题。

n 由于没有1位的码字,所以第一个码字的位数为2,即码字为00;

n 由于2位的码字有两个,所以第二个码字位数仍为2,即码字为00+1=01;

n 第三个码字为3位,比第二个码字长1位,所以第三个码字为:01+1=10,然后再添1个“0”,得100;

n ……

如此类推,最后得到这个哈夫曼树如下:序号

码字长度

码字权值1 2

00

0x002 2

01

0x013

3 100 0x11

4 3 101 0x02

5 5

11000 0x216 5 11001 0x037 5 11010

JPEG图像的编解码实现

毕业论文论文题目(中文)JPEG图像的编解码实现 论文题目(外文)Encoding and decoding of JPEG image

摘要 JPEG是一种十分先进的图像压缩技术,它用有损压缩方式去除冗余的图像数据,在获得极高的压缩率的同时能展现十分丰富生动的图像。本文设计和实现一个JPEG图像编解码器来进行图像转换,利用离散余弦变换、熵编码、Huffman编码等图像压缩技术将BMP图像转换成JPEG图像,即进行图像的压缩。验证JPEG压缩编码算法的可行性。通过比对图像压缩前后实际效果,探讨压缩比,峰值信噪比等评价图像数据压缩程度及压缩质量的关键参数,对JPEG 压缩编码算法的实用性和优越性进行研究。 关键词:JPEG;编码;解码;图像压缩

Abstract JPEG is a very advanced image compression technology, it uses lossy compression to remove redundant image data, in obtaining a very high compression rate can show a very rich and vivid image. In this project, a JPEG image codec is designed and implemented to transform image, using discrete cosine transform, entropy coding, Huffman coding and other image compression techniques to convert BMP images into JPEG images. Verifies the feasibility of JPEG compression coding algorithm. Through the comparison of the actual effect of image compression, the key parameters of compression ratio, peak Snr, and the compression quality of image data are discussed, and the practicability and superiority of JPEG compression coding algorithm are researched. Key words: JPEG; encoding; decoding; image compression

BMP图像格式详解

BMP格式图像文件详析 首先请注意所有的数值在存储上都是按“高位放高位、低位放低位的原则”,如12345678h放在存储器中就是7856 3412)。下图是导出来的开机动画的第一张图加上文件头后的16进制数据,以此为例进行分析。T408中的图像有点怪,图像是在电脑上看是垂直翻转的。在分析中为了简化叙述,以一个字(两个字节为单位,如424D就是一个字)为序号单位进行,“h”表示是16进制数。 424D 4690 0000 0000 0000 4600 0000 2800 0000 8000 0000 9000 0000 0100*1000 0300 0000 0090 0000 A00F 0000 A00F 0000 0000 0000 0000 0000*00F8 0000 E007 0000 1F00 0000 0000 0000*02F1 84F1 04F1 84F1 84F1 06F2 84F1 06F2 04F2 86F2 06F2 86F2 86F2 ...... BMP文件可分为四个部分:位图文件头、位图信息头、彩色板、图像数据阵列,在上图中已用*分隔。 一、图像文件头 1)1:图像文件头。424Dh=’BM’,表示是Windows支持的BMP 格式。

2)2-3:整个文件大小。4690 0000,为00009046h=36934。 3)4-5:保留,必须设置为0。 4)6-7:从文件开始到位图数据之间的偏移量。4600 0000,为00000046h=70,上面的文件头就是35字=70字节。 5)8-9:位图图信息头长度。 6)10-11:位图宽度,以像素为单位。8000 0000,为00000080h=128。 7)12-13:位图高度,以像素为单位。9000 0000,为00000090h=144。 8)14:位图的位面数,该值总是1。0100,为0001h=1。 二、位图信息头 9)15:每个像素的位数。有1(单色),4(16色),8(256色),16(64K色,高彩色),24(16M色,真彩色),32(4096M色,增强

多媒体常见五种图像格式详解

多媒体常见五种图像格式详解 【摘要】:自此互联网以及PC的飞速发展,我们的日常生活已经高度的信息化了,多媒体应用技术也不断地深入到我们的生活中。图像、视频这些最直观的信息无时无刻的充斥着我们的眼球。这时我们需要在繁多的图像种类中辨别以及选择我们所要用到的图像种类来准确完整地传达信息。本文通过对多媒体常见的五种图像格式的详细介绍从而可以深刻的了解图像的格式特点及其应用。 【关键词】:多媒体互联网常见图像格式 一.引言 现在的互联网和多媒体技术的高速发展,多媒体的图形图像以其蕴含的信息量优美直观地显现于人们的视网膜中,给人们以绚丽丰富的视觉效果。但是多媒体图像又因其种类繁多而不能被人们所一一了解,甚至是最常见的图像格式也只是对其格式名略有耳闻。那么,本文将对多媒体常见的图像格式做一番简述,介绍它们的特性和不同点以及其实用性。 二.五种图像格式详解 1、BMP图像 BMP图像,即通常所说的位图(Bitmap),是最早应用于Windows操作系统,也是Windows操作系统中的标准图像文件格式,在Windows环境中运行的图形图像软件都支持BMP图像格式。因而这种格式的图像是最常见最简单的,像我们常用的桌面壁纸一般都是BMP格式图像。 BMP图像文件的文件结构一般认为包括了三部分:表头、调色板和图像像素数据,再细分的话,表头部分有分文件头和位图信息头。表头长度为54个字节,内容包括了BMP文件的类型、文件的大小、位图文件的保留字、位图数据距文件头的偏移量以及位图的尺寸等信息。调色板中有若干个表项相对应地定义一种颜色,从而说明位图中的颜色。只有全彩色BMP图像文件内没有调色板数据,其余不超过256种颜色的图像文件都必须设定调色板信息(电视节目制作中的图形图像格式)。图像像素数据每一个点代表一个像素值,它有着比较独特的记录方式:位图中的像素值是以在扫描行内从左到右、扫描行之间从下到上这样的顺序记录的。 BMP图像文件有下列3个特点:

JPEG压缩编码标准

JPEG压缩编码标准 JPEG是联合图象专家组(Joint Picture Expert Group)的英文缩写,是国际标准化组织(ISO)和CCITT联合制定的静态图象的压缩编码标准。和相同图象质量的其它常用文件格式(如GIF,TIFF,PCX)相比,JPEG是目前静态图象中压缩比最高的。我们给出具体的数据来对比一下。例图采用Windows95目录下的,原图大小为640*480,256色。用工具SEA将其分别转成24位色BMP、24位色JPEG、GIF(只能转成256色)压缩格式、24位色TIFF压缩格式、24位色TGA压缩格式。得到的文件大小(以字节为单位)分别为:921,654,17,707,177,152,923,044,768,136。可见JPEG比其它几种压缩比要高得多,而图象质量都差不多(JPEG处理的颜色只有真彩和灰度图)。 正是由于JPEG的高压缩比,使得它广泛地应用于多媒体和网络程序中,例如HTML语法中选用的图象格式之一就是JPEG(另一种是GIF)。这是显然的,因为网络的带宽非常宝贵,选用一种高压缩比的文件格式是十分必要的。 JPEG有几种模式,其中最常用的是基于DCT变换的顺序型模式,又称为基线系统(Baseline),以下将针对这种格式进行讨论。 的压缩原理 JPEG的压缩原理其实上面介绍的那些原理的综合,博采众家之长,这也正是JPEG有高压缩比的原因。其编码器的流程为: 图 JPEG编码器流程 解码器基本上为上述过程的逆过程:

图解码器流程 8×8的图象经过DCT变换后,其低频分量都集中在左上角,高频分量分布在右下角(DCT变换实际上是空间域的低通滤波器)。由于该低频分量包含了图象的主要信息(如亮度),而高频与之相比,就不那么重要了,所以我们可以忽略高频分量,从而达到压缩的目的。如何将高频分量去掉,这就要用到量化,它是产生信息损失的根源。这里的量化操作,就是将某一个值除以量化表中对应的值。由于量化表左上角的值较小,右上角的值较大,这样就起到了保持低频分量,抑制高频分量的目的。JPEG使用的颜色是YUV格式。我们提到过,Y分量代表了亮度信息,UV分量代表了色差信息。相比而言,Y分量更重要一些。我们可以对Y采用细量化,对UV采用粗量化,可进一步提高压缩比。所以上面所说的量化表通常有两张,一张是针对Y的;一张是针对UV的。 上面讲了,经过DCT变换后,低频分量集中在左上角,其中F(0,0)(即第一行第一列元素)代表了直流(DC)系数,即8×8子块的平均值,要对它单独编码。由于两个相邻的8×8子块的DC系数相差很小,所以对它们采用差分编码DPCM,可以提高压缩比,也就是说对相邻的子块DC系数的差值进行编码。8×8的其它63个元素是交流(AC)系数,采用行程编码。这里出现一个问题:这63个系数应该按照怎么样的顺序排列为了保证低频分量先出现,高频分量后出现,以增加行程中连续“0”的个数,这63个元素采用了“之”字型(Zig-Zag)的排列方法,如图所示。 图 Zig-Zag 这63个AC系数行程编码的码字用两个字节表示,如图所示。

JPEG图像格式详解

JPEG图像格式详解 JPEG压缩简介 ------------- 1.色彩模型 JPEG的图片使用的是YCrCb颜色模型,而不是计算机上最常用的RGB.关于色彩模型,这里不多阐述.只是说明,YCrCb模型更适合图形压缩.因为人眼对图片上的亮度Y的变化远比色度C的变化敏感.我们完全可以每个点保存一个8bit的亮度值,每2x2个点保存一个Cr Cb值,而图象在肉眼中的感觉不会起太大的变化.所以,原来用RGB模型,4个点需要4x3=12字节.而现在仅需要4+2=6字节;平均每个点占12bit.当然JPEG格式里允许每个点的C值都记录下来;不过MPEG里都是按12bit一个点来存放的,我们简写为YUV12. [R G B]->[Y Cb Cr]转换 ------------------------- (R,G,B都是8bit unsigned) |Y||0.2990.5870.114||R||0| |Cb|=|-0.1687-0.33130.5|*|G|+|128| |Cr||0.5-0.4187-0.0813||B||128| Y=0.299*R+0.587*G+0.114*B(亮度) Cb=-0.1687*R-0.3313*G+0.5*B+128 Cr=0.5*R-0.4187*G-0.0813*B+128 [Y,Cb,Cr]->[R,G,B]转换 ------------------------- R=Y+ 1.402*(Cr-128) G=Y-0.34414*(Cb-128)-0.71414*(Cr-128) B=Y+ 1.772*(Cb-128) 一般,C值(包括Cb Cr)应该是一个有符号的数字,但这里被处理过了,方法是加上了128.JPEG里的数据都是无符号8bit的. 2.DCT(离散余弦变换) JPEG里,要对数据压缩,先要做一次DCT变换.DCT变换的原理,涉及到数学知识,这里我们不必深究.反正和傅立叶变换(学过高数的都知道)是差不多了.经过

jpeg编解码过程详解海王博客园

JPEG编解码过程详解- 海王- 博客园 JPEG(Joint Photographic Experts Group)是联合图像专家小组的英文缩写。它由国际电话与电报咨询委员会CCITT(The International Telegraph and Telephone Consultative Committee)与国际标准化组织ISO于1986年联合 成立的一个小组,负责制定静态数字图像的编码标准。 小组一直致力于标准化工作,开发研制出连续色调、多级灰度、静止图像的数字图像压缩编码方法,即JPEG 算法。JPEG算法被确定为国际通用标准,其适用范围广泛,除用于静态图像编码外,还推广到电视图像序列的帧 内图像压缩。而用JPEG算法压缩出来的静态图片文件称为JPEG文件,扩展名通常为*.jpg、*.jpe*.jpeg。 JPEG专家组开发了两种基本的压缩算法、两种数据编码方法、四种编码模式。具体如下: 压缩算法: l 有损的离散余弦变换(Discrete Cosine Transform,DCT);l 无损的预测技术压缩。 数据编码方法: l 哈夫曼编码; l 算术编码; 编码模式:

l 基于DCT顺序模式:编/解码通过一次扫描完成; l 基于DCT递进模式:编/解码需要多次扫描完成,扫描效果从粗糙到精细,逐级递进; l 无损模式:基于DPCM,保证解码后完全精确恢复到原图像采样值; l 层次模式:图像在多个空间多种分辨率进行编码,可以根据需要只对低分辨率数据作解码,放弃高分辨率信息。 在实际应用中,JPEG图像使用的是离散余弦变换、哈夫曼编码、顺序模式。 JPEG压缩编码算法的主要计算步骤如下: (0) 8*8分块。 (1) 正向离散余弦变换(FDCT)。 (2) 量化(quantization)。 (3) Z字形编码(zigzag scan)。 (4) 使用差分脉冲编码调制(DPCM)对直流系数(DC)进行编码。 (5) 使用行程长度编码(RLE)对交流系数(AC)进行编码。 (6) 熵编码。 笔者在实践过程中查阅了大量的资料,发现大多数书籍资料和网上资料都是从编码角度分析JPEG的编/解码方式,

JPEG图像格式详解

JPEG图像格式详解 JPEG 压缩简介 ------------- 1. 色彩模型 JPEG 的图片使用的是 YCrCb 颜色模型, 而不是计算机上最常用的 RGB. 关于色彩模型, 这里不多阐述. 只是说明, YCrCb 模型更适合图形压缩. 因为人眼对图片上的亮度 Y 的变化远比色度 C 的变化敏感. 我们完全可以每个点保存一个 8bit 的亮度值, 每 2x2 个点保存一个 Cr Cb 值, 而图象在肉眼中的感觉不会起太大的变化. 所以, 原来用 RGB 模型, 4 个点需要 4x3=12 字节. 而现在仅需要 4+2=6 字节; 平均每个点占 12bit. 当然 JPEG 格式里允许每个点的 C 值都记录下来; 不过 MPEG 里都是按 12bit 一个点来存放的, 我们简写为 YUV12. [R G B] -> [Y Cb Cr] 转换 ------------------------- (R,G,B 都是 8bit unsigned) | Y | | 0.299 0.587 0.114 | | R | | 0 | | Cb | = |- 0.1687 - 0.3313 0.5 | * | G | + |128| | Cr | | 0.5 - 0.4187 - 0.0813| | B | |128| Y = 0.299*R + 0.587*G + 0.114*B (亮度) Cb = - 0.1687*R - 0.3313*G + 0.5 *B + 128 Cr = 0.5 *R - 0.4187*G - 0.0813*B + 128 [Y,Cb,Cr] -> [R,G,B] 转换 ------------------------- R = Y + 1.402 *(Cr-128) G = Y - 0.34414*(Cb-128) - 0.71414*(Cr-128) B = Y + 1.772 *(Cb-128) 一般, C 值 (包括 Cb Cr) 应该是一个有符号的数字, 但这里被处理过了, 方法是加上了 128. JPEG 里的数据都是无符号 8bit 的. 2. DCT (离散余弦变换) JPEG 里, 要对数据压缩, 先要做一次 DCT 变换. DCT 变换的原理, 涉及到数学知识, 这里我们不必深究. 反正和傅立叶变换(学过高数的都知道) 是差不多了. 经过这个变换, 就把图片里点和点间的规律呈现出来了, 更方便压缩.JPEG 里是对每 8x8

matlab压缩JPEG实验及程序

实验四JPEG压缩 一、实验原理 1、数据分块 对图像进行编码前,将每个分量图像分割成不重叠的8×8像素块,每一个8×8像素块称为一个数据单元(DU)。在彩色图像中,JPEG分别压缩图像的每个彩色分量。虽然JPEG可以压缩通常的红绿蓝分量,但在YCbCr 空间的压缩效果会更好。这是因为人眼对色彩的变化不如对亮度的变化敏感,因而对色彩的编码可以比对亮度的编码粗糙些,这主要体现在不同的采样频率和量化精度上。因此,编码前一般先将图像从RGB空间转换到YCbCr 空间,再把各分量图像分割成8×8数据块。 在对图像采样时,可以采用不同的采样频率,这种技术称为二次采样。 由于亮度比色彩更重要,因而对Y分量的采样频率可高于对Cb、Cr的采样频率,这样有利于节省存储空间。常用的采样方案有YUV422和YUV411。 把采样频率最低的分量图像中一个DU所对应的像区上覆盖的所有各分量上的DU按顺序编组为一个最小编码单元(MCU)。对灰度图像而言,只有一个Y分量,MCU就是一个数据单元。而对彩色图像而言,以4:1:1的采样方案为例,则一个MCU由4个Y分量的DU、1个Cb分量的DU和1个Cr 分量的DU组成。 2、DCT处理 图像数据块分割后,即以MCU为单位顺序将DU进行二维离散余弦变换。 对以无符号数表示的具有P位精度的输入数据,在DCT前要减去2P-1,转换成有符号数,而在IDCT后,应加上2P-1,转换成无符号数。对每个8×8的数据块DU进行DCT后,得到的64个系数代表了该图像块的频率成分,其中低频分量集中在左上角,高频分量分布在右下角。系数矩阵左上角的叫做直流(DC)系数,它代表了该数据块的平均值,其余63个叫交流(AC)系数。 3、系数量化 在DCT处理中得到的64个系数中,低频分量包含了图像亮度等主要信息。在从空间域到频域的变换中,图像中的缓慢变化比快速变化更易引起人眼的注意,所以在重建图像时,低频分量的重要性高于高频分量。因而在编码时可以忽略高频分量,从而达到压缩的目的,这也是量化的根据和目

图像格式详细解析

YUV格式详解 1.什么是RGB? RGB是红绿蓝三原色的意思,R=Red、G=Green、B=Blue。 2.什么是YUV/YCbCr/YPbPr? 亮度信号经常被称作Y,色度信号是由两个互相独立的信号组成。视颜色系统和格式不同,两种色度信号经常被称作U和V或Pb和Pr或Cb和Cr。这些都是由不同的编码格式所产生的,但是实际上,他们的概念基本相同。在DVD中,色度信号被存储成Cb和Cr (C代表颜色,b代表蓝色,r代表红色)。 3.什么是4:4:4、4:2:2、4:2:0? 在最近十年中,视频工程师发现人眼对色度的敏感程度要低于对亮度的敏感程度。在生理学中,有一条规律,那就是人类视网膜上的视网膜杆细胞要多于视网膜锥细胞,说得通俗一些,视网膜杆细胞的作用就是识别亮度,而视网膜锥细胞的作用就是识别色度。所以,你的眼睛对于亮和暗的分辨要比对颜色的分辨精细一些。正是因为这个,在我们的视频存储中,没有必要存储全部颜色信号。既然眼睛看不见,那为什么要浪费存储空间(或者说是金钱)来存储它们呢? 像Beta或VHS之类的消费用录像带就得益于将录像带上的更多带宽留给黑—白信号(被称作“亮度”),将稍少的带宽留给彩色信号(被称作“色度”)。 在MPEG2(也就是DVD使用的压缩格式)当中,Y、Cb、Cr信号是分开储存的(这就是为什么分量视频传输需要三条电缆)。其中Y信号是黑白信号,是以全分辨率存储的。但是,由于人眼对于彩色信息的敏感度较低,色度信号并不是用全分辨率存储的。 色度信号分辨率最高的格式是4:4:4,也就是说,每4点Y采样,就有相对应的4点Cb和4点Cr。换句话说,在这种格式中,色度信号的分辨率和亮度信号的分辨率是相同的。这种格式主要应用在视频处理设备内部,避免画面质量在处理过程中降低。当图像被存储到Master Tape,比如D1或者D5,的时候,颜色信号通常被削减为4:2:2。

JPEG编码过程详解

JPEG(Joint Photographic Experts Group)是联合图像专家小组的英文缩写。它由国际电话与电报咨询委员会 CCITT(The International Telegraph and Telephone Consultative Committee)与国际标准化组织ISO于1986年联合 成立的一个小组,负责制定静态数字图像的编码标准。 小组一直致力于标准化工作,开发研制出连续色调、多级灰度、静止图像的数字图像压缩编码方法,即JPEG 算法。JPEG算法被确定为国际通用标准,其适用范围广泛,除用于静态图像编码外,还推广到电视图像序列的帧 内图像压缩。而用JPEG算法压缩出来的静态图片文件称为JPEG文件,扩展名通常为*.jpg、*.jpe*.jpeg。 JPEG专家组开发了两种基本的压缩算法、两种数据编码方法、四种编码模式。具体如下: 压缩算法: ● 有损的离散余弦变换(Discrete Cosine Transform,DCT); ● 无损的预测技术压缩。 数据编码方法: ● 哈夫曼编码; ● 算术编码; 编码模式: ● 基于DCT顺序模式:编/解码通过一次扫描完成; ● 基于DCT递进模式:编/解码需要多次扫描完成,扫描效果从粗糙到精细, 逐级递进; ● 无损模式:基于DPCM,保证解码后完全精确恢复到原图像采样值; ● 层次模式:图像在多个空间多种分辨率进行编码,可以根据需要只对低 分辨率数据作解码,放弃高分辨率信息。 在实际应用中,JPEG图像使用的是离散余弦变换、哈夫曼编码、顺序模式。JPEG压缩编码算法的主要计算步骤如下: (0) 8*8分块。 (1) 正向离散余弦变换(FDCT)。 (2) 量化(quantization)。 (3) Z字形编码(zigzag scan)。 (4) 使用差分脉冲编码调制(DPCM)对直流系数(DC)进行编码。 (5) 使用行程长度编码(RLE)对交流系数(AC)进行编码。 (6) 熵编码。 笔者在实践过程中查阅了大量的资料,发现大多数书籍资料和网上资料都是从编码角度分析JPEG的编/解码方式, 并且都只是介绍编码过程中的主要方法。所以,本文从解码角度详细分析JPEG的编/解码过程,并且加入许多笔

一种基于MATLAB的JPEG图像压缩具体实现方法

一种基于MATLAB的JPEG图像压缩具体实现方法 说明:该方法主要是对FPGA硬件实现编码的一个验证,MATLAB处理时尽量选择了简单化和接近硬件实现需要。 JPEG编码解码流程:BMP图像输入、8*8分块、DCT变换、量化、Zig_Zag 扫描、获取DC/AC系数中间格式、Huffman熵编码、DC/AC系数Huffman熵解码,反zig_zag扫描、反量化、反DCT变换、8*8组合、解码图像显示。 下面根据具体代码解释实现过程。 1.BMP图像输入 A=imread('messi_b.bmp'); %读取BMP图像矩阵 R=int16(A(:,:,1))-128; %读取RGB矩阵,由于DCT时输入为正负输入, G=int16(A(:,:,2))-128; %使得数据分布围-127——127 B=int16(A(:,:,3))-128; 通过imread函数获取BMP图像的R、G、B三原色矩阵,因为下一步做DCT 转换,二DCT函数要求输入为正负值,所以减去128,使得像素点分布围变为-127~127,函数默认矩阵A的元素为无符号型(uint8),所以如果直接相减差值为负时会截取为0,所以先用int16将像素点的值转为带符号整数。网上很多都提到了第一步的YUV转换,但是由于MATLAB在实验时YUV转换后色差失真比较严重,这里没有进行YUV转换。个人理解为YUV转换后经过非R/G/B原理显示器显示效果可能会比较好,或者如果图像有色差可以选择YUV调整。为了方便,读入的图像像素为400*296,是8*8的50*37倍,所以代码里没有进行8*8的整数倍调整。 2. 8*8分块 R_8_8=R(1:8,1:8);%取出一个8*8块 这里以R色压缩解码为例,后边解释均为R色编码解码过程,最后附全部代码。R_8_8为: 3.DCT变换 R_DCT=dct2(R_8_8); 使用MATLAB函数dct2进行DCT变换,也可使用DCT变换矩阵相乘的方法,即R_DCT=A* R_8_8*A T,其中A为DCT变换矩阵。R_DCT为:

医学图像格式分析与转换

医学图像格式分析与转换 本文分为三个部分——医学图像及其组成、医学图像格式和医学图像的格式转换。本文希望通过对深度学习的相关知识的介绍,最终达到医学图像分析的目的。 医学图像及其组成 由Michele Larobina和Loredana Murino发表的论文,对本文即将展开的讨论来说是一个很好的信息参考。Michele Larobina和Loredana Murino二人是意大利“生物架构和生物成像协会”(IBB)的成员。IBB是意大利“国家研究委员会”的组成部分,同时也是意大利最大的公共研究机构。我们的另一个参考信息资源是一篇题为《Working with the DICOM and NIfTI data standards in R》的论文。 ?什么是医学图像? 医学图像是反映解剖区域内部结构或内部功能的图像,它是由一组图像元素——像素(2D)或立体像素(3D)——组成的。医学图像是由采样或重建产生的离散性图像表征,它能将数值映射到不同的空间位置上。像素的数量是用来描述某一成像设备下的医学成像的,同时也是描述解剖及其功能细节的一种表达方式。像素所表达的具体数值是由成像设备、成像协议、影像重建以及后期加工所决定的。 ?医学图像的组成

医学图像组成医学图像有四个关键成分——像素深度、光度表示、元数据和像素数据。这些成分与图像大小和图像分辨率有关。 图像深度(又称比特深度或颜色深度)是用来编码每个像素信息的比特数。比如说,一个8比特的光栅可以有256个从0到255数值不等的图像深度。 “光度表示”解释了像素数据如何以正确的图像格式(单色或彩色图片)显示。为了说明像素数值中是否存在色彩信息,我们将引入“每像素采样数”的概念。单色图像只有一个“每像素采样”,而且图像中没有色彩信息。图像是依靠由黑到白的灰阶来显示的,灰阶的数目很明显取决于用来储存样本的比特数。在这里,灰阶数与像素深度是一致的。医疗放射图像,比如CT 图像和磁共振(MR)图像,是一个灰阶的“光度表示”。而核医学图像,比如正电子发射断层图像(PET)和单光子发射断层图像(SPECT),通常都是以彩色映射或调色板来显示的。 “元数据”是用于描述图形象的信息。它可能看起来会比较奇怪,但是在任何一个文件格式中,除了像素数据之外,图像还有一些其他的相关信息。这样的图像信息被称为“元数据”,它通常以“数据头”的格式被储存在文件的开头,涵盖了图像矩阵维度、空间分辨率、像素深度和光度表示等信息。

JPEG图像压缩原理

JPEG编码 JPEG是联合图象专家组(Joint Picture Expert Group)的英文缩写,是国际标准化组织(ISO)和CCITT联合制定的静态图象的压缩编码标准。和相同图象质量的其它常用文件格式(如GIF,TIFF,PCX)相比,JPEG是目前静态图象中压缩比最高的。我们给出具体的数据来对比一下。例图采用Windows95目录下的Clouds.bmp,原图大小为640*480,256色。用工具SEA(version1.3)将其分别转成24位色BMP、24位色JPEG、GIF(只能转成256色)压缩格式、24位色TIFF压缩格式、24位色TGA压缩格式。得到的文件大小(以字节为单位)分别为:921,654,17,707,177,152,923,044,768,136。可见JPEG比其它几种压缩比要高得多,而图象质量都差不多(JPEG处理的颜色只有真彩和灰度图)。 正是由于JPEG的高压缩比,使得它广泛地应用于多媒体和网络程序中,例如HTML语法中选用的图象格式之一就是JPEG(另一种是GIF)。这是显然的,因为网络的带宽非常宝贵,选用一种高压缩比的文件格式是十分必要的。 JPEG有几种模式,其中最常用的是基于DCT变换的顺序型模式,又称为基线系统(Baseline),以下将针对这种格式进行讨论。 1.JPEG的压缩原理 JPEG的压缩原理其实上面介绍的那些原理的综合,博采众家之长,这也

正是JPEG有高压缩比的原因。其编码器的流程为: 图9.3 JPEG编码器流程 解码器基本上为上述过程的逆过程: 图9.4 解码器流程 DCT 下面对正向离散余弦变换(FDCT)变换作几点说明。 (1)对每个单独的彩色图像分量,把整个分量图像分成8×8的图像块,如图所示,并作为两维离散余弦变换DCT的输入。通过DCT变换,把能量集中在少数几个系数上。 (2)DCT变换使用下式计算: 它的逆变换使用下式计算:

BMP图像格式分析

BMP图像格式分析 BMP图像文件格式是微软公司为其Windows环境设置的标准图像格式,而且 Windows系统软件中还同时内含了一系列支持BMP图像处理的API函数,随着Windows 在世界范围内的不断普及,BMP文件格式无疑也已经成为PC机上的流行图像文件格式。它的主要特点可以概括为:文件结构与PCX文件格式类似,每个文件只能存放一幅图像;图像数据是否采用压缩方式存放,取决于文件的大小与格式,即压缩处理成为图像文件的一个选项,用户可以根据需要进行选择。其中,非压缩格式是BMP图像文件所采用的一种通用格式。但是,如果用户确定将BMP文件格式压缩处理,则Windows设计了两种压缩方式:如果图像为16色模式,则采用RLE4压缩方式,若图像为256色模式,则采用RLE8压缩方式。同时,BMP 图像文件格式可以存储单色、16色、256色以及真彩色四种图像数据,,其数据的排列顺序与一般文件不同,它以图像的左下角为起点存储图像,而不是以图像的左上角为起点;而且BMP图像文件格式中还存在另外一个与众不同的特点,即其调色板数据所采用的数据结构中,红、绿、蓝三种基色数据的排列顺序也恰好与其它图像文件格式相反。总之,BMP图像文件格式拥有许多适合于Windows环境的新特色,而且随着Windows版本的不断更新,微软公司也在不断改进其BMP 图像文件格式,例如:当前BMP图像文件版本中允许采用32位颜色表,而且针对32位Windows 的产生,相应的API 函数也在不断地报陈出新,这些无疑都同时促成了BMP文件格式的不断风靡。但由于BMP文件格式只适合于Windows上的应用软件,而对于DOS环境中的各种应用软件则无法提供相应的支持手段,因此这无疑是阻碍BMP文件格式的流通程度超过PCX文件格式的一个重要因素。 Windows中定义了两种位图文件类型,即一般位图文件格式与设备无关位图文件格式。其中,由于设备无关位图(DIB)文件格式具有更强的灵活性与完整的图像数据、压缩方式等定义。BMP图像文件的结构可以分为如下三个部分:文件头、调色板数据以及图像数据。其中文件头的长度为固定值54个字节;调色板数据对所有不超过256色的图像模式都需要进行设置,即使是单色图像模式也不例外,但是对于真彩色图像模式,其对应的BMP文件结构中却不存在相应调色板数据的设置信息;图像数据既可以采用一定的压缩算法进行处理,也可以不必对图像数据进行压缩处理,这不仅与图像文件的大小相关,而且也与对应的图像处理软件是否支持经过压缩处理的BMP图像文件相关。以下将分别介绍BMP图像文件结构中的这三个重要组成部分。特别值得注意的是:BMP 图像文件结构设计得相当简单,这无疑有利于图像文件的处理速度,但是同时也使得 BMP图像文件格式具有一定的局限性,即一个BMP图像文件只能存储一幅图像。 BMP图像文件的文件头定义 Windows中将BMP图像文件的文件头分成两个数据结构,其中一个数据结构中包含BMP文件的类型、大小和打印格式等信息,称为BITMAPFILEHEADERl另外一个数据结构中则包含BMP文件的尺寸定义等信息,称为BITMAPINFOHEADERl 如果图像文件还需要调色板数据,则将其存放在文件头信息之后。 BITMAPFIlEHEADER数据结构在Windows.h中的定义为: typedef struCttagBITMAPFIlEHEADER { WORD bftype; DWORD bfsiZe: WORD bfReservedl; WORD bgReserved2: DWORD bfoffBits: }BITMAPFILEHEADER; 其中,bfrype在图像文件存储空间中的数据地址为0,数据类型为unsignedchar,内容为固定值“BM”,用于标志文件格式,表示该图像文件为BMP文件。 bfsize的数据地址为2,类型为unsignedlong,它以字节为单位,定义位图文件的大小。 bfReservedl与bfReserved2的数据地址分别为6和8,数据类型则都为unsignedint,二者都是BMP文件的保留字,没有任何意义,其值必须为0. bfoffBits的数据地址为10,数据类型为unsignedlong,它以字节为单位,指示图像数据在文件内的起始地址,即图像数

JPEG文件编解码详解

JPEG文件编/解码详解 cat_ng 猫猫 JPEG(Joint Photographic Experts Group)是联合图像专家小组的英文缩写。它由国际电话与电报咨询委员会 CCITT(The International Telegraph and Telephone Consultative Committee)与国际标准化组织ISO 于1986年联合 成立的一个小组,负责制定静态数字图像的编码标准。 小组一直致力于标准化工作,开发研制出连续色调、多级灰度、静止图像的数字图像压缩编码方法,即JPEG 算法。JPEG算法被确定为国际通用标准,其适用范围广泛,除用于静态图像编码外,还推广到电视图像序列的帧 内图像压缩。而用JPEG算法压缩出来的静态图片文件称为JPEG文件,扩展名通常为*.jpg、*.jpe*.jpeg。 JPEG专家组开发了两种基本的压缩算法、两种数据编码方法、四种编码模式。具体如下: 压缩算法: ● 有损的离散余弦变换(Discrete Cosine Transform,DCT); ● 无损的预测技术压缩。 数据编码方法: ● 哈夫曼编码; ● 算术编码; 编码模式: ● 基于DCT顺序模式:编/解码通过一次扫描完成; ● 基于DCT递进模式:编/解码需要多次扫描完成,扫描效果从粗糙到精细, 逐级递进; ● 无损模式:基于DPCM,保证解码后完全精确恢复到原图像采样值;

层次模式:图像在多个空间多种分辨率进行编码,可以根据需要只对低分辨率数据作解码,放弃高分辨率信息。 在实际应用中,JPEG图像使用的是离散余弦变换、哈夫曼编码、顺序模式。 JPEG压缩编码算法的主要计算步骤如下: (0) 8*8分块。 (1) 正向离散余弦变换(FDCT)。 (2) 量化(quantization)。 (3) Z字形编码(zigzag scan)。 (4) 使用差分脉冲编码调制(DPCM)对直流系数(DC)进行编码。 (5) 使用行程长度编码(RLE)对交流系数(AC)进行编码。 (6) 熵编码。 笔者在实践过程中查阅了大量的资料,发现大多数书籍资料和网上资料都是从编码角度分析JPEG的编/解码方式, 并且都只是介绍编码过程中的主要方法。所以,本文从解码角度详细分析JPEG的编/解码过程,并且加入许多笔 者实践过程中遇到的问题和解决方法,希望从另一个角度说明问题,以更好帮助读者结合其他资料解决问题。 不过,介绍解码过程之前,首先要了解JPEG文件中数据的存储格式。 一、JPEG文件格式介绍 JPEG文件使用的数据存储方式有多种。最常用的格式称为JPEG文件交换格式(JPEG File Interchange Format,JFIF )。而JPEG文件大体上可以分成两个部分:标记码(Tag)和压缩数据。

实验4JPEG压缩编解码的实现

实验四JPEG压缩编解码的实现 实验目的: 使学生掌握DIB文件和JPEG文件的读写过程,能够在程序中打开DIB文件或JPEG文件,可以进行DIB文件和JPEG文件之间的格式转换。 实验环境: 具有多媒体处理功能的计算安装有Windows操作系统,安装有Visual c++6.0程序设计软件。 实验要求: 学习相关理论指导,掌握相关程序设计知识;按照实验步骤要求完成程序设计任务,书写实验报告,试验报告中要求包含程序实现的主要程序代码。 实验内容和实验步骤: 1)创建基于单文档的应用程序:RWJpegExp,并支持窗口滚动 2)为项目添加CJpeg类和jpeglib2库文件 3)通过“Project/Settings…”菜单,选中Link选项卡如下设置:

4)利用ClassWaizard重载CwinApp的OnFileOpen()函数。 void CRWJpegExpApp::OnFileOpen() { // TODO: Add your command handler code here CString szOpenFilter = "图象文件|*.bmp; *.dib; *.jpg; *.jpe; *.jpeg; |位图文件(*.bmp;*.dib)|*.bmp; *.dib|JPEG文件(*.jpg;*.jpe;*.jpeg)|*.jpg; *.jpe; *.jpeg|All Files (*.*)|*.*||"; CFileDialog FileDlg(TRUE, "*.bmp", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szOpenFilter); if (FileDlg.DoModal() == IDOK) OpenDocumentFile(FileDlg.m_ofn.lpstrFile); } 5)利用ClassWaizard重载CRWJpegExpDoc类的的OnOpenDocument()函数。BOOL CRWJpegExpDoc::OnOpenDocument(LPCTSTR lpszPathName) { char drive[_MAX_DRIVE]; char dir[_MAX_DIR]; char fname[_MAX_FNAME]; char ext[_MAX_EXT]; _splitpath((LPCSTR)lpszPathName, drive, dir, fname, ext); if (! stricmp(ext, ".jpg") || ! stricmp(ext, ".jpe") || ! stricmp(ext, ".jpeg") ) // JPEG file {

BMP图片格式详解

BMP图像格式详解 一.简介 BMP(Bitmap-File)图形文件是Windows采用的图形文件格式,在Windows环境下运行的所有图象处理软件都支持BMP图象文件格式。Windows系统内部各图像绘制操作都是以BMP为基础的。Windows 3.0以前的BMP图文件格式与显示设备有关,因此把这种BMP图象文件格式称为设备相关位图DDB(device-dependent bitmap)文件格式。Windows 3.0以后的BMP图象文件与显示设备无关,因此把这种BMP图象文件格式称为设备无关位图DIB(device-independent bitmap)格式(注:Windows 3.0以后,在系统中仍然存在DDB位图,象BitBlt()这种函数就是基于DDB位图的,只不过如果你想将图像以BMP格式保存到磁盘文件中时,微软极力推荐你以DIB格式保存),目的是为了让Windows能够在任何类型的显示设备上显示所存储的图象。BMP位图文件默认的文件扩展名是BMP或者bmp(有时它也会以.DIB或.RLE作扩展名)。 二.BMP格式结构 BMP文件的数据按照从文件头开始的先后顺序分为四个部分: ◆位图文件头(bmp file header):提供文件的格式、大小等信息 ◆位图信息头(bitmap information):提供图像数据的尺寸、位平面数、压缩方式、颜色索 引等信息 ◆调色板(color palette):可选,如使用索引来表示图像,调色板就是索引与其对应的颜色 的映射表 ◆位图数据(bitmap data):图像数据区 BMP图片文件数据表如下:

三.BMP文件头 BMP文件头结构体定义如下: typedef struct tagBITMAPFILEHEADER { UINT16 bfType; //2Bytes,必须为"BM",即0x424D 才是Windows位 图文件 DWORD bfSize; //4Bytes,整个BMP文件的大小 UINT16 bfReserved1; //2Bytes,保留,为0 UINT16 bfReserved2; //2Bytes,保留,为0 DWORD bfOffBits; //4Bytes,文件起始位置到图像像素数据的字节偏移量} BITMAPFILEHEADER; BMP文件头数据表如下:

《数字图像处理》习题参考答案与解析

《数字图像处理》习题参考答案 第1 章概述 1.1 连续图像和数字图像如何相互转换?答:数字图像将图像看成是许多大小相同、 形状一致的像素组成。这样,数字图像可以 用二维矩阵表示。将自然界的图像通过光学系统成像并由电子器件或系统转化为模拟图像(连续图像)信号,再由模拟/数字转化器(ADC)得到原始的数字图像信号。图像的数字化包括离散和量化两个主要步骤。在空间将连续坐标过程称为离散化,而进一步将图像的幅度值(可能是灰度或色彩)整数化的过程称为量化。 1.2 采用数字图像处理有何优点?答:数字图像处理与光学等 模拟方式相比具有以下鲜明的特点: 1.具有数字信号处理技术共有的特点。(1)处理精度高。(2)重现性能好。(3)灵活性高。 2.数字图像处理后的图像是供人观察和评价的,也可能作为机器视觉的预处理结果。 3.数字图像处理技术适用面宽。 4.数字图像处理技术综合性强。 1.3 数字图像处理主要包括哪些研究内容?答:图像处理的任务是将客观世界的景象进 行获取并转化为数字图像、进行增强、变换、 编码、恢复、重建、编码和压缩、分割等处理,它将一幅图像转化为另一幅具有新的意义的图像。 1.4 讨论数字图像处理系统的组成。列举你熟悉的图像处理系统并分析它们的组成和功能。 答:如图1.8,数字图像处理系统是应用计算机或专用数字设备对图像信息进行处理的信息系统。图像处理系统包括图像处理硬件和图像处理软件。图像处理硬件主要由图像输入设备、图像运算处理设备(微计算机)、图像存储器、图像输出设备等组成。软件系统包括操作系统、控制软件及应用软件等。 图1.8 数字图像处理系统结构 图 1

1.5 常见的数字图像处理开发工具有哪些?各有什么特点? 答.目前图像处理系统开发的主流工具为 Visual C++(面向对象可视化集成工具) 和 MATLAB 的图像处理工具箱(Image Processing Tool box)。两种开发工具各有所长且有 相互间的软件接口。 Microsoft 公司的 VC++是一种具有高度综合性能的面向对象可视化集成工具,用它开 发出来的 Win 32 程序有着运行速度快、可移植能力强等优点。VC++所提供的 Microsoft 基础类库 MFC 对大部分与用户设计有关的 Win 32 应用程序接口 API 进行了封装,提高 了代码的可重用性,大大缩短了应用程序开发周期,降低了开发成本。由于图像格式多且 复杂,为了减轻程序员将主要精力放在特定问题的图像处理算法上,VC++ 6.0 提供的动 态链接库 ImageLoad.dll 支持BMP、JPG、TIF 等常用6 种格式的读写功能。 MATLAB 的图像处理工具箱MATLAB 是由MathWorks 公司推出的用于数值计算的有力工具,是一种第四代计算机语言,它具有相当强大的矩阵运算和操作功能,力求使人们摆脱繁 杂的程序代码。MATLAB 图像处理工具箱提供了丰富的图像处理函数,灵活运用这些函数可 以完成大部分图像处理工作,从而大大节省编写低层算法代码的时间,避免程序设计中的重 复劳动。MATLAB 图像处理工具箱涵盖了在工程实践中经常遇到的图像处理手段和算法,如 图形句柄、图像的表示、图像变换、二维滤波器、图像增强、四叉树分解域边缘检测、二值 图像处理、小波分析、分形几何、图形用户界面等。但是,MATLAB 也存在不足之处限制了 其在图像处理软件中实际应用。首先,强大的功能只能在安装有MA TLAB 系统的机器上使用 图像处理工具箱中的函数或自编的 m 文件来实现。其次,MATLAB 使用行解释方式执行代码,执行速度很慢。第三,MATLAB 擅长矩阵运算,但对于循环处理和图形界面的处理不及C++ 等语言。为此,通应用程序接口API 和编译器与其他高级语言(如C、 C++、Java 等)混 合编程将会发挥各种程序设计语言之长协同完成图像处理任务。API 支持 MA TLAB 与外部数 据与程序的交互。编译器产生独立于MATLAB 环境的程序,从而使其他语言的应用程序使用MATLAB。 1.6 常见的数字图像应用软件有哪些?各有什么特点?答:图像应用软件是可直接供 用户使用的商品化软件。用户从使用功能出发,只要了解 软件的操作方法就可以完成图像处理的任务。对大部分用户来说,商品化的图像应用软件无 需用户进行编程,操作方便,功能齐全,已经能满足一般需求,因而得到广泛应用。常用图 像处理应用软件有以下几种: 1.PHOTOSHOP:当今世界上一流的图像设计与制作工具,其优越性能令其产品望尘莫及。PHOTOSHOP 已成为出版界中图像处理的专业标准。高版本的 PHOTOSHOP 支持多达 20 多种图像格式和 TWAIN 接口,接受一般扫描仪、数码相机等图像输入设备采集的图像。PHOTOSHOP 支持多图层的工作方式,只是 PHOTOSHOP 的最大特色。使用图层功能可以很 方便地编辑和修改图像,使平面设计充满创意。利用 PHOTOSHOP 还可以方便地对图像进 行各种平面处理、绘制简单的几何图形、对文字进行艺术加工、进行图像格式和颜色模式 的转换、改变图像的尺寸和分辨率、制作网页图像等。 2.CorelDRAW:一种基于矢量绘图、功能强大的图形图像制作与设计软件。位图式图像是 由象素组成的,与其相对,矢量式图像以几何、色彩参数描述图像,其内容以线条和色块为主。可见,采用不同的技术手段可以满足用户的设计要求。位图式图像善于表现连续、丰富 色调的自然景物,数据量较大;而矢量式图像强于表现线条、色块的图案,数据量较小。 合理的利用两种不同类型的图像表现方式,往往会收到意想不到的艺术效果。CorelDraw是

相关主题
文本预览
相关文档 最新文档