我想很多朋友在解码器输出时都会看到PSNR等于0的情况,这代表了什么意思呢?这表示你解码得到的图像和参考图像是一致的。下面基于baseline的情况详细说明一下。

首先看ldecod.c中的main()函数

init_conf(input, argv[1]);

img->idr_psnr_number=input->ref_offset;

显然这边的init_conf()是从decoder.cfg配置文件中读取数据,并且input->ref_offset对应的是配置文件中的SNR computation offset的值,在默认的情况下,JM8.6设置为0。

接着看image.c中的find_snr()函数,这就是用来计算PSNR数值的。

if (psnrPOC==0 && img->psnr_number)

img->idr_psnr_number=img->psnr_number + 1;

img->psnr_number=max(img->psnr_number,img->idr_psnr_number+psnrPOC);

frame_no = img->idr_psnr_number+psnrPOC;

这边计算出了frame_no的值,这个变量代表了什么含义,个人认为,应该是表示当前解码图像的参考图像(这个参考图像并不是指ListX中的,而是指参考序列中的)序号,为什么这么认为,请看下面。

rewind(p_ref);//使文件的位置指针重新返回文件的开头

for (i=0; i<frame_no; i++)

{

status = fseek (p_ref, (long) p->size_y* (long) (p->size_x*3/2), SEEK_CUR);

if (status != 0)

{

snprintf(errortext, ET_SIZE, "Error in seeking frame number: %d", frame_no);

fprintf(stderr, "%s", errortext);

return;

}

}

这段代码什么含义呢,很清楚,看下面的图。

接着看下面的求亮度PSNR的代码,色度的类似。

for (j=0; j < p->size_y; j++)

for (i=0; i < p->size_x; i++)

imgY_ref[j][i]=fgetc(p_ref);

//以frame_no=3的情况,那么此时imgY_ref就是得到了Ref3的亮度数据

img->quad[0]=0;

diff_y=0;

for (j=0; j < p->size_y; ++j)

{

for (i=0; i < p->size_x; ++i)

{

diff_y += img->quad[abs(p->imgY[j][i]-imgY_ref[j][i])];

}

}

//比较参考图像和解码图像并求得SAD

if (diff_y != 0)

snr->snr_y=(float)(10*log10(65025*(float)(p->size_x)*(p->size_y)/(float)diff_y));

else

snr->snr_y=0;

//如果前面的diff_y等于0,那么PSNR就是0,反之,按公式求

分析了这么多,可能大家还是不明白原因,那么我想说,一切根源其实就在decoder.cfg配置文件中SNR computation offset的值的选取,如果取默认的0,那么在求diff_y的时候,就是计算当前解码图像和对应序号的参考图像差值,如果取1,那么就是计算当前解码图像和后一序号的参考图像的差值,以此类推。因此我们不难看出,当SNR computation offset的值为0,且解码图像没有误码的情况,跟它序号相同的参考图像比较的diff_y肯定是0,相应的,根据上面的代码,那么最后求得的PSNR肯定也是0拉。

参考:http://blog.csdn.net/zhangji1983/article/details/1571042

