绝大多数图像都有一个共同特征,平坦区域和内容缓慢变化的区域占据一幅图像的大部分,而细节区域和内容突变区域则占小部分。也可以说,图像中直流和低频区占大部分,高频区占小部分。这样,空间域的图像变换到频域,会产生一些相关性很小的一些变换系数,可以类比不同正交方向上的系数彼此独立,前提是得找到这样一组正交向量。如果对这些系数进行压缩编码,就是变换编码。
变换中有一类叫做正交变换,可用于图像编码。自1968年利用快速傅里叶变换(FFT)进行图像编码以来,出现的了多种正交变换编码方法,比如K-L变换,离散余弦变换(DCT)等。其中,编码性能以K-L变换最理想,但缺乏快速算法,且变换矩阵随图像而异,不同图像需计算不同的变换矩阵。因而只用来参考比较。DCT编码性能最接近于K-L变换,略次而已,但它具有快速算法,广泛应用于图像编码。
DCT主要用于将数据或图像压缩,它将空域的信号变为频域上,能够以数据无关的方式去除输入信号之间的相关性,DCT变换本身是无损的,但是给接下来的量化、哈弗曼编码等创造了很好的条件,同时,由于DCT变换是对称的,我们可以在量化编码后,利用DCT反变换,在接收端恢复原始的图像信息,DCT变换在当前的图像分析领域有着极为广泛的用途,我们常见的JPEG静态图像编码以及MJPEG、MPEG动态编码等标准中都使用了DCT变换。
DCT与DFT(离散傅里叶变换)是近似相等的, 后者更多的应用于信号处理领域,DCT相对简单并且在多媒体领域应用更加广泛。
典型的VPU编码解码数据处理流图:
jpeg图片编码
用mediainfo查看JPG图片信息,会发现其有一项是chorma downsampling参数,为YUV444/YUV420等等,之所以解码后的Render像素格式信息会写入编码压缩数据格式中,是因为再压缩前,其像素信息已经确定了,需要builtin到图片数据中。Y,U,V分量分别进行DCT编码。
DCT变换的数学基础
1.一维DCT变换
DCT正变换时,设
对f变换后得:
其中:
其中,f(i)为原始的信号,F(u)是经过DCT变换之后的系数,N为原始信号的点数,c(u)可以认为是一个补偿系数,可以使DCT变换矩阵为正交矩阵。
令
写成矩阵形式: