matlab - HEVC (h.265) 帧内预测

标签 matlab h.264 hevc h.265

我正在从事一个使用 MATLAB 实现 HEVC 帧内预测的项目。 我已经阅读了很多关于在 MATLAB 中编写代码的文章,最后我做到了。 (最有用的一篇是这篇文章: Intra Coding of the HEVC Standard )

该项目的主要目的是比较 HEVC 和 AVC 帧内预测,​​以表明 HEVC 将提供比 AVC 更好的重建图像质量,因此 HEVC 给出的最终 SAE(绝对误差总和)应该小于带有 AVC 的那个。 与根据图像每个区域的细节量进行动态 block 划分的 HEVC 解码器/编码器不同,根据我的主管的说法,对于图像上的每个帧内预测实现,我必须一次具有特定的 block 大小,即一次是 64x64,一次是 32x32,依此类推到 4x4。

现在我的工作中遇到了一个大问题,那就是 HEVC 的 SAE 远远大于 AVC。不知道为什么会这样?

如果需要,请告诉我稍后发布我的代码。

另外我对实现HEVC帧内预测有一些疑惑和疑问:

1- 下面的线性插值函数及其相关参数(根据引用的文章)是否随 block 大小而变化,或者对于不同的 block 大小始终相同?

Px,y = ((32 − wy )· Ri,0 + wy · Ri+1,0 + 16 ) >> 5
cy = (y · d) >> 5
wy = (y · d) &31

2- (>>) 移位运算符,就像一个普通的除法(例如 >> 5 等于一个有符号数除以 32)或者一个有符号数的二进制移位? (我说有符号数是因为与某些角度模式相关的负位移。另外值得注意的是,无符号数的逐位移位给出与有符号数完全不同的结果)

3- 为了计算每种模式的成本,我使用 SAE(绝对误差和)代替完整成本函数以进行简化。

C = DHad + λ · Rmode (HEVC cost function)

您认为使用 SAE 而不是 HEVC 成本函数会影响为每个 block 选择最佳模式的过程吗?如果是这样,您是否有任何其他比 SAE 更准确的方法来替代 HEVC 成本函数来为每个像素选择最佳预测模式?

4- 为了比较 h.265 (HEVC) 和 h.264 (AVC) 帧内预测,​​HEVC 重建图片的总 SAE 应小于 AVC。然而,我的结果并非如此,AVC 的 SAE 低于 HEVC。 我找不到导致这个问题的原因。有人可以帮助我吗?

最佳答案

1 - 实际上,本出版物中提到的线性插值公式并不完全正确。根据H.265标准第8.4.4.2.3节“相邻样本的过滤过程”,应为:

Px,y = ((63 − wy )· Ri,0 + wy · Ri+1,0 + 32 ) >> 6

查看standard了解更多信息。关于根据 block 大小调整某些数字的问题:这种所谓的“强过滤”应该只应用于 32x32 block 内的引用像素。对于较小的 block ,只能使用您文章中的“Reference Sample Smoothing”。再次检查 standard 中的同一部分如果您想了解详情。

2 - 在这些情况下,移位运算符表示绝对值的移位。请注意在 matlab 中对有符号数进行位移,有些函数会移动绝对值,有些会在考虑符号的情况下移动 K2 补码。

3 - 由于您的“项目是 HEVC 和 AVC 帧内预测之间的比较,以显示 HEVC 将提供更好的质量”,我想只使用 SAE 或误差平方和 (SSE) 是有意义的。在我看来,如果您像在 HEVC 成本函数中那样进行某种质量/比特率评估,您需要向项目中添加的不仅仅是帧内预测,​​以便充分比较两种标准。

4 - 你是对的,结果应该是相反的。检查您对 SAE 的计算。还要检查标准中的规定部分是否正确进行了引用样本过滤。

其他内容: 1 - 虽然在 HEVC 中可以有 64x64 帧间预测 block ,但最多只能有 32x32 帧内 block 。 2 - 在 matlab 中使用整数时要小心,这也曾经搞砸了我所有的计算。想想你用的整数的位数是不是够用,还是换成double。当您加载图像时,这些值默认为 8 位无符号整数,您必须对它们进行类型转换以进行某些计算。

关于matlab - HEVC (h.265) 帧内预测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24740212/

相关文章:

c++ - h264语法(P帧语法详解)

video - 使用 ffmpeg 组合小的 mp4 block ?

c - 寻找有关X265编码和解码的技术细节

matlab - matlab 中的 KroneckerDelta

matlab - 在 MATLAB 中绘制元胞数组

video - 使用 FFMPEG 将视频转换为 PowerPoint 2016 兼容的视频格式

android - 使用 ffmpeg for Android 编译 x265 并接收错误

FFMPEG hevc_nvenc "No NVENC capable devices found"与 NVidia GTX950M

html - 从 Matlab 获取网页 html 和 css 代码

matlab - 将 x 和 y 向量转换为网格