微信公众号上线,搜索公众号小灰灰的FPGA,关注可获取相关源码,定期更新有关FPGA的项目以及开源项目源码,包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等
1、图像压缩编码
图像压缩编码可以分为有损压缩和无损压缩
图像分为静止图像和(图片)动态图像,因此有可以划分为静止图像压缩和动态图像压缩
2、静止图像压缩编码
(1)基本概念
静止数字图像信号是由二维的许多像素(piexl)构成的。在各邻近像素(上下左右)之间都有相关性。可以采用差分编码(DPCM)或其他预测方法,仅传输预测误差从而压缩数据率
在图像压缩编码中,常在变换域中进行有损压缩,即对时域中的数字图像信号进行某种变换,然后在变换域中进行压缩。通常采用的变换有离散傅里叶变化(DFT)、离散余弦变化(DCT)、沃尔什变换(WT)、小波变换等
(2)JPEG
最广泛应用的静止图像压缩标准是ISO/JPEG国际标准10918-1或ITU-T建议的T.81,即JPEG。
在JPEG标准中,对彩色原始图像像素的亮度分量Y和色差分量(U与V)按照2:1比例抽样,使图像的数据量压缩为原来的一半。
然后进行二维8×8像素块的DCT。由于DCT的左上角元素(直流分量)值在相邻子块间通常差别不大,所以单独对其作DPCM编码。其他DCT系数另进行量化,使之得到压缩。
量化后的信号在进行编码,编码分两步。
第一步是对0值像素进行游程长度编码(RLE)。RLE是一种用两个字节的编码方法,第一个字节是用于表示相同像素重复的次数,第二个字节是具体像素的值。在JPEG中,按照“Z”形次序发送时,若在8×8子块的DCT矩阵右下半区域中有8个连“0”,则RLE的第一个字节表示“8”,第二个字节表示“0”。
第二步是进行无损哈夫曼(Huffman)编码
在JPEG标准基础上,ISO制定了改进的标准JPEG2000,采用小波变换代替DCT。不仅仅在压缩特性上有了改进,同时提高了码流的灵活性,比如可以通过随意截短码流来降低分辨率。
3、动态图像压缩编码
(1)基本概念
动态数字图像是由许多帧静止图像构成的,即三维的图像,在邻近帧的像素之间有相关性。
动态图像的压缩是在静止图像压缩(JPEG压缩)基础上再设法减小邻近帧之间的相关性
ISO制定的动态图像压缩国际标准称为MPEG。是一系列标准,包括MPEG-1,MPEG-2,MPEG-4,MPEG-7.
由ITU-T制定的动态图像压缩标准称为H.261,H.262,H.263和H.264.
(2)基本压缩原理
以MPEG-2为例,MPEG-2将若干帧动态图像分为一组,在每组中的帧分为三类:I-帧,P-帧和B-帧
I-帧采用帧内编码,P-帧采用预测编码,B-帧采用双向预测编码
P-帧和B-帧位于两个I-帧之间,构成一图片组(GOP)
注意:在一组中,P-帧和B-帧的数目可多可少,也可以没有,但是I-帧必须有
I-帧的压缩采用标准的JPEG算法,被当作静止图像帧处理,压缩算法与前后邻帧无关。两个I-帧的时间间隔是可以调节的,最小间隔为1帧,两个I-帧是相邻的,最大间隔取决于存储器的容量。动态图像的剪辑只能在I-帧处进行。执行剪辑的时间通常不允许超过0.5s,故两个I-帧的间隔限制在不超过12帧-15帧。
P-帧利用和参考帧(前一个I-帧或P-帧)的相关性可得到更大的压缩。在当前带压缩的P-帧分为16×16像素的宏块。对每个宏块,在参考帧中寻找与其最匹配的宏块。将两者的偏移量编码为“动态矢量”
B-帧的处理,利用了前后两个图片作为参考帧,B-帧可获得更大的压缩
注意:
I-帧只利用减小图像的空间相关性进行压缩
P-帧和B-帧利用了图像的空间和时间相关性进行压缩