帧内帧间预测
视频编码中的关键步骤——转换、量化
最常见的是DCT,全称为Discrete Cosine Transform,即离散余弦变换。DCT变换属于傅里叶变换的一种
DCT将图像分成由不同频率组成的小块,然后进行量化。在量化过程中,舍弃高频分量,剩下的低频分量被保存下来用于后面的图像重建。
左上角多为低频分量,右下角多为高频分量
高频低频
低频就是颜色缓慢地变化,也就是灰度缓慢地变化,就代表着那是连续渐变的一块区域,这部分就是低频。
高频就是频率变化快。图像中什么时候灰度变化快,就是相邻区域之间灰度相差很大。
感性上来讲,图像越杂乱的部分,频率越高,例如边界;图像越柔和的部分,频率越低,比如一大片天空。换句话来讲就是梯度越大的地方,频率越高
注意:只有当进行傅里叶变换后才有低频和高频之分(DCT属于傅里叶变换的一种),低频一般是大范围大尺度的信息,也就是背景,而高频反映的是小范围细节信息。
Z字型扫描
为什么要Z字型扫描?因为在量化后,右下角的是0,采用Z字型扫描后,可以保证后续数据全为0,利于熵编码的压缩。
帧内预测
帧内预测是指利用视频帧的空域相关性,使用当前帧中已编码部分的像素值来预测当前像素,从而达到去除空域冗余的目的。
编码器将多张图像进行编码后生产成一段一段的 GOP ( Group of Pictures ) , 解码器在播放时则是读取一段一段的 GOP 进行解码后读取画面再渲染显示。GOP ( Group of Pictures) 是一组连续的画面,由一张 I 帧和数张 B / P 帧组成。
角度帧内预测
帧间预测
帧间预测主要包含运动估计和运动补偿。
实验
配置opencv
.h文件是头文件,包含了类、函数、变量的声明,用于在源代码文件中引用和访问这些声明。头文件通常包含函数和类的定义,但不包含实际的实现代码。当#include <opencv2/opencv.hpp>报错时,即为.h文件没正确配置。
.dll文件是动态链接库文件,包含了编译好的目标代码,在程序运行时被加载进内存中。没配置好时程序会报错,缺少….dll。
.lib文件(特指随dll文件生成时产生的.lib文件)提供了链接时需要的符号和引用信息。会被完整地复制到最终的可执行文件中,以便在编译和链接过程中正确地引用和链接dll中的目标函数。在程序实际调用opencv函数处报错则是.lib文件没有成功配置。
修改 VVCSoftware_VTM-VTM-15.0\cfg\encoder_randomaccess_vtm_gop16
InternalBitDepth为8
帧内预测
解决jupyter notebook无法找到虚拟环境的问题
记录:我在anaconda3激活了虚拟环境,但是jupyter notebook中找不到该环境
解决方案:在该环境下下载这个库
conda install ipykernel
conda install nb_conda