5

我正在研究一个使用 MATLAB 实现 HEVC 帧内预测的项目。我已经阅读了很多文章来在 MATLAB 中编写代码,最后我做到了。(最有用的一篇是这篇文章: HEVC 标准的内部编码

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

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

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

在实施 HEVC 内部预测时,我也有一些疑问和问题:

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

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 成本函数会影响为每个块选择最佳模式的过程吗?如果是这样,您是否有任何其他比 SAE 更准确的方法来替代 HEVC 成本函数来为每个像素选择最佳预测模式?

4- 出于比较 h.265 (HEVC) 和 h.264 (AVC) 帧内预测的目的,HEVC 重建图像的总 SAE 应小于 AVC。但是,在我的结果中并非如此,AVC 的 SAE 小于 HEVC。我找不到导致此问题的原因。有人可以帮助我吗?

4

1 回答 1

5

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

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

查看标准以获取更多信息。关于您关于根据块大小调整一些数字的问题:这种所谓的“强过滤”应该只适用于 32x32 帧内块的参考像素。对于较小的块,只能使用您文章中的“参考样本平滑”。再次,如果您想了解详细信息,请查看标准中的同一部分。

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

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

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

其他内容: 1 - 虽然您可以在 HEVC 中拥有 64x64 帧间预测块,但您最多只能拥有 32x32 帧内块。2 - 在 matlab 中使用整数时要小心,这也曾经搞砸了我所有的计算。考虑一下您使用的整数位数是否足够,或者切换到双精度数。当您加载图像时,这些值默认为 8 位无符号整数,您必须对它们进行类型转换以进行某些计算。

于 2014-07-28T11:54:49.363 回答