文章出處
BDPSNR的運算多是通過Joel Jung所設計的excel的 宏函數來計算的, 不過Joel Jung并沒有提供源代碼, 而且有時候excel在使用上并不方便, Serge 用matlab實現了BDPSNR的計算,會比使用excel方便, 下面是源碼:
function avg_diff = bjontegaard2(R1,PSNR1,R2,PSNR2,mode)%bjontegaard2 Bjontegaard metric calculation% Bjontegaard's metric allows to compute the average gain in PSNR or the% average per cent saving in bitrate between two rate-distortion% curves [1]. % Differently from the avsnr software package or VCEG Excel [2] plugin this% tool enables Bjontegaard's metric computation also with more than 4 RD% points.% Fixed integration interval in version 2.%% R1,PSNR1 - RD points for curve 1% R2,PSNR2 - RD points for curve 2% mode - % 'dsnr' - average PSNR difference% 'rate' - percentage of bitrate saving between data set 1 and% data set 2%% avg_diff - the calculated Bjontegaard metric ('dsnr' or 'rate')% % (c) 2010 Giuseppe Valenzise%%% Bugfix 20130515% Original script contained error in calculation of integration interval.% It was fixed according to description and figure 3 in original% publication [1]. Script was verifyed using data presented in [3].% Fixed lines labeled as "(fixed 20130515)"%% (c) 2013 Serge Matyunin %%%% References:%% [1] G. Bjontegaard, Calculation of average PSNR differences between% RD-curves (VCEG-M33)% [2] S. Pateux, J. Jung, An excel add-in for computing Bjontegaard metric and% its evolution% [3] VCEG-M34. http://wftp3.itu.int/av-arch/video-site/0104_Aus/VCEG-M34.xls%% convert rates in logarithmic unitslR1 = log(R1);lR2 = log(R2);switch lower(mode) case 'dsnr' % PSNR method p1 = polyfit(lR1,PSNR1,3); p2 = polyfit(lR2,PSNR2,3); % integration interval (fixed 20130515) min_int = max([ min(lR1); min(lR2) ]); max_int = min([ max(lR1); max(lR2) ]); % find integral p_int1 = polyint(p1); p_int2 = polyint(p2); int1 = polyval(p_int1, max_int) - polyval(p_int1, min_int); int2 = polyval(p_int2, max_int) - polyval(p_int2, min_int); % find avg diff avg_diff = (int2-int1)/(max_int-min_int); case 'rate' % rate method p1 = polyfit(PSNR1,lR1,3); p2 = polyfit(PSNR2,lR2,3); % integration interval (fixed 20130515) min_int = max([ min(PSNR1); min(PSNR2) ]); max_int = min([ max(PSNR1); max(PSNR2) ]); % find integral p_int1 = polyint(p1); p_int2 = polyint(p2); int1 = polyval(p_int1, max_int) - polyval(p_int1, min_int); int2 = polyval(p_int2, max_int) - polyval(p_int2, min_int); % find avg diff avg_exp_diff = (int2-int1)/(max_int-min_int); avg_diff = (exp(avg_exp_diff)-1)*100;end
看文倉www.kanwencang.com網友整理上傳,為您提供最全的知識大全,期待您的分享,轉載請注明出處。
歡迎轉載:http://www.kanwencang.com/bangong/20170110/84766.html
文章列表
全站熱搜