视频编码基础
视频是一系列图像基于时间的集合.
相邻帧差异一般情况下较小.
为了最大限度压缩,一般采用偏差的编码思想.
此处P1称作基准帧或参照帧.
帧间压缩
每一个帧组的帧具有较强的联系关系,
每个帧组的第一帧为整个帧组的基准帧.
一般两个帧组之间的差异较大.
基准帧称为I帧
P帧为仅仅参考I帧的帧.
B帧为参考前后两帧的帧.
解码顺序为I-P-B.
运动估计
一个块在两帧之间移动了一个相对量,记录这个相对量可以避免重新编码占用空间.
通过遍历查找相似块,可以得出这个偏移向量.
上图的
就是要找的偏移向量.
帧内预测
帧内的内容也可能有强相关性,尤其是相邻的内容.帧内压缩目标是对单个帧(I)尽可能的压缩.
对于一个块.预测所需的信息是这些相邻块的字.
几种预测模式.根据预测模式的不同会对隐写的位置的选择产生影响.
16*16的预测模式.
一般来说,内容变化越不剧烈的地方使用的块越大.如下图,
HEVC/H.265标准提供了更多样的块尺寸选择.最多能到64*64.
基于帧内预测的隐写选择
误差矩阵
指套用在某一块上的隐写造成的隐写后视频和原视频块相比造成的误差.
在4*4块的某一处嵌入数值
.误差矩阵如下.
帧内漂移
基于上面提到的帧内预测模式,某一块的内容改变会造成预测路径上一系列的块的内容改变,从而造成大规模的失真.隐写之前必须考虑这一点并尽可能消除影响.
解决问题的关键是阻断误差的传播路径,即关键像素.
对某一块数据,相邻块用到的数据称为关键像素.也就是右侧和下方.
误差补偿
(推导略)对于一个4*4像素矩阵,在某个地方嵌入误差 ,则在另一个恰当的地方嵌入 可以使得误差矩阵的边缘行或列为0,从而阻断误差的传播.这样的位置对 称为耦合数对.
数对设置规则
- 如果要让行为0,则 在同一行.列也是这样.
- 以使得行为0为例,如果
在第一列,则
在第三列,补偿系数
;
如果 在第二列,则 在第四列,补偿系数 ;
Sample:
Sample:
此时误差矩阵的左右列为0.
传播途径的阻断
根据上面的理论,可以通过补偿消除行或列的影响.但是帧内预测有很多种模式,在使用行或列补偿是要考虑相关邻块的预测形式.
4*4,16*16的预测模式
类型一 右阻断
右邻块是0,3,7类型预测或者16*16的0类型预测时,该块的最后一列不会作为右边的参考像素,此时可以不用考虑一列的误差,而只考虑最后一行的误差.使用行补偿将最后一行置0.
条件二 列阻断
此时不会使用当前块的最后一行作为预测块,转而考虑消除最后一列的影响.思想同上,使用列补偿.
基于纹理特征的隐藏基本流程
熵解码-检索待提取块-Type1/Type2-嵌入-重编码