24-11-2012, 06:16 PM
Motion Estimation for Video Coding
Multimedia Communication Systems.doc (Size: 31 KB / Downloads: 69)
Introduction
As you have learnt in the lecture, motion compensated prediction is an important step in modern video coding techniques. For this experiment, you are provided with MATLAB programs for performing motion estimation and motion compensation using different techniques: EBMA (with integer or half-pel accuracy) and HBMA. You should go through the MATLAB codes and try to understand how each algorithm is implemented. You are also asked to run these programs with different parameter settings and record the resulting prediction results and computation time. From these experiments, you should appreciate the trade-off between prediction accuracy and computation time with different algorithms and parameter settings. Another program applies block DCT on an image, quantizes the DCT coefficients, and counts the number of non-zero coefficients after quantization. The number of non-zero coefficients is a good indicator of the required bit rate to code a frame. By applying this program to both an original video frame and the prediction error, and comparing the resulting numbers of non-zero coefficients, you can also appreciate the bit-rate savings by motion estimation.
Experiment
(1) EBMA_main.m is the main program for performing motion estimation using EBMA. You can call fuction EBMA_integer(..) or EBMA_half(…) from EBMA_main.m to execute integer or half-pel accuracy EBMA. It also calls for plot_MV_function(…), which plots the estimated motion field. Go through these programs to understand the underlying operations. Note you can view the Matlab programs using MATLABEditor. Either click on those files, or uses the “open” menu in MATLAB command window. In EBMA_main.m, which variables should be changed if you want to do motion estimation between the following two frames: ‘foreman66.Y’ and ‘foreman69.Y’? What if you want to change the horizontal and vertical search range?
(2) Run the program EBMA_main as is, which calls EBMA_integer() function, and uses a preset block size (=16) and search range (=16). Capture all images and record the running time and PSNR. Save the predicted image into “pimg1”. (this can be done simply at the command window by entering >>pimg1=pimg
(3) Now, open EBMA_main.m, change the line that calls EBMA_integer(..) to call EBMA_half(…) instead. Save the file, and run EBMA_main again. Capture all images and record the running time and PSNR. Save the predicted image into “pimg2”. Compared to the results obtained using EBMA_integer(), which method is more accurate, which method takes more time? Explain why.
Report
Your report should start with a general description of what you did in this experiment, followed by the results and observations you obtained. You should answer all the questions (written in italics in the proceeding instructions), with the corresponding figures next to your answers.