多媒体实验五_第1页
多媒体实验五_第2页
多媒体实验五_第3页
多媒体实验五_第4页
多媒体实验五_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验题目:实验题目:v1 1、BMPBMP图像文件的操作,编写图像文件的操作,编写C+C+程序,可以程序,可以将一个标准将一个标准24bit24bit真彩色真彩色BMPBMP文件中三基色图文件中三基色图像提取出来存成独立的像提取出来存成独立的8bit8bit灰度图像(灰度图像(BMPBMP)v2 2、JPGJPG算法:自写算法将算法:自写算法将BMPBMP转换为转换为JPGJPG,再,再将将jpgjpg转化为转化为bmpbmp,比较前后两个,比较前后两个bmpbmp得质量差得质量差别,在不同的量化参数(别,在不同的量化参数(50%50%压缩压缩,75%,75%压压缩缩,95%,95%压缩)下对

2、比效果,包括:压缩)下对比效果,包括:jpgjpg压缩后压缩后的大小、图像质量、压缩时间的大小、图像质量、压缩时间一、一、BMP的数据结构的数据结构 v1:BMP文件组成 vBMP文件由四部分组成文件头、位图信息头、颜色信息图形数据。 2:BMP文件头(14字节) vBMP文件头数据结构含有BMP文件的类型、文件大小和位图起始位置等信息。 vtypedef struct tagBITMAPFILEHEADERWORDbf Type; / 位图文件的类型,必须为BMP(0-1字节)vDWORD bfSize; / 位图文件的大小,以字节为单位(2-5字节)vWORD bfReserved1; /

3、 位图文件保留字,必须为0(6-7字节)vWORD bfReserved2; / 位图文件保留字,必须为0(8-9字节)vDWORD bfOffBits; / 位图数据的起始位置,以相对于位图(10-13字节)v/ 文件头的偏移量表示,以字节为单位v BITMAPFILEHEADER;3:位图信息头(40字节) vBMP位图信息头数据用于说明位图的尺寸等信息。typedef struct tagBITMAPINFOHEADERDWORD biSize; / 本结构所占用字节数本结构所占用字节数(14-17字节字节)LONG biWidth; / 位图的宽度,以像素为单位位图的宽度,以像素为单位

4、(18-21字节字节)LONG biHeight; / 位图的高度,以像素为单位位图的高度,以像素为单位(22-25字节字节)WORD biPlanes; / 目标设备的级别,必须为目标设备的级别,必须为1(26-27字节字节)WORD biBitCount;/ 每个像素所需的位数,必须是每个像素所需的位数,必须是1(双色双色),(28-29字节字节)/ 4(16色色),8(256色色)或或24(真彩色真彩色)之一之一DWORD biCompression; / 位图压缩类型,必须是位图压缩类型,必须是 0(不压缩不压缩),(30-33字节字节)/ 1(BI_RLE8压缩类型压缩类型)或或2(

5、BI_RLE4压缩类型压缩类型)之一之一DWORD biSizeImage; / 位图的大小,以字节为单位位图的大小,以字节为单位(34-37字节字节)LONG biXPelsPerMeter; / 位图水平分辨率,每米像素数位图水平分辨率,每米像素数(38-41字节字节)LONG biYPelsPerMeter; / 位图垂直分辨率,每米像素数位图垂直分辨率,每米像素数(42-45字节字节)DWORD biClrUsed;/ 位图实际使用的颜色表中的颜色数位图实际使用的颜色表中的颜色数(46-49字节字节)DWORD biClrImportant;/ 位图显示过程中重要的颜色数位图显示过程中

6、重要的颜色数(50-53字节字节) BITMAPINFOHEADER;4:颜色表:颜色表 v颜色表用于说明位图中的颜色,它有若干个表项,每一个表项是一个RGBQUAD类型的结构,定义一种颜色。RGBQUAD结构的定义如下: typedef struct tagRGBQUAD BYTE rgbBlue;/ 蓝色的亮度蓝色的亮度(值范围为值范围为0-255)BYTE rgbGreen; / 绿色的亮度绿色的亮度(值范围为值范围为0-255)BYTE rgbRed; / 红色的亮度红色的亮度(值范围为值范围为0-255)BYTE rgbReserved;/ 保留,必须为保留,必须为0 RGBQUAD

7、;v颜色表中RGBQUAD结构数据的个数有biBitCount来确定:当biBitCount=1,4,8时,分别有2,16,256个表项;当biBitCount=24时,没有颜色表项。v位图信息头和颜色表组成位图信息,BITMAPINFO结构定义如下:vtypedef struct tagBITMAPINFO vBITMAPINFOHEADER bmiHeader; / 位图信息头vRGBQUAD bmiColors1; / 颜色表v BITMAPINFO;5:位图数据 v位图数据记录了位图的每一个像素值,记录顺序是在扫描行内是从左到右,扫描行之间是从下到上。位图的一个像素值所占的字节数: v

8、当biBitCount=1时,8个像素占1个字节;v当biBitCount=4时,2个像素占1个字节;v当biBitCount=8时,1个像素占1个字节;v当当biBitCount=24时时,1个像素占个像素占3个字节个字节;vWindows规定一个扫描行所占的字节数必须是v4的倍数(即以long为单位),不足的以0填充,vbiSizeImage = (bi.biWidth * bi.biBitCount) + 31) & 31) / 8) * bi.biHeight; 如某BMP文件开头: v4D42 4690 0000 0000 0000 4600 0000 2800 0000 8

