HEVC学习之琐事(四):如何计算PSNR
2023-09-14 08:57:58 时间
p 在HEVC官方参考软件HM中,计算PSNR的代码如下,当然还有很多工具计算PSNR。 /p
p 现在提供一种很方便的工具,只需给出原始YUV文件和解码或重构后的YUV文件就可以计算出其PSNR。软件下载地址为: a target= _blank href= http://download.csdn.net/detail/frd2009041510/8240547 点击打开链
超越最新视频压缩标准H.266,字节跳动编码新技术让视频缩小13% 联合视频专家组 JVET 官网显示,字节跳动设立在美国的研发团队于今年初发起了一项视频压缩技术提案,并命名为 DAM(Deep-filtering with Adaptive Model-selection)。相比 H.266/VVC 最新标准,DAM 能够为视频编码性能带来显著提升,亮度信号 Y 可实现 10.28% 的性能增益。两个色度信号 U 和 V 的性能增益也分别达到 28.22% 和 27.97%。这是业界公开的单个智能编码工具的最佳性能增益。
如何将图像压缩10倍?阿里工程师有个大胆的想法! 小叽导读:如何将单张图片由120k 压缩到了平均13k?阿里工程师做到了!并且将欧式距离计算平均耗时做到9微秒。今天,阿里巴巴技术专家萧冷将公开从初步尝试到优化的过程,希望对你有所帮助。
Netflix的视频算法主管Anne Aaron撰文对视频编解码的未来发展方向,基于块的混合编码,画质评定新方法,以及创新思维。
《数字视频和高清:算法和接口》一1.4.1量化 本节书摘来华章计算机《数字视频和高清:算法和接口》一书中的第1章 ,第1.4.1节, [加]查尔斯·波因顿(Charles Poynton)著 刘开华 褚晶辉 马永涛 吕卫 宫霄霖 等译 译更多章节内容可以访问云栖社区“华章计算机”公众号查看。
《数字视频和高清:算法和接口》一3.4“编码100”难题和非线性图像编码 本文讲的是数字视频和高清:算法和接口一3.4“编码100”难题和非线性图像编码,本节书摘来华章计算机《数字视频和高清:算法和接口》一书中的第3章,第3.4节, George T.Heineman Gary Pollice StanleySelkow 著杨晨 曹如进 译 译更多章节内容可以访问云栖社区“华章计算机”公众号查看。
用更少的钱看更清晰的视频——详谈阿里云窄带高清 在云栖社区在线技术培训上,阿里云高级视频专家江文斐为大家详细讲述了阿里窄带高产品的工作原理和使用用场景。通过使用窄带高清,能够让客户在成本和视觉体验上达到最佳平衡。
在HEVC官方参考软件HM中,计算PSNR的代码如下,当然还有很多工具计算PSNR。
现在提供一种很方便的工具,只需给出原始YUV文件和解码或重构后的YUV文件就可以计算出其PSNR。软件下载地址为:点击打开链接
为了验证其正确性,本人测试了一下,结果如下图所示。
下图是HM得出的结果:
下图是该软件测出的结果:
结果一致。
Void TEncGOP::xCalculateAddPSNR( TComPic* pcPic, TComPicYuv* pcPicD, const AccessUnit accessUnit, Double dEncTime ) Int x, y; UInt64 uiSSDY = 0; UInt64 uiSSDU = 0; UInt64 uiSSDV = 0; Double dYPSNR = 0.0; Double dUPSNR = 0.0; Double dVPSNR = 0.0; //===== calculate PSNR ===== Pel* pOrg = pcPic - getPicYuvOrg()- getLumaAddr(); Pel* pRec = pcPicD- getLumaAddr(); Int iStride = pcPicD- getStride(); Int iWidth; Int iHeight; iWidth = pcPicD- getWidth () - m_pcEncTop- getPad(0); iHeight = pcPicD- getHeight() - m_pcEncTop- getPad(1); Int iSize = iWidth*iHeight; for( y = 0; y iHeight; y++ ) for( x = 0; x iWidth; x++ ) Int iDiff = (Int)( pOrg[x] - pRec[x] ); uiSSDY += iDiff * iDiff; pOrg += iStride; pRec += iStride; iHeight = 1; iWidth = 1; iStride = 1; pOrg = pcPic - getPicYuvOrg()- getCbAddr(); pRec = pcPicD- getCbAddr(); for( y = 0; y iHeight; y++ ) for( x = 0; x iWidth; x++ ) Int iDiff = (Int)( pOrg[x] - pRec[x] ); uiSSDU += iDiff * iDiff; pOrg += iStride; pRec += iStride; pOrg = pcPic - getPicYuvOrg()- getCrAddr(); pRec = pcPicD- getCrAddr(); for( y = 0; y iHeight; y++ ) for( x = 0; x iWidth; x++ ) Int iDiff = (Int)( pOrg[x] - pRec[x] ); uiSSDV += iDiff * iDiff; pOrg += iStride; pRec += iStride; Int maxvalY = 255 (g_bitDepthY-8); Int maxvalC = 255 (g_bitDepthC-8); Double fRefValueY = (Double) maxvalY * maxvalY * iSize; Double fRefValueC = (Double) maxvalC * maxvalC * iSize / 4.0; dYPSNR = ( uiSSDY ? 10.0 * log10( fRefValueY / (Double)uiSSDY ) : 99.99 ); dUPSNR = ( uiSSDU ? 10.0 * log10( fRefValueC / (Double)uiSSDU ) : 99.99 ); dVPSNR = ( uiSSDV ? 10.0 * log10( fRefValueC / (Double)uiSSDV ) : 99.99 ); /* calculate the size of the access unit, excluding: * - any AnnexB contributions (start_code_prefix, zero_byte, etc.,) * - SEI NAL units UInt numRBSPBytes = 0; for (AccessUnit::const_iterator it = accessUnit.begin(); it != accessUnit.end(); it++) UInt numRBSPBytes_nal = UInt((*it)- m_nalUnitData.str().size()); #if VERBOSE_RATE printf("*** %6s numBytesInNALunit: %u\n", nalUnitTypeToString((*it)- m_nalUnitType), numRBSPBytes_nal); #endif if ((*it)- m_nalUnitType != NAL_UNIT_PREFIX_SEI (*it)- m_nalUnitType != NAL_UNIT_SUFFIX_SEI) numRBSPBytes += numRBSPBytes_nal; UInt uibits = numRBSPBytes * 8; m_vRVM_RP.push_back( uibits ); //===== add PSNR ===== m_gcAnalyzeAll.addResult (dYPSNR, dUPSNR, dVPSNR, (Double)uibits); TComSlice* pcSlice = pcPic- getSlice(0); if (pcSlice- isIntra()) m_gcAnalyzeI.addResult (dYPSNR, dUPSNR, dVPSNR, (Double)uibits); if (pcSlice- isInterP()) m_gcAnalyzeP.addResult (dYPSNR, dUPSNR, dVPSNR, (Double)uibits); if (pcSlice- isInterB()) m_gcAnalyzeB.addResult (dYPSNR, dUPSNR, dVPSNR, (Double)uibits); Char c = (pcSlice- isIntra() ? I : pcSlice- isInterP() ? P : B); if (!pcSlice- isReferenced()) c += 32; #if ADAPTIVE_QP_SELECTION printf("POC %4d TId: %1d ( %c-SLICE, nQP %d QP %d ) %10d bits", pcSlice- getPOC(), pcSlice- getTLayer(), pcSlice- getSliceQpBase(), pcSlice- getSliceQp(), uibits ); #else printf("POC %4d TId: %1d ( %c-SLICE, QP %d ) %10d bits", pcSlice- getPOC()-pcSlice- getLastIDR(), pcSlice- getTLayer(), pcSlice- getSliceQp(), uibits ); #endif printf(" [Y %6.4lf dB U %6.4lf dB V %6.4lf dB]", dYPSNR, dUPSNR, dVPSNR ); printf(" [ET %5.0f ]", dEncTime ); for (Int iRefList = 0; iRefList iRefList++) printf(" [L%d ", iRefList); for (Int iRefIndex = 0; iRefIndex pcSlice- getNumRefIdx(RefPicList(iRefList)); iRefIndex++) printf ("%d ", pcSlice- getRefPOC(RefPicList(iRefList), iRefIndex)-pcSlice- getLastIDR()); printf("]");
超越最新视频压缩标准H.266,字节跳动编码新技术让视频缩小13% 联合视频专家组 JVET 官网显示,字节跳动设立在美国的研发团队于今年初发起了一项视频压缩技术提案,并命名为 DAM(Deep-filtering with Adaptive Model-selection)。相比 H.266/VVC 最新标准,DAM 能够为视频编码性能带来显著提升,亮度信号 Y 可实现 10.28% 的性能增益。两个色度信号 U 和 V 的性能增益也分别达到 28.22% 和 27.97%。这是业界公开的单个智能编码工具的最佳性能增益。
如何将图像压缩10倍?阿里工程师有个大胆的想法! 小叽导读:如何将单张图片由120k 压缩到了平均13k?阿里工程师做到了!并且将欧式距离计算平均耗时做到9微秒。今天,阿里巴巴技术专家萧冷将公开从初步尝试到优化的过程,希望对你有所帮助。
Netflix的视频算法主管Anne Aaron撰文对视频编解码的未来发展方向,基于块的混合编码,画质评定新方法,以及创新思维。
《数字视频和高清:算法和接口》一1.4.1量化 本节书摘来华章计算机《数字视频和高清:算法和接口》一书中的第1章 ,第1.4.1节, [加]查尔斯·波因顿(Charles Poynton)著 刘开华 褚晶辉 马永涛 吕卫 宫霄霖 等译 译更多章节内容可以访问云栖社区“华章计算机”公众号查看。
《数字视频和高清:算法和接口》一3.4“编码100”难题和非线性图像编码 本文讲的是数字视频和高清:算法和接口一3.4“编码100”难题和非线性图像编码,本节书摘来华章计算机《数字视频和高清:算法和接口》一书中的第3章,第3.4节, George T.Heineman Gary Pollice StanleySelkow 著杨晨 曹如进 译 译更多章节内容可以访问云栖社区“华章计算机”公众号查看。
用更少的钱看更清晰的视频——详谈阿里云窄带高清 在云栖社区在线技术培训上,阿里云高级视频专家江文斐为大家详细讲述了阿里窄带高产品的工作原理和使用用场景。通过使用窄带高清,能够让客户在成本和视觉体验上达到最佳平衡。
相关文章
- 迁移 Express 到函数计算
- 使用函数计算三步实现深度学习 AI 推理在线服务
- 【学习总结】Master课程 之 虚拟化与云计算
- 《从零开始学Swift》学习笔记(Day 50)——扩展计算属性、方法
- 肯德尔(Kendall)相关系数概述及Python计算例
- MATLAB学习笔记 - 计算特征向量手动执行PCA
- 机器学习笔记 - 2、CNN中的参数计算
- 数学建模学习笔记(十)语言情感计算( TextBlob与SnowNLP)
- [GPIO]推荐一种超简单的硬件位带bitband操作方法,让变量,寄存器控制,IO访问更便捷,无需用户计算位置
- Atitit 图像处理 深刻理解梯度原理计算.v1 qc8
- 7-1 计算物体自由下落的距离 (5 分)
- CV之FD之HOG:图像检测之基于HOG算法、简介、代码实现(计算图像相似度)之详细攻略
- Project:圆柱滚子轴承接触表面应力计算——GB T18254-2002高碳铬轴承钢
- DL之AF:机器学习/深度学习中常用的激活函数(sigmoid、softmax等)简介、应用、计算图实现、代码实现详细攻略
- 【华为OD机试】1001 - 计算某字符出现次数
- 跳出数据计算拯救人智能
- 机器学习sklearn 计算recall , precison , F1
- C语言中数组长度的计算详解
- 【Linux 内核】CFS 调度器 ② ( CFS 调度器 “ 权重 “ 概念 | CFS 调度器调度实例 | 计算进程 “ 实际运行时间 “ )
- 一脸懵逼学习Storm的搭建--(一个开源的分布式实时计算系统)
- 改变PCM采样点计算来控制音量
- tf中计算图 执行流程学习【转载】
- 力扣-计算特殊奖金
- 云计算之OpenStack学习总结与分享
- MySQL学习6:常用计算函数
- 抢先一步:如何使用FPGA加速深度学习计算
- [ 云计算 | Azure ] Chapter 03 | 描述云计算运营中的 CapEx 与 OpEx,如何区分 CapEx 与 OpEx