通俗易懂——HEVC帧间预测简要知识点总结

帧间预测

预测编码分为帧内编码和帧间编码;本文主要简单介绍帧间编码的原理流程,帧间预测是基于块的运动估计方法和运动补偿技术完成对图像的像素值的预测。得到预测值之后与原图像值进行求差得到预测残差。通过对预测残差进行编码传输,达到对数据的大大压缩。预测残差通常是平坦的,很多残差值都接近于零,将残差信号作为后续模块的输入进行变换、量化,编码,可实现对视频信号的高效压缩。与预测残差一同进行变换、量化,编码的还有运动矢量。在解码端按照运动矢量,指明方向和位置,从已解码的临近参考帧中找到相应的块,用这个图像块与预测残差相加就得到当前帧的重建块数据。

1.帧间预测编码原理

帧间预测是利用图像帧与图像帧之间的相关性,也就是 视频时间域的相关性,通过已编码像素预测当前块的像素,有助于去除视频时域冗余,大大压缩数据。帧间预测编码比帧内预测编码压缩比要大得多。
帧间预测主要的工作是运动估计与运动补偿。

2.主要定义

ME:运动估计,为当前预测块在参考帧寻找一个最佳匹配块的过程。用这个匹配块作为预测值。与原图像像素值求差。
MC:运动补偿,在参考帧寻找最佳匹配块时进行像素插值。
MV:运动矢量,作为搜索最佳匹配块的指示作用,指示匹配块的位置的矢量。
MVP:运动矢量预测值,运动矢量也存在预测值,由相邻块的MV来预测当前块的MV,有了MVP就可以确定运动估计(MC)的起点和方向
MVC:实际的计算出的运动矢量
MVD:运动矢量残差,MVC-MVP

运动估计准则:常用的匹配准则主要有最小均方误差࿰

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的MATLAB代码示例,用于实现HEVC预测: ```matlab function [predBlock] = intra_predict(image, blockSize, row, col, mode) % image: 输入图像 % blockSize: 块大小 % row, col: 当前块的起始行和列 % mode: 预测模式 % 获取参考像素 switch(mode) case 0 % 模式0:DC预测 refBlock = image(row:blockSize + row - 1, col:blockSize + col - 1); p = mean2(refBlock); predBlock = ones(blockSize, blockSize) * p; case 1 % 模式1:水平预测 refBlock = image(row:blockSize + row - 1, col - 1); predBlock = repmat(refBlock, [1, blockSize]); case 2 % 模式2:垂直预测 refBlock = image(row - 1, col:blockSize + col - 1); predBlock = repmat(refBlock, [blockSize, 1]); case 3 % 模式3:左上角预测 refBlock = image(row - 1, col - 1); predBlock = ones(blockSize, blockSize) * refBlock; case 4 % 模式4:右上角预测 refBlock = image(row - 1, col + blockSize); predBlock = ones(blockSize, blockSize) * refBlock; case 5 % 模式5:左下角预测 refBlock = image(row + blockSize, col - 1); predBlock = ones(blockSize, blockSize) * refBlock; case 6 % 模式6:垂直右下预测 refBlock1 = image(row - 1, col + blockSize); refBlock2 = image(row - 2, col + blockSize); refBlock3 = image(row - 3, col + blockSize); refBlock4 = image(row - 4, col + blockSize); refBlock5 = image(row - 5, col + blockSize); refBlock6 = image(row - 6, col + blockSize); refBlock7 = image(row - 7, col + blockSize); refBlock = (refBlock1 + 2 * refBlock2 + 3 * refBlock3 + 4 * refBlock4 + 5 * refBlock5 + 6 * refBlock6 + 7 * refBlock7 + 8) / 16; predBlock = ones(blockSize, blockSize) * refBlock; case 7 % 模式7:水平右下预测 refBlock1 = image(row + blockSize, col - 1); refBlock2 = image(row + blockSize, col - 2); refBlock3 = image(row + blockSize, col - 3); refBlock4 = image(row + blockSize, col - 4); refBlock5 = image(row + blockSize, col - 5); refBlock6 = image(row + blockSize, col - 6); refBlock7 = image(row + blockSize, col - 7); refBlock = (refBlock1 + 2 * refBlock2 + 3 * refBlock3 + 4 * refBlock4 + 5 * refBlock5 + 6 * refBlock6 + 7 * refBlock7 + 8) / 16; predBlock = ones(blockSize, blockSize) * refBlock; end end ``` 请注意,此代码仅实现了HEVC预测的一些基本模式,可能需要根据您的特定需求进行更改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值