9、000 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文件可分为四个部分:位图文件头、位图信息头、彩色板、图像数据阵列,在上图中已用*分隔。 图像文件头图像文件头 v1)1:(这里的数字代表的是字,即两个字节,下同)图像文件头。0 x4D42=BM,表示

10、是Windows支持的BMP格式。 v2)2-3:整个文件大小。4690 0000,为00009046h=36934。 v3)4-5:保留,必须设置为0。 v4)6-7:从文件开始到位图数据之间的偏移量。4600 0000,为00000046h=70,上面的文件头就是35字=70字节。 位图信息头位图信息头 v5)8-9:位图图信息头长度。 v6)10-11:位图宽度,以像素为单位。8000 0000,为00000080h=128。 v7)12-13:位图高度,以像素为单位。9000 0000,为00000090h=144。 v8)14:位图的位面数,该值总是1。0100,为0001h=1。

11、v9)15:每个像素的位数。有1(单色),4(16色),8(256色),16(64K色,高彩色),24(16M色,真彩色),32(4096M色,增强型真彩色)。1000为0010h=16。 v10)16-17:压缩说明:有0(不压缩),1(RLE 8,8位RLE压缩),2(RLE 4,4位RLE压缩,3(Bitfields,位域存放)。RLE简单地说是采用像素数+像素值的方式进行压缩。T408采用的是位域存放方式,用两个字节表示一个像素,位域分配为r5b6g5。图中0300 0000为00000003h=3。 v11)18-19:用字节数表示的位图数据的大小,该数必须是4的倍数,数值上等于(位

12、图宽度的最小的4的倍数)位图高度每个像素位数。0090 0000为00009000h=80902h=36864。 v12)20-21:用象素/米表示的水平分辨率。A00F 0000为0000 0FA0h=4000。 v13)22-23:用象素/米表示的垂直分辨率。A00F 0000为0000 0FA0h=4000。 v14)24-25:位图使用的颜色索引数。设为0的话,则说明使用所有调色板项。 v15)26-27:对图象显示有重要影响的颜色索引的数目。如果是0,表示都重要。 彩色板彩色板 v16)28-.(不确定 ):彩色板规范。对于调色板中的每个表项,用下述方法来描述RGB的值: v1字节用

13、于蓝色分量 v1字节用于绿色分量 v1字节用于红色分量 v1字节用于填充符(设置为0) v对于24-位真彩色图像就不使用彩色板,因为位图中的RGB值就代表了每个象素的颜色。 v如,彩色板为00F8 0000 E007 0000 1F00 0000 0000 0000,其中: 00FB 0000为FB00h=1111100000000000,是蓝色分量的掩码。 vE007 0000为 07E0h=0000011111100000,是绿色分量的掩码。 v1F00 0000为001Fh=0000000000011111,是红色分量的掩码。 v0000 0000总设置为0。 v将掩码跟像素值进行“与”

