帧内预测帧与编码帧的PSNR

时间:2014-09-06 01:29:22

标签: matlab

我必须对视频帧执行帧内预测编码并计算其PSNR。我现在被要求采用相同的原始帧并对其进行编码,包括执行DCT,量化,反量化和反DCT。我必须计算编码帧的PSNR并将其与帧内预测帧进行比较。

帧内预测帧的值为53.37 db,编码帧的值为32.64 db。我应该使用直方图分析编码图像的概率分布。两个帧的直方图看起来非常相似,所以我实际上应该寻找什么呢?

修改

我计算PSNR的方法是获取原始帧和重建帧之间的差异,然后使用PSNR公式。代码段如下所示:

errorFrame = orgFrame - reconstFrame;    
y = 10*log10(255*255/mean(mean((errorFrame.^2))));

帧内预测帧和重构帧的PSNR应该是相同的值吗?我已经使用帧内预测和没有帧内预测的重建帧上传了重构帧的直方图

enter image description here

组织图看起来非常相似,为什么PSNR值如此不同?

1 个答案:

答案 0 :(得分:1)

PSNR在两个图像之间进行逐点比较。直方图整体捕获整个强度分布。例如,如果您的图像是:

A = [0 255;
     255 0]; 

......而另一个是:

B = [255 0; 
     0 255];

...让我们说原始图像是

C = [0 128; 
    128 0];. 

即使AB之间的直方图相同,PSNR也分别为9.06502.0344 dB。因此,我不会依赖直方图本身,因为它们只捕获全局信息。在本地看看。你可以看到一个人的质量高于另一个人。在直方图中,虽然直方图的大部分区域看起来相同,但直方图不是空间感知。换句话说,直方图中没有捕获像素的空间关系,正如您在上面给出的示例中看到的那样。例如,对于两个图像,您可以具有强度为80的15个像素,但是它们可以在每个图像中处于完全不同的位置。因此,与其他图像相比,您可以看到完全不同的图像,但如果计算每个强度的像素数量,只要每个强度的计数相等,直方图就会相等。

您可以看到AC相似,因为其中一个只是另一个的灰色版本。但是,B是关闭的,因为它具有白色像素,C中有暗像素,而C中有灰色像素时为暗像素。虽然A和B之间的直方图是相同的,但它们之间的实际内容与C相比有很大不同。

我确实意识到你需要比较两个图像之间的直方图/概率分布,但这个问题可能是故意问的。虽然你可以看到强度的分布是相对相同的,但是如果你分析两者之间的局部图像斑块,你肯定可以看到一个质量低于另一个。说实话,并根据个人经验进行叙述,你应该把PSNR带上一粒盐。仅仅因为一张图像的PSNR高于另一张图像并不一定意味着它的质量更好。事实上,有些图像的PSNR较低,但我认为它们的质量要好于PSNR较高的那些。

因此,当您回答问题时,请务必参考我在此处所说的所有内容。

tl;dr:尽管直方图看起来相同,但直方图并不具有空间意义。在直方图中不捕获像素的空间关系。因此,与其他图像相比,您可以看到完全不同的图像,但如果计算每个强度的像素数量,只要每个强度的计数相等,直方图就会相等。即使直方图不相等,做PSNR也会产生逐点差异,这种(有点)捕获像素的空间关系,从而解释了为什么PSNR是完全不同的。