sbs立体编解码

SBS测试文档

                                     杨杭军,2010.9.26

一、SBS概述:

 

         SBS是图像拼接技术的一种,其在立体视频方面应用广泛。SBS在立体视屏编解码方面的大概步骤:

1.  将立体视频左右路序列 对应帧 拼接成一幅图像,保持图像分辨率不变。比如将第100帧的左路图像 100帧的右路图像拼接成 一幅图像(具体拼接方法有多种),并且保证拼接后的图像分辨率与左路(右路)图像保持一致。

2.  将拼接好的视频序列利用现有的H.264编码器进行编码;

3.  在客户端,利用现有的H.264解码器对码流解码,得到左右路拼接序列;

4.  进行拼接的逆运算,将左右路拼接序列分解成左右路两路序列。

 

 

5.  图像拼接方法:将左路图像的奇数场与右路图像的偶数场拼接成一幅图像。

 

二、关键算法

 

2.1 图像拼接

         图像拼接主要目的是把两路图像拼接成一路图像。具体来说,左路右路图像各对应帧各抽取一定的像素值,整合成一帧图像,而在这一过程中要保证图像的分辨率不变。

         本测试代码图像拼接采用的方法是:将左路图像的奇数场与右路图像的偶数场拼接成一幅图像。具体可见代码介绍:

将亮度信息拼接成一幅图像:

    for(i=0;i<height;i=i+2)

        for(j=0;j<width;j++)  

        {

            *(Y_out+i*width+j)=*(Y_one+i*width+j);    //拼接后的奇数行等于左路图像的该行值

            *(Y_out+(i+1)*width+j)=*(Y_two+(i+1)*width+j); //拼接后的偶数行等于右路图像的该行值

        }

 

色度分量拼接:原理与亮度拼接一致!

    for(i=0;i<UV_height;i=i+2)

        for(j=0;j<UV_width;j++)

        {

            *(UV_out+i*UV_width+j)=*(UV_one+i*UV_width+j);  

            *(UV_out+(i+1)*UV_width+j)=*(UV_two+(i+1)*UV_width+j);

        }

 

2.2 图像分解

    拼接后的图像经过编码,传输到客户端,客户端解码,解码之后要观看左右路图像,则必须将解码得到的拼接图像进行分解,恢复左右路图像。

    图像分解需要的步骤:将拼接图像分解成左右路YUV,此时左右路高度分辨率均为原来的一半; 对左右路图像进行插值,复原为原始图像的分辨率。

    拼接图像分解成两路YUV的代码如下表所示:

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

        for(j=0;j<WIDTH;j++)

        {

            if(i%2 == 0)

            {

                *(Y_1+i/2*WIDTH+j)=*(Y_in+i*WIDTH+j);   //偶数行分解到左路图像

            }

            else

                *(Y_2+(i-1)/2*WIDTH+j)=*(Y_in+i*WIDTH+j); //奇数行分解到右路图像

        }

//这里包括亮度与色度的分解。分解后左右路的分辨率变为:WIDTH  *  HEIGHT/2

对亮度分量进行插值,采取双线性插值算法:

    for(i=0;i<out_height;i++)               //i,j)为插值后图像的坐标

        for(j=0;j<out_width;j++)

        {

            m=1.0*i/out_height*in_height;

            n=1.0*j/out_width*in_width;     //当前图像对应到原图像的坐标(m,n

 

            x=(int)m;

            y=(int)n;     

           

            p=m-1.0*x;  //(m,n)距离左上角像素(x,y)的距离

            q=n-1.0*y;     

           //  双线性插值,对(i,j)像素赋值

            *(Y_out+i*out_width+j)=( (1-p)*(1-q)*( *(Y_in+x*in_width+y)  )

                                  + (1-p)*q*  ( *(Y_in+x*in_width+y+1)  )

                                  + p*(1-q)* ( *( Y_in+(x+1)*in_width+y) )

                                  +p*q*( *(Y_in+(x+1)*in_width+y+1) ) );

        }

 

 

色度分量的插值(由于人眼对色度的分辨率较低,所以,色度的插值就直接复制)

    for(i=0;i<out_height;i=i+2)

        for(j=0;j<out_width;j++)

        {

            *(UV_out+i*out_width+j)= *(UV_in+i*out_width+j);    //相邻两行采用相同的亮度值

            *(UV_out+(i+1)*out_width+j)=*(UV_in+i*out_width+j);

        }

 

三、测试环境:

 

操作系统:Ubuntu 9.10

 

硬件性能:

CPU

Intel Pentium® Dual CPU

主频

1.80GHz

内存

2.0GB

 

测试序列:

序列

分辨率

帧数

tunnel_L_720X576_250frms.yuv

720X576

250

tunnel_R_720X576_250frms.yuv

720X576

250

trapeze_L_720X480_450frms.yuv

720X480

450

trapeze_R_720X480_450frms.yuv

720X480

450

BMX_L_1920X1080_240frms.yuv

1920X1080

240

BMX_L_1920X1080_240frms.yuv

1920X1080

240

 

 

四、测试结果:

QP=37

测试序列

Y(dB)

U(dB)

V(dB)

码率(kb/s

tunnel_L_720X576_250frms.yuv

25.188

33.581

32.951

435.89

tunnel_R_720X576_250frms.yuv

23.132

33.389

32.269

trapeze_L_720X480_450frms.yuv

22.250

36.351

35.789

483.12

trapeze_R_720X480_450frms.yuv

20.057

36.274

35.388

BMX_L_1920X1080_240frms.yuv

20.249

31.806

34.841

4316.38

BMX_L_1920X1080_240frms.yuv

18.886

30.858

33.961

 

QP=32

测试序列

Y(dB)

U(dB)

V(dB)

码率(kb/s

tunnel_L_720X576_250frms.yuv

25.882

34.067

33.382

875.20

tunnel_R_720X576_250frms.yuv

23.308

33.657

32.524

trapeze_L_720X480_450frms.yuv

22.472

36.797

36.197

1003.45

trapeze_R_720X480_450frms.yuv

20.065

36.467

35.641

BMX_L_1920X1080_240frms.yuv

20.287

31.953

35.078

8354.24

BMX_L_1920X1080_240frms.yuv

18.858

30.830

33.966

 

QP=27

测试序列

Y(dB)

U(dB)

V(dB)

码率(kb/s

tunnel_L_720X576_250frms.yuv

26.316

34.457

33.899

1773.06

tunnel_R_720X576_250frms.yuv

23.327

33.848

32.835

trapeze_L_720X480_450frms.yuv

22.577

37.231

36.512

2130.96

trapeze_R_720X480_450frms.yuv

20.062

36.649

35.809

BMX_L_1920X1080_240frms.yuv

20.300

32.043

35.312

15950.76

BMX_L_1920X1080_240frms.yuv

18.845

30.803

33.972

 

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值