14、运算再进行移位操作就可以得到各色分量值。看看掩码,就可以明白事实上在每个像素值的两个字节16位中,按从高到低取5、6、5位分别就是r、g、b分量值。取出分量值后把r、g、b值分别乘以8、4、8就可以补齐第个分量为一个字节,再把这三个字节按rgb组合,放入存储器(同样要反序),就可以转换为24位标准BMP格式了。图像数据阵列 v17)27(无调色板)-:每两个字节表示一个像素。阵列中的第一个字节表示位图左下角的象素,而最后一个字节表示位图右上角的象素。注意点注意点v其中高度和宽度都是像素数。v 需要注意的是上面公式中的54是位图文件的文件头是位图文件的文件头,是彩色调色板的大小是彩色调色板的大小

15、。v另外需要注意的是这是一个近似值近似值,对于n位的位图图像来说,尽管可能有最多2n中颜色,一个特定的图像可能并不会使用这些所有的颜色。v由于彩色调色板仅仅定义了图像所用的颜色,所以实际的彩色调色板将小于256。 二二 JPEG压缩的基本原理压缩的基本原理 vJPEG标准是面向连续色调静止图像压缩标准。它定义了多种类型打工作模式,其中最基本的是基于8*8块的DCT变换的顺序编码。就是将一帧图像分为8*8的数据块单元,按照从左到右、自上而下的顺序对“块流”编码。JPEG压缩是有损压缩,它利用了人的视角系统的特性,使用量化和无损压缩编码相结合来去掉视角的冗余信息和数据本身的冗余信息vJPEG算法框

16、图下页如图所示,压缩编码大致分成三个步骤:v(1)使用正向离散余弦变换(Forward Discrete Cosine Transform,FDCT)把空间域表示的图变换成频率域表示的图。 v(2)使用加权函数对DCT系数进行量化,这个加权函数对于人的视觉系统是最佳的。 v(3)使用哈夫曼可变字长编码器对量化系数进行编码。 v译码或者叫做解压缩的过程与压缩编码过程正好相反。vJPEG算法与彩色空间无关,因此“RGB到YUV变换”和“YUV到RGB变换”不包含在JPEG算法中。JPEG算法处理的彩色图像是单独的彩色分量图像,因此它可以压缩来自不同彩色空间的数据,如RGB、YCbCr和CMYK。1

17、.颜色转换颜色转换 v由于JPEG只支持YUV颜色模式的数据结构,而不支持RGB图像数据结构,所以在将彩色图像进行压缩之前,必须先对颜色模式进行数据转换。各个值的转换可以通过下面的转换公式计算得出:vY=0.299R+0.587G+0.114BvU=-0.169R-0.3313G+0.5BvV=0.5R-0.4187G-0.0813Bv其中,Y表示亮度,U和V表示颜色。v转换完成之后还需要进行数据采样。一般采用的采样比例是2:1:1或4:2:2。由于在执行了此项工作之后,每两行数据只保留一行,因此,采样后图像数据量将压缩为原来的一半。2离散余弦变换离散余弦变换(DCT)v(1)首先把一幅图像划

18、分成一系列的图像块,每个图像块包含88个像素。如果原始图像有640480个像素,则图片将包含80列60行的方块。如果图像只包含灰度,那么每个像素用一个8比特的数字表示。因此可以把每个图像块表示成一个8行8列的二维数组。数组的元素是0255的8比特整数。离散余弦变换就是作用在这个数组上。 v如果图像是彩色的,那么每个像素可以用24比特、相当于三个8位比特的组合来表示(用RGB或YIQ表示,在这里没有影响)。因此,可以用三个8行8列的二维数组表示这个88的像素方块。每一个数组表示其中一个八位比特组合的像素值。离散余弦变换作用于每个数组。 2离散余弦变换离散余弦变换(DCT)DCT变换是做什么的变换

19、是做什么的 ?v简单的说,是用一个8行8列的二维数组产生另一个同样包含8行8列二维数组的函数,也就是说,把一个数组通过一个变换,变成另一个数组。v如图下图所示,对每个图像块做离散余弦变换。通过DCT变换可以把能量集中在矩阵左上角少数几个系数上。 wf(i,j)经DCT变换之后得到F(i,j),其中F(0,0)是直流系数,称为DC系数,其他为交流系数,称为AC系数。 v(2)用f表示像素值的数组,f(i j)表示i行j列的值,则离散余弦变换后定义一个新的数组F (u ,v),表示u行v列的值。 DCT变换使用公式(1)计算:77001(21)(21),( , )coscos41616ijiujv

