图像编码概述
相关概念:
图像采集与ISP
色彩空间,从RGB到YUV。视频工程师发现,眼睛对于亮和暗的分辨要比对颜色的分辨更精细一些,也就是说,人眼对色度的敏感程度要低于对亮度的敏感程度
将数字视频转换为YUV,用4:2:0采样方式获得1/2的压缩率。
所谓编码算法,即寻找规律,构建模型。谁能找到更精准的规律,建立更高效的模型,谁就是厉害的算法。
视频里的冗余信息分类:
种类 | 描述 | |
---|---|---|
空间冗余 | 静态图像中存在的主要冗余 | |
时间冗余 | 帧序列中相邻帧包含相同的背景或物体 | |
构造冗余 | 是不是编码冗余或熵冗余 | |
知识冗余 | 由于先验常识导致的信息冗余 | |
视觉冗余 | 由于人视觉系统的不完美,察觉不到某些细微的变化,导致比(应忽略人不可察觉细微)理想编码更多的数据 | |
其他冗余 |
首先解决空间和时间冗余。
DCT
将N维实数变换为相应的系数,并可逆变换。
一维DCT
F(u)=2Nc(u)∑i=0N−1f(i)cos((2i+1)uπ2N) F(u) = \frac{2}{N}c(u)\sum_{i=0}^{N-1}f(i)cos(\frac{(2i+1)u\pi}{2N}) F(u)=N2c(u)i=0∑N−1f(i)cos(2N(2i+1)uπ)
归一化,
2Nc(u)∑i=0N−1f(i)cos((2i+1)uπ2N)
\sqrt{\frac{2}{N}}c(u)\sum_{i=0}^{N-1}f(i)cos(\frac{(2i+1)u\pi}{2N})
N2c(u)i=0∑N−1f(i)cos(2N(2i+1)uπ)
f(i)f(i)f(i)相当于数组的索引,表示第i个元素
c(u)=1(2),u=0c(u)=1,u≠0 c(u) = \frac{1}{\sqrt(2)}, u = 0 \\ c(u) = 1, u \not = 0 c(u)=(2)1,u=0c(u)=1,u=0
二维DCT
8x8 2D DCT
F(u,v)=c(u)2c(v)2∑m=07∑n=07f(m,n)cos((2m+1)uπ16)cos((2n+1)vπ16)
F(u,v) = \frac{c(u)}{2}\frac{c(v)}{2} \sum_{m=0}^7\sum_{n=0}^7f(m,n)cos(\frac{(2m+1)u\pi}{16})cos(\frac{(2n+1)v\pi}{16})
F(u,v)=2c(u)2c(v)m=0∑7n=0∑7f(m,n)cos(16(2m+1)uπ)cos(16(2n+1)vπ)
熵编码
熵编码需要离散信号的先验概率分布,该分布称为熵模型。
基于神经网络的编解码,将原始图像x转换为隐特征y,对该特征做熵编码。
注意区分y的边缘分布与熵模型,熵模型是参数化的。
神经网络学习获取估计熵模型的能力,即变分自编码器VAE。
Balle 2017的论文称与VAE相似。
量化
简单理解是从连续变量离散化为离散变量。
例子
JPEG 编码流程
图像分块,每块做DCT。
量化,使用一张精心设计的量化表,保留低频信息,去除高频信息。
zig-zag,每块的DC(直流部分)具体用Differential Pulse Modulation,相邻块间DC的差而非DC本身被压缩。
DPCM与RLE
霍夫曼编码与算术编码
JPEG 2000
Discrete Wavelet Transform是该技术的基础
JPEG 2000 包含Motion JPEG 2000,成为数字电影的视频编码标准。
视频编码
I帧:关键帧,自带全部信息的独立帧,完整画面。进行帧内编码。
P帧: 预测编码帧,对前面的I、P帧有依赖性。进行帧间编码。
B帧:双向预测编码帧,以前后帧为参考帧。不适合实时传输。
H264
x264代码
- 主函数:初始化参数
x264_param_t
,根据参数分配帧等内。
C语言
#define x264_encoder_glue1(x,y) x##y
质量评价
编码效果的评价包括主客观评价和客观评价。
客观评价指标
-
峰值信噪比( peak signal noise ratio)
PSNR=10lg[(2n−1)MSE] PSNR = 10lg[\frac{(2^n-1)}{MSE}] PSNR=10lg[MSE(2n−1)]
MSE为原图与编解码后图像的像素差的均方差;工程中首先求各张图像的MSE,再求多个数值的均值。 -
structural similarity
国际标准
ITU提出的H.26x系列
ISO/IEC提出的MPEG系列
1 Chroma Subsampling
Resolution of Cb Cr can be reduced by half or more.
Huffman coding.
Arithmetic encoding
Psychoacoustics
Psychovisuals
AI-codec
目标函数
Loss=λR+D
Loss = \lambda R+D
Loss=λR+D
编码参数
https://stackoverflow.com/questions/40668616/whats-the-difference-with-crf-and-qp-in-ffmpeg
qp、crf参数对比
https://slhck.info/video/2017/02/24/crf-guide.html
Constant Rate Factor is a little more sophisticated than that. It will compress different frames by different amounts, thus varying the QP as necessary to maintain a certain level of perceived quality.
进一步参考https://www.codenong.com/cs105772872/
QP参数的区间 0-51 https://www.vcodex.com/news/h264-quantization-parameter/
GPU并行编解码
https://stackoverflow.com/questions/44510765/gpu-accelerated-video-processing-with-ffmpeg
参考
- 数字视频编码技术原理
- A Concise Introduction to Data Compression ISBN-9781848000728