man*_*anp 5 matlab h.264 h.265 hevc
我正在开发一个用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
Run Code Online (Sandbox Code Playgroud)
2-(>>)移位运算符,就像正常除法(例如>> 5等于有符号数除以32)或者是有符号数的二进制移位?(由于与某些角度模式相关的负位移,我说有符号数.同样值得注意的是,无符号数的逐位移位给出了与有符号数相比完全不同的结果)
3-为了计算每种模式的成本,我使用SAE(绝对误差之和)作为简化的全部成本函数的替代.
C = DHad + ? · Rmode (HEVC cost function)
Run Code Online (Sandbox Code Playgroud)
您是否认为使用SAE代替HEVC成本函数会影响为每个块选择最佳模式的过程?如果是这样的话,你有没有比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
Run Code Online (Sandbox Code Playgroud)
查看标准以获取更多信息。关于根据块大小调整一些数字的问题:这种所谓的“强过滤”应该只应用于 32x32 内部块的参考像素。对于较小的块,只能使用您文章中的“参考样本平滑”。如果您想了解详细信息,请再次查看标准中的同一部分。
2 - 在这些情况下,移位运算符表示绝对值的位移。请注意在 matlab 中对有符号数进行位移,有些函数会移动绝对值,有些函数会在考虑符号的情况下移动 K2 补码。
3 - 由于您的“项目是 HEVC 和 AVC 帧内预测之间的比较,以显示 HEVC 将提供更好的质量”,我想只使用 SAE 或平方误差总和 (SSE) 是有意义的。在我看来,如果您在 HEVC 成本函数中进行某种质量/比特率评估,则需要向项目中添加的不仅仅是内部预测,以便充分比较两种标准。
4 - 你是对的,结果应该是相反的。检查您对 SAE 的计算。还要检查标准中的规定部分是否正确执行了参考样本过滤。
其他内容: 1 - 虽然 HEVC 中可以有 64x64 帧间预测块,但最多只能有 32x32 帧内块。2 - 在 matlab 中使用整数时要小心,这也曾经搞砸了我的所有计算。想想你使用的整数的位数是否足够,或者切换到双精度。加载图像时,默认值是 8 位无符号整数,您必须对它们进行类型转换以进行某些计算。