20、u vuvf i j()=C( )C( )(1) 它的逆变换使用公式(2)计算:77001(21)(21),( , )coscos41616uviujvf i juvF u v()=C( )C( )(2) 上面两式中,C(u), C(v) = ,当u, v =0;C(u), C(v) = 1,其他。 1/2图1 显示了对一个源图像的88的图像样本的原始数组应用离散余弦变换的结果。为便于计算在对源数组f进行变换之前首先对源图像中的每个样本数据减去了128。然后再按公式(1)分别计算出结果数组F中每个数组元素的值。比如说,计算F(0,0)的值过程如下:16) 12(cos16) 12(cos),(

21、)()(41)0 , 0(7070ijvjuijifvCuCF ),()0()0(417070ijjifCC1885212141235.6(因为cos(0)=1)这样再继续计算出数组中其余元素的值,得到数组F。图1 离散余弦变换的数组f(i,j)经DCT变换之后得到F(i,j),其中F(0,0)是直流系数,称为DC系数,其他为交流系数,称为AC系数。(3)在计算二维的DCT变换时,也可使用下面的计算式(3)、(4)进行简化,把二维的DCT变换变成一维的DCT变换,如图2所示为二维DCT变换方法。701(21),( , )cos216iiuu vuG i v()=C( )(3) 701(21)(

22、 , )( , )cos216ijvG i vvf i j=C( )(4) 图 2 两维DCT变换方法v3量化量化v为了达到压缩数据的目的,DCT系数需做量化。量化是对经过FDCT变换后的频率系数进行量化,这是一个多到一映射的过程。量化的目的是减小非0系数的幅度以及增加0值系数的数目,在一定的主观保真的前提下,丢掉那些对视觉效果影响不大的信息,量化是图像质量下降的最主要原因。对于有损压缩算法,JPEG算法使用如图3所示的均匀量化器进行量化,量化步距是量化表的元素,它由系数所在的位置和每种颜色分量的色调值来确定。因为人眼对亮度信号比对色差信号更敏感,因此使用了两种量化表:如表4-4所示的色度量化

23、值和表4-5所示的亮度量化值。此外,由于人眼对低频分量的图像比对高频分量的图像更敏感,因此图中左上角的量化步距要比右下角的量化步距小。表4-4和表4-5中的数值对CCIR 601标准(国际无线电咨询委员会CCIRInternational Radio Consultative Committee在20世纪80年代初制定的彩色电视图像数字化标准)电视图像已经是最佳的。如果不使用这两种表,你也可以用自己的量化表替换它们。对于上面的例子,我们用表4-4的量化表对其进行量化,得到数组Q(i,j)。量化的公式为:Q(i,j)=Integer(F(i,j)/U(i,j)其中:U(i,j)为量化数组中对应的

24、数组元素。也就是用数组F中的各元素分别除以量化数组Q中的相应元素,如图4-14所示。图4-14 用量化表量化的数组以上是编码时对图像块的正向离散余弦变换和量化过程,解码的时候要进行逆量化和逆向离散余弦变换,图4-15说明了解码的过程,并且在逆向离散余弦变换之后对重构图像中的每个样本数据加了128,最后得到重构图像样本:4编码阶段编码阶段 v(1)Z字形编排。对于量化后的二维数组,我们还要对其进行线性化,然后再进行压缩加以传输。一个合理的线性化方法可能是一次传输Q的一行。由于出现这么多的0,可以使用行程编码。w(2)直流系数的编码。88图像块经过DCT变换之后得到的DC直流系数有两个特点,一是系数的数值比较大,二是相邻88图像块的DC系数值变化不大。根据这个特点,JPEG算法使用了差分脉冲调制编码(DPCM)技术,对相邻图像块之间量化DC系数的差值进行编码 。wDelta = Dc(0,0)k-Dc(0,0)k1 (4-15)v编码时,每个矩阵资料的DC值与63个AC值,将分别使用不同的Huffman编码表,而亮度与

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论