基于JPG标准的图像压缩算法+代码+论文
第一章 绪论
1.1 研究的动机和目的
信息时代,人们对使用计算机获取信息、处理信息的依赖性越来越高。计算机系统面临的是数值、文字、语言、音乐、图形、动画、静图像、电视视频图像等多种媒体。数字化的视频和音频信号的数量之大是惊人的,对于电视画面的分辨率640×480的彩色图像,30帧/s,则一秒钟的数据量为:640×480×24×30=221.12M,所以播放时,需要221Mbps的通信回路。存储时,1张CD可存640M,则仅可以存放 2.89s的数据。
大数据量的图像信息会给存储器的存储容量,通信干线信道的带宽,以及计算机的处理速度增加极大的压力。单纯靠增加存储器容量,提高信道带宽以及计算机的处理速度等方法来解决这个问题是不现实的,这时就要考虑压缩。
1.2 研究的背景
随着多媒体技术的快速发展,静止图像的应用越来越广泛。它的应用主要集中在图像的存储和图像的传输两方面,从具体应用中我们可以发现静止图像占用了越来越多的资源。在这样的背景条件下,静止图像的压缩成为了一个研究的热点。
目前静止图像的压缩算法以JPEG(Joint Photographic Experts Group)和JPEG2000为主。
JPEG是第一个被广泛接受的单色和彩色静止图像压缩标准,它的名字源于“Joint Photographic Experts Group(联合图像专家组)”,它是由ISO/和CCITT协同工作的机构,这个机构的工作成果是ISO的国际标准ISO/IEC10918-1(连续色调静止图像的数字压缩和编码,digital compression and coding of continuous tone still images)和ITU-T的建议T.81。JPEG标准草案于1991年公布,1992年正式批准为国际标准,以后这个工作组的进一步增强和扩展形成了ISO 10918-3和ITU-T建议T.81。
JPEG是一种采用预测编码(DPCM)、离散余弦变换(DCT)以及熵编码,以去除冗余的图像和彩色数据的有损压缩格式,能够将图像压缩在很小的储存空间,图像中重复或不重要的资料会被丢失,因此容易造成图像数据的损伤。尤其是使用过高的压缩比例,将使最终解压缩后恢复的图像质量明显降低,如果追求高品质图像,不宜采用过高压缩比例。但是JPEG压缩技术十分先进,它用有损压缩方式去除冗余的图像数据,在获得极高的压缩率的同时能展现十分丰富生动的图像,也即可以用最少的磁盘空间得到较好的图像品质。而且 JPEG是一种很灵活的格式,具有调节图像质量的功能,允许用不同的压缩比例对文件进行压缩,支持多种压缩级别,压缩比率通常在10:1到40:1之间,压缩比越大,品质就越低;相反地,压缩比越小,品质就越好。比如可以把1.37Mb的BMP位图文件压缩至20.3KB。当然也可以在图像质量和文件尺寸之间找到平衡点。JPEG格式压缩的主要是高频信息,对色彩的信息保留较好,适合应用于互联网,可减少图像的传输时间,可以支持24bit真彩色,也普遍应用于需要连续色调的图像。
JPEG的核心算法是DCT变换编码,其压缩性能基本反映了20世纪80年代末图像压缩的技术水平。但自从JPEG制定后的近10年,许多更有效的图像压缩技术已经得到发展,如小波变换方法、分形方法、区域划分方法等。其中,发展最成熟和性能及通用性最好的静止图像压缩方法是小波变换方法。正因如此,制定了第二代静止图像压缩标准,即JPEG2000,它的核心技术正是小波变换编码。其核心编解码器采用小波变换、算术编码及嵌入式分层组织,较以往的静止图像压缩标准复杂,它在同一个码流中实现了无损和有损压缩、分辨率和信噪比的累进性以及随机访问等优良特性。JPEG2000作为JPEG的升级版,其压缩率比JPEG高约30%左右,同时支持有损和无损压缩。JPEG2000格式有一个极其重要的特征在于它能实现渐进传输,即先传输图像的轮廓,然后逐步传输数据,不断提高图像质量,让图像由朦胧到清晰显示。此外,JPEG2000还支持所谓的"感兴趣区域" 特性,可以任意指定影像上感兴趣区域的压缩质量,还可以选择指定的部分先解压缩。
1.3 研究内容
JPEG压缩格式是目前图像处理领域里面用得最广泛的一种图像压缩方式,本毕业设计将进行就JPEG标准对图像进行编、解码的研究。主要内容包括:
1)从BMP格式图像的文件中(未压缩)读出图像,并能显示。
2)将BMP图像数据以JPEG标准压缩,保存为*.JPG文件。
3)要求能读出jpg文件,并显示在界面上
其中,JPEG的压缩实现主要分成四个步骤:
1)颜色模式转换及采样;
2)DCT变换(离散余弦变换);
3)量化;
4)编码(有算术编码和哈夫曼编码两种,这里采用哈夫曼编码)。
1.4 系统原理
1.4.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 的。
1.4.2 DCT (离散余弦变换)
JPEG 里要对数据压缩,先要做一次DCT变换,DCT变换的原理涉及到数学知识,这里我们不必深究,反正和傅立叶变换(学过高数的都知道)是差不多的。经过这个变换,就把图片里点和点间的规律呈现出来了,更方便压缩。JPEG里是对每8x8个点为一个单位处理的。所以如果原始图片的长宽不是8的倍数,都需要先补成8的倍数,好一块块的处理。另外,记得刚才我说的Cr Cb都是2x2记录一次吗?所以大多数情况,是要补成16x16的整数块。按从左到右,从上到下的次序排列(和我们写字的次序一样)。JPEG里是对Y Cr Cb分别做DCT变换的。这里进行 DCT 变换的Y,Cr,Cb值的范围都是-128~127 (Y被减去128)
JPEG 编码时使用的是 Forward DCT (FDCT),解码时使用的 Inverse DCT (IDCT)下面给出其二文公式
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] ... 下一页 >>
VC++基于JPG标准的图像压缩算法+代码+论文 第4页下载如图片无法显示或论文不完整,请联系qq752018766