HEVC(一)psnr原理以及计算方式

峰值信噪比经常用作图像压缩等领域中信号重建质量的测量方法,它常简单地通过均方差(MSE)进行定义。两个m×n单色图像I和K,如果一个为另外一个的噪声近似,那么它们的的均方差定义为:
image
其中,MAXI是表示图像点颜色的最大数值,如果每个采样点用 8 位表示,那么就是 255。

Int   iSize   = iWidth*iHeight;//m*nd

    UInt64 uiSSDtemp=0;
    for(Int y = 0; y < iHeight; y++ )
    {
      for(Int x = 0; x < iWidth; x++ )
      {
        Intermediate_Int iDiff = (Intermediate_Int)( pOrg[x] - pRec[x] );//遍历获取diff
        uiSSDtemp   += iDiff * iDiff;//diff的平方
      }
      pOrg += iOrgStride;//算上图像的stride边界 边界没有内容,但是会在图像中
      pRec += iRecStride;
    }
    const Int maxval = 255 << (pcPic->getPicSym()->getSPS().getBitDepth(toChannelType(ch)) - 8);//MAXI是表示图像点颜色的最大数值,如果每个采样点用 8 位表示,那么就是 255。现在获取当前ch的采样点比特位数,并进行位移
    const Double fRefValue = (Double) maxval * maxval * iSize;//MAXi的平方除以MSE,MSE=diff*diff/size,因此psnr等价于 (MAXi的平方*size)/(diff*diff)
    dPSNR[ch]         = ( uiSSDtemp ? 10.0 * log10( fRefValue / (Double)uiSSDtemp ) : 999.99 );//这块没看懂为什么有个999.99,大概是设个INF,防止读取时为空吧
    MSEyuvframe[ch]   = (Double)uiSSDtemp/(iSize);//每个像素块的均值

参考博客:
https://blog.csdn.net/xrinosvip/article/details/88569111

posted @ 2021-10-09 18:59  魏晋南北朝  阅读(693)  评论(0编辑  收藏  举报