解码器输出PSNR为0表示什么相关推荐

  1. NLP-预训练模型-2019-NLU+NLG:BART【Bert+GPT的泛化Seq2Seq模型】【噪声破坏后的原文本喂给编码器,解码器输出原文本】【噪音方案:文本填充(文本片段用单个掩码替换)】

    <原始论文:BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translat ...

  2. printf(%d, -10u); 这个输出什么呀, 0或1?

    printf("%d", -1<0u); 这个输出什么呀, 0或1? 周银辉 既然我这么问了, 那么答案自然不是1,而是0 看看下面的代码: 对于-1+0u输出为-1,似乎理 ...

  3. 键盘录入一个正整数,把它的各个位上的数字倒着排列形成一个新的整数并输出。 例如:12345 数出54321 78760 输出6787(0省去)

    package com.coffn.demos; /*** 4.键盘录入一个正整数,把它的各个位上的数字倒着排列形成一个新的整数并输出.例如:12345 数出54321 78760 输出6787(0省 ...

  4. 为什么C语言输出结果总是1,c语言编程问题这个题我哪里错了输出结果总是0

    c语言编程问题这个题我哪里错了输出结果总是0 答案:2  信息版本:手机版 解决时间 2020-05-03 18:57 已解决 2020-05-03 06:15 编写程序,输入两个正整数m和n(100 ...

  5. 判断输出,输入0,1,2,3,输出aaaa,bbbbb,cccc,dddd(c语言)

    #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include "main ...

  6. IT66311 是一款单输入、单输出 HDMI 2.0 重新定时缓冲器,支持高达 6.0Gbps 的信令速率。

    IT66311 是一款单输入.单输出 HDMI 2.0 重新定时缓冲器,支持高达 6.0Gbps 的信令速率.它符合最新的HDMI 2.0a规范,并向后兼容HDMI1.4规范.凭借6.0Gbps功能, ...

  7. Matlab/Admas联合仿真提示 输入位移曲线 输出速度曲线为0的解决方法

    Matlab/Admas联合仿真 输入位移时输出速度为0的解决方法 解决方法:将Adams Solver type(求解器类型)由C++改为Fortran就可以解决. 建立一个小球,添加一个与地面连接 ...

  8. java将0到9随机输出_生成0到9之间的随机整数

    回答(20) 2 years ago 对于您给出的示例(从0开始直到9的整数),最干净的解决方案如下: from random import randrange randrange(10) 2 yea ...

  9. php无线级输出数据,thinkphp5.0无限极分类及格式化输出

    首先我们来看数据表 从上图中可以发现,中国下有贵州,北京两个子节点,而北京有天安门一个子节点,纽约的子节点是"纽约的子类". 从pid为0看出,中国和纽约是顶级节点. 因为贵州的p ...

  10. 如何使用predict()输出预测结果 以及 输出值转换为0/1值。

    首先,大家要明白一点,Keras框架能使用的函数是predict和predict_classes:Sklearn中能使用的函数是predict和predict_proba. 1.predict函数:训 ...

最新文章

  1. Ubuntu12.04配置JDK1.8
  2. Websphere MQ 开发实例
  3. Yii2.0学习资源
  4. 用ORACHK自己主动化检查数据库系统的健壮性
  5. 【设计模式】工厂方法模式 Factory Method Pattern
  6. oracle怎样把查询的null转换为0
  7. element ui 多个子组件_vue前端UI框架,一点都不圆润,盘它!
  8. Android WebView 调起H5支付,提示商家参数格式有误
  9. 安装与优化   98
  10. 100 美元一行代码,开源软件到底咋赚钱?
  11. 修改服务器的maxpostsize的值,maxPostSize属性改变tomcat的post请求的请求体大小设置...
  12. iOS自己实现二维码生成与扫描
  13. LDO电路设计以及选型的几个重要参数
  14. jquery实现星星闪烁功能
  15. java通过filter单点登陆
  16. OJ-3084 返回指针的函数
  17. HTML form表单 input输入框
  18. shell小练(二)(图形千变万化)
  19. python3.5怎么打开_Python3.5文件修改操作实例分析
  20. 如何删除gitlab上面的文件夹

热门文章

  1. linux进程间通信-概述
  2. Android界面布局基本属性
  3. 软件工程之系统建模篇【设计接口类模型】
  4. php中include包含文件路径查找过程
  5. 【原创】在Windows 环境下利用SVN和Apache以及Ankh配置源代码管理服务
  6. 一个计算周次和本周时间范围的代码(c#)
  7. android 方法不会覆盖或实现超类型的方法,React Native Android:方法不会覆盖或实现超类型的方法...
  8. android apk 在线分析,apkanalyzer
  9. struts标签logic:iterate的用法
  10. [Jsoi2010]连通数