video multiple description coding (mdc)

8
SPECIAL TOPICS Video Multiple Description Coding (MDC) Prof. Enrico Magli Campione Salvatore 145781 Peraldo Lorenzo 150327

Upload: project-symphony-collection

Post on 12-Nov-2014

913 views

Category:

Documents


1 download

DESCRIPTION

A multiple description algorithm for video encoding. By Salvatore Campione and Lorenzo Peraldo

TRANSCRIPT

SPECIAL TOPICS

Video Multiple Description Coding (MDC)

Prof. Enrico Magli

Campione Salvatore 145781Peraldo Lorenzo 150327

Brief overview and general description

The aim of this project is to point out the performances of a multiple description algorithm.The MDC algorithm used in this project is the temporal division: two descriptions of the same video (table.yuv, made of 30 frames, 352x288) are created by means of a MATLAB function (Multidescription.m); each description is characterized by 15 frames (one takes the even frame, table_sideR.yuv, and the other the odd frame, table_sideL.yuv).Then, H.264 encoder/decoder (last version available) is applied to each sequence and, by means of another MATLAB function (Reconstruction.m), the central description (i.e. the description obtained when both sequences are received) is reconstructed (table_recon.yuv).If only one of the two descriptions is received, an Interpolation algorithm has to be applied in order to obtain a 30-frame video; depending on which description (left or right) is received, a slightly different algorithm is implemented: InterpolationL.m and InterpolationR.m. A linear interpolation is used and where it couldn’t be applied, we just replicated one frame (i.e. last frame in odd description and first frame in even description).The goals are to carry out some graphs which relate:

• Central PSNR vs Side PSNR• Side PSNR vs Bit-Rate• Side PSNR vs Quality factor• Bit-Rate comparison between a situation where MDC is used and where is not

The PSNR data are computed using MSU Visual Quality Measurement Tools.

Simulation results

Central PSNR vs Side PSNR

The analysis is done with constant quality factor. The results are the following:

QPL Side PSNR

R Side PSNR

Central PSNR

10 27,90 29,04 51,8920 27,80 28,91 42,0430 26,95 27,80 32,8440 25,41 25,92 27,8650 24,26 24,53 25,37

Table 1: Central PSNR vs Side PSNR

Central VS Side PSNR

20

25

30

35

40

45

50

55

23 24 25 26 27 28 29 30

Side PSNR

Cen

tral

PS

NR

Left Side

Right Side

Figure 1: Central PSNR vs Side PSNRLooking at the graph, you notice that the results are as those expected from the theoretical side.

Side PSNR vs Bit-Rate

This simulation compares the performances of both side descriptions in terms of PSNR vs Bit-Rate.

Bitrate (kbit/s)

L Side PSNR

Bitrate (kbit/s)

R Side PSNR

10051,74 27,90 10253,00 29,043437,89 27,80 3699,00 28,91593,87 26,95 612,37 27,8091,30 25,41 94,06 25,9234,93 24,26 35,14 24,53

Table 2: Side PSNR vs Bit-Rate

PSNR vs Bit-rate

23

24

25

26

27

28

29

30

0,00 2000,00 4000,00 6000,00 8000,00 10000,00 12000,00

Bit-rate (kbit/s)

Sid

e P

SN

R

Left Side

Right Side

Figure 2: Side PSNR vs Bit-RateThe results respect the theoretical ones.

Side PSNR vs Quality factor

This figure shows the previous one vs the quality factor instead of the bit-rate.QP L Side PSNR R Side PSNR10 27,90 29,0420 27,80 28,9130 26,95 27,8040 25,41 25,9250 24,26 24,53Table 3: Side PSNR vs Quality factor

Side PSNR vs Quality Factor

21

22

23

24

25

26

27

28

29

30

10 20 30 40 50

Quality Factor

Side

PSN

R

Left Side

Right Side

Figure 3: Side PSNR vs Quality factor

Bit-Rate comparison between a situation where MDC is used and where is not

In this analysis, we compare MDC with a Single Description implementation.The simulation is carried out with the same quality factor; this means that the PSNR in presence of MDC is almost equal to the one in absence of MDC. For this reason, the comparison can be done looking at the Bit-Rate. The Bit-Rate of the reconstructed files is computed summing the two side bit-rate of the side descriptions.

