bd_rate.m 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. #!/usr/bin/octave -qf
  2. warning("off","Octave:nested-functions-coerced");
  3. warning("on","Octave:missing-semicolon");
  4. args=argv();
  5. if size(args,1)!=2
  6. printf("usage: ./bd_rate.sh <RD-1.out> <RD-2.out>\n");
  7. printf("influential environment variables:\n");
  8. printf("TYPE: piecewise-linear or cubic-polyfit\n");
  9. printf("MIN_BPP, MAX_BPP: Bounds, in bits per pixel, for curve integration.\n");
  10. printf(" Ignore rate %% if this range is small.\n");
  11. return
  12. end
  13. TYPE=getenv("TYPE");
  14. if strcmp(TYPE,"")
  15. TYPE="piecewise-linear";
  16. end
  17. MIN_BPP=getenv("MIN_BPP");
  18. if strcmp(MIN_BPP,"")
  19. min_bpp = 0;
  20. else
  21. min_bpp = str2double(MIN_BPP);
  22. if isnan(min_bpp)
  23. printf("MIN_BPP must be a floating-point number.");
  24. return;
  25. end
  26. end
  27. MAX_BPP=getenv("MAX_BPP");
  28. if strcmp(MAX_BPP,"")
  29. max_bpp = Inf;
  30. else
  31. max_bpp = str2double(MAX_BPP);
  32. if isnan(max_bpp)
  33. printf("MAX_BPP must be a floating-point number.");
  34. return;
  35. end
  36. end
  37. if min_bpp >= max_bpp
  38. printf("MAX_BPP must be greater than MIN_BPP.");
  39. return;
  40. end
  41. switch (TYPE)
  42. case "piecewise-linear"
  43. t=1;
  44. case "cubic-polyfit"
  45. t=2;
  46. % case "two-point-monotone-cubic-spline"
  47. % t=3;
  48. % case "three-point-monotone-cubic-spline"
  49. % t=4;
  50. % case "cubic-spline-interp"
  51. % t=5;
  52. % case "shape-preserving-cubic-hermite-interp"
  53. % t=6;
  54. otherwise
  55. printf("Invalid type: %s\n",TYPE);
  56. return
  57. endswitch
  58. rd1=load("-ascii",args{1});
  59. rd2=load("-ascii",args{2});
  60. rd1=flipud(sortrows(rd1,1));
  61. rd2=flipud(sortrows(rd2,1));
  62. rate1=rd1(:,3)*8./rd1(:,2);
  63. rate2=rd2(:,3)*8./rd2(:,2);
  64. pin = program_invocation_name;
  65. chdir(pin(1:(length(pin)-length(program_name))));
  66. [psnr_rate,psnr_dsnr]=bjontegaard([rate1,rd1(:,4)],[rate2,rd2(:,4)],t,min_bpp,max_bpp);
  67. [psnrhvs_rate,psnrhvs_dsnr]=bjontegaard([rate1,rd1(:,5)],[rate2,rd2(:,5)],t,min_bpp,max_bpp);
  68. [ssim_rate,ssim_dsnr]=bjontegaard([rate1,rd1(:,6)],[rate2,rd2(:,6)],t,min_bpp,max_bpp);
  69. [fastssim_rate,fastssim_dsnr]=bjontegaard([rate1,rd1(:,7)],[rate2,rd2(:,7)],t,min_bpp,max_bpp);
  70. if ((min_bpp != 0) || (max_bpp != Inf))
  71. printf(" DSNR (dB)\n");
  72. printf(" PSNR %0.5f\n",psnr_dsnr);
  73. printf(" PSNRHVS %0.5f\n",psnrhvs_dsnr);
  74. printf(" SSIM %0.5f\n",ssim_dsnr);
  75. printf("FASTSSIM %0.5f\n",fastssim_dsnr);
  76. else
  77. printf(" RATE (%%) DSNR (dB)\n");
  78. printf(" PSNR %0.5f %0.5f\n",psnr_rate,psnr_dsnr);
  79. printf(" PSNRHVS %0.5f %0.5f\n",psnrhvs_rate,psnrhvs_dsnr);
  80. printf(" SSIM %0.5f %0.5f\n",ssim_rate,ssim_dsnr);
  81. printf("FASTSSIM %0.5f %0.5f\n",fastssim_rate,fastssim_dsnr);
  82. endif