• matlab 曲线拟合视频编码中PSNR计算及码率计算(2)


    在上一篇文章中,我们根据测出的四组psnr与bit rate之间的关系,根据这个关系以及VCEG-M34的提议拟合出相对的曲线。

    现在需要计算你所采用的方法对psnr和bit rate 的影响。那么就需要求对应相同的psnr时候,码流的变化,和对应相同的码流是对应的psnr的变化。对于后者,我们根据上篇文章拟合出来的公式即可获得。

    对于前者,我们需要知道其反函数才能求出对应的值。 

    然而,对于符号表达的参数如何求其反函数呢?matalb提供了相应的解决方法。首先先需要下面这三个函数。

    syms: 指定符号变量,如,syms x,t,y

    sym(finverse(myfun(par0,para1)));

    subs( ) 

     下面通过举例来求得反函数计算:

    %fmyfun.m
    function y
    =fmyfun(para,snr)
    syms bit
    f
    =sym(finverse(myfun(para,bit))) ;
    y
    =subs(f,'bit',snr);

     

    这样,就可以实现在已知snr的情况下,求得bit rate

    下面给出一个应用例子:

    SNR_org = [
      
    %blue_sky.yuv
      
    47.658,45.278,43.129,40.932;
      
    %pedestrian_area.yuv
      
    47.362,44.574,42.903,41.470;
      
    %riverbed.yuv
      
    46.845,43.768,41.320,39.330;
      
    %rush_hour.yuv
      
    47.000,44.486,43.223,42.086;
      
    %station2.yuv
      
    46.700,43.697,41.978,40.400;
      
    %sunflower.yuv
      
    47.156,45.147,43.680,41.922;
      
    %tractor.yuv
      
    46.903,43.875,41.375,39.215;
    ];
    bit_org 
    = [
      
    %blue_sky.yuv
      
    46552.18,19108.14,8675.51,4435.90;
      
    %pedestrain_area.yuv
      
    62321.42,24765.34,9946.34,5424.77;
      
    %river_bed
      
    125062.30,75294.25,44999.84,27501.96;
      
    %rush_hour
      
    60778.31,21838.84,8316.55,4418.00;
      
    %station2
      
    67541.70,20353.78,4219.07,1900.40;
      
    %sunflower
      
    40896.95,12166.38,5558.72,2951.06;
      
    %tractor
      
    97024.69,49946.76,23004.60,11202.05;
    ];
    bit_org 
    = bit_org/1000;

    SNR_25candi_us 
    = [
      
    %blue_sky
      
    47.655,45.270,43.122,40.918;
      
    %pedestrain_area
      
    47.356,44.569,42.902,41.467;
      
    %riverbed
      
    46.847,43.764,41.316,39.323;
      
    %rush hour
      
    46.997,44.479,43.212,42.076;
      
    %station2
      
    46.690,43.688,41.965,40.388;
      
    %sunflower
      
    47.142,45.130,43.670,41.917;
      
    %tractor
      
    46.894,43.855,41.355,39.198;
    ];

    bit_25candi_us 
    = [
      
    %blue_sky
      
    46785.35,19217.93,8763.00,4475.66
      
    %pedestrain_area
      
    62328.03,24823.76,9958.28,5435.45;
      
    %riverbed
      
    124661.84,75122.54,44870.01,27449.57;
      
    %rush_hour
      
    60824.93,21945.10,8330.94,4427.84;
      
    %station2
      
    67662.64,20556.07,4223.99,1892.38;
      
    %sunflower
      
    41094.02,12226.13,5552.23,2954.66;
      
    %tractor
      
    97280.39,50153.28,23102.80,11236.82;
    ];
    bit_25candi_us 
    = bit_25candi_us/1000;

    av_snr 
    = zeros(1,7);
    av_bit 
    = zeros(1,7);
    for seq = 1:1:7
      bit_T8x8off 
    = bit_25candi_us(seq,:);
      snr_T8x8off 
    = SNR_25candi_us(seq,:);
      [para_T8x8off,res]
    =lsqcurvefit(@myfun,ones(1,4),bit_T8x8off,snr_T8x8off);

      bit_T8x8on 
    = bit_org(seq,:);
      snr_T8x8on 
    = SNR_org(seq,:);
      [para_T8x8on,res]
    =lsqcurvefit(@myfun,ones(1,4),bit_T8x8on,snr_T8x8on);

      bit_min 
    = max(bit_T8x8off(1),bit_T8x8on(1));
      bit_max 
    = min(bit_T8x8off(4),bit_T8x8on(4));

      bit     
    = bit_max:0.1:bit_min;
      snr_off 
    = myfun(para_T8x8off,bit);
      snr_on  
    = myfun(para_T8x8on, bit);

      snr_min 
    = max(snr_T8x8off(1),snr_T8x8on(1));
      snr_max 
    = min(snr_T8x8off(4),snr_T8x8on(4));
      snr     
    = snr_max:0.1:snr_min;
      bit_off 
    = fmyfun(para_T8x8off,snr);
      bit_on  
    = fmyfun(para_T8x8on, snr);

      er_snr  
    = snr_on - snr_off;
      er_bit  
    = (bit_on - bit_off)./bit_on;

      av_snr(
    1,seq) = sum(er_snr)/(size(er_snr,2));
      av_bit(
    1,seq) = sum(er_bit)/(size(er_bit,2));

    end 

  • 相关阅读:
    logcat 自动清屏
    eclipse debug (调试) 学习心得
    黑马面试题
    如何分析解决Android ANR
    植物大战僵尸(一)
    cocos2d-小游戏
    VIM编辑器的使用
    面试题之排序总结
    面试题链表总结
    微软大楼设计方案(中等)(2017 计蒜之道 初赛 第六场)
  • 原文地址:https://www.cnblogs.com/liuokay/p/2139376.html
Copyright © 2020-2023  润新知