Central PSNR no MDC

Central PSNR MDC

Bit-Rate no MDC (kbit/s)

Bit-Rate MDC (kbit/s)

Bitrate Left Side (kbit/s)

Bitrate Right Side (kbit/s)

51,79 51,89 9193,82 20304,74 10051,74 10253,0041,66 42,04 2747,87 7136,89 3437,89 3699,0032,64 32,84 486,19 1206,24 593,87 612,3727,78 27,86 71,44 185,36 91,30 94,0625,28 25,37 27,84 70,07 34,93 35,14

Table 4: Bit-Rate comparison between a situation where MDC is used and where is not

Bitrate comparison

0

5000

10000

15000

20000

25000

0 10 20 30 40 50 60

QP

Bit

Ra

te [

Kb

it/s

]

without MDC

with MDC

Right Side

Left Side

Figure 4: Bit-Rate comparison between a situation where MDC is used and where is notAs you can see from the graph, the Bit-Rate in presence of MDC is higher than the one without MDC, as expected from theoretical results.

Appendix

Multidescription.m

clc;

or_path='table.yuv'; % Original filedest_pathL = 'table_sideL.yuv';dest_pathR = 'table_sideR.yuv';

height=288;width=352;N=30;

frame_size=height*width*1.5;

f_or = fopen(or_path,'rb');original = fread(f_or);fclose(f_or);

flag = 0;sideL = [];sideR = [];

for i=0:N-1 if(flag == 0) sideL= [sideL ; original(i*frame_size+1:(i+1)*frame_size)]; flag = 1; else sideR= [sideR ; original(i*frame_size+1:(i+1)*frame_size)]; flag=0; endend

f_dst=fopen(dest_pathL,'wb');fwrite(f_dst,sideL,'uint8');fclose(f_dst);f_dst=fopen(dest_pathR,'wb');fwrite(f_dst,sideR,'uint8');fclose(f_dst);

Reconstruction.m

clc

f_orL=fopen('table_sideL.yuv','rb');f_orR=fopen('table_sideR.yuv','rb');originalL=fread(f_orL);originalR=fread(f_orR);fclose(f_orL);fclose(f_orR);

height=288;width=352;N=30;frame_size=height*width*1.5;

f_rec=fopen('table_recon.yuv','a');

for i=0:N/2-1 fwrite(f_rec, originalL(i*frame_size+1:(i+1)*frame_size), 'uint8'); fwrite(f_rec, originalR(i*frame_size+1:(i+1)*frame_size), 'uint8');end

fclose(f_rec);

InterpolationL.m

clc

or_path='table_sideL_50.yuv'; % Original filedest_pathL = 'table_sideL_50_30frames.yuv';

f_or = fopen(or_path,'rb');original = fread(f_or);fclose(f_or);

height=288;width=352;N=30;

frame_size=height*width*1.5;

new = [];

for i=0:N/2-2 new = [new ; original(i*frame_size+1:(i+1)*frame_size)]; new = [new ; (original(i*frame_size+1:(i+1)*frame_size)+original((i+1)*frame_size+1:(i+2)*frame_size) )/2];endnew = [new ; original(i*frame_size+1:(i+1)*frame_size)];new = [new ; original(i*frame_size+1:(i+1)*frame_size)]; f_dst=fopen(dest_pathL,'wb');fwrite(f_dst,new,'uint8');fclose(f_dst);

InterpolationR.m

clc

or_path='table_sideR_50.yuv'; % Original filedest_pathL = 'table_sideR_50_30frames.yuv';

f_or = fopen(or_path,'rb');original = fread(f_or);fclose(f_or);

height=288;width=352;N=30;

frame_size=height*width*1.5;

new = [];

i=0;

new = [new ; original(i*frame_size+1:(i+1)*frame_size)];for i=0:N/2-2 new = [new ; original(i*frame_size+1:(i+1)*frame_size)]; new = [new ; (original(i*frame_size+1:(i+1)*frame_size)+original((i+1)*frame_size+1:(i+2)*frame_size) )/2];endnew = [new ; original(i*frame_size+1:(i+1)*frame_size)]; f_dst=fopen(dest_pathL,'wb');fwrite(f_dst,new,'uint8');fclose(f_dst);