(9)图像编码与压缩(Image Coding and Compression) | 您所在的位置:网站首页 › 图像压缩方法的分类及其特点 › (9)图像编码与压缩(Image Coding and Compression) |
Table of Contents 1.图像压缩简介 2.图像压缩用途 3. 源编码与信道编码 4. 有损压缩与无损压缩 2. 图像压缩的必要性 常见的压缩标准 图像压缩的基本流程 JPEG的压缩方法 3. 量化 4. 常用编码方法 1.KLT 2. DCT 5. Huffman编码与信息熵 为什么要进行编码? 概率高的符号用短码,概率低的符号用长码 Huffman编码生成方式 理论最小平均码长(信息熵) 三叉Huffman编码方法 6. OpenCV+C++语言实现图像压缩 PART I 图像编码 1.图像压缩简介某天陈老师要录动作大片,经过长期艰苦奋斗,他制成了这样一段视频:画面大小1000×1000pixel,24位真彩色,每秒30帧,时长2小时。 如果不进行任何压缩,存储这段视频需要1000*1000*24*30*60*120=5.184 ×1012 bit ≈ 648GB的空间。(2014年4月5日,500GB硬盘最低价格是299元~) 用4M宽带下载这部大片,最少需要360小时 = 15天。 可见,要保障人民群众的切身利益,压缩技术非常有必要。 压缩的可能性
数字图像与模拟图像的重要区别,在与它是数字的。(还能有更废的话吗...)数字,意味着它的离散的:图像空间上的像素点是离散的,像素点的灰度值(颜色值)也是离散的。相反,模拟图像(比如胶卷)出来的图像空间上和数值上都是连续的。 下图是JPEG的压缩编码流程,本节介绍的,是其中的“量化”(Quantizer)部分。 JPEG是用更多空间存储“大”的东西,而用更少空间存储“微小的细节”,这样图像大小就能大大地被压缩,而不影响人的理解。 Lloyd—Max quantizer 4. 常用编码方法 1.KLT KLT的不足:
JPEG用哈夫曼编码(Huffman Encoder)作为其符号编码。哈弗曼编码是压缩算法中的经典,它理论上可以将数据编成平均长度最小的无前缀码(Prefix-Free Code)。 为什么要进行编码?关于Lena:莱娜图(Lenna)是指刊于1972年11月号《花花公子》(Playboy)杂志上的一张裸体插图照片的一部分,是一张大小为512x512像素的标准测试图。该图在数位影像处里学习与研究中颇为知名,常被用作数位影像处里各种实验(例如资料压缩和降噪)及科学出版物的例图。(几乎每一本图像处理相关的书都会出现这张图片~)Lena的直方图(Histogram):从Lena的直方图中可以看出,图片中每个灰度值出现的概率是不相同的。这里,中间灰度值部分出现的概率比较高,两边灰度值出现概率非常低。所以,如果每个灰度值都进行同样长度的编码,似乎就太浪费了。 概率高的符号用短码,概率低的符号用长码 正是因为每个灰度值出现的概率不一样,我们用更短的编码来表示经常出现的灰度值,用更长的编码来表示几乎不出现的灰度值,平均下来编码长度就会比等长编码短,从而节省了空间。 Huffman编码生成方式1. 将要编码的符号按出现概率高到低排列; 2. 将出现概率最低的两个符号进行组合,两者概率加起来得到组合概率; 3. 将得到的组合概率与其他符号的概率再进行排序; 4. 重复(2),直到出现组合概率为1。 a2 = 1; a6 = 01; a1 = 001; a4 = 0001; a3 = 00001; a5 = 00000; 哈夫曼编码的一大好处是,它是Prefix-Free的,也就是每个符号之间不加分隔符,解码器也能识别; 对上面6个符号,如果采用统一长度编码,一个符号需要3bit; 用哈夫曼进行编码, 平均码长 = 1*0.4 + 2*0.3 + 3*0.1 + 4*0.1 + 5*0.06 + 5*0.04 = 2.2bit; 压缩比 = 2.2/3=0.7333333333; 如果概率分布更集中,压缩效果更明显。 理论最小平均码长(信息熵)
经历完上学期的“信息论”考试,我才知道,地球上还存在N叉哈夫曼编码。 一般二叉都会使用二叉哈夫曼编码,也就是用0、1作为分叉。 但考试非要考三叉哈夫曼编码,也就是用0、1、2来进行编码。 方法很简单:方法与二叉Huffman编码一致,如果待编码的符号数不是3的倍数,就自行补上几个“概率为0”的符号,使符号的总个数为3的倍数。 JPEG分块对图像进行处理 JPEG压缩图像的第一步,是将图像分解成一个个8×8的小图像,之后再分别对这些小图像进行变换量化编码。 1. 分块小,比如2×2,图像还原质量差; 2. 分块大,比如将整幅图作为一块,消耗计算资源多;平衡质量和资源,JPEG默认使用8×8的分块。当然,我觉得一定是有更深层原因的.... JPEG是“色盲”的,它不能直接作用于彩色图像。要处理彩色图像,显而易见的解决办法是分别对RGB三个通道进行处理,后果是,图像中三种颜色的联系被活活的拆散了。因此,JPEG采用YCrCb来表示颜色。 想当年,黑白电视占主流,彩色电视刚面世。为了使黑白电视也能看到彩色电视信号装载的节目,聪明的人类想到了一种办法:用Y通道表示图像的亮度,CrCb表示色差,这样黑白电视只接收Y通道的信号,就能看到黑白图像;彩色电视则通过YCbCr,来获得彩色图像。也因为人对图像的亮度比较敏感,可以用更多数据来传输Y通道,用更少数据来传送CbCr通道,从而提升图像压缩率。 6. OpenCV+C++语言实现图像压缩见另一篇博客
|
CopyRight 2018-2019 实验室设备网 版权所有 |