运动估计算法实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

运动估计算法实现

一、实验目的:

1、掌握运动估计算法的实现原理。

在视频编码和处理系统中,运动估计和运动补偿技术对降低视频序列时间冗余度、提高编码效率起着非常关键的作用。运动估计的准确程度将直接决定视频编码器的编码效率。它极大地消除了视频序列的帧间相关性。运动估计算法的复杂性将直接决定视频压缩编码系统的复杂性,如何提高运动估计的效率,使运动估计算法的搜索过程更快速、更高效一直是人们研究的热点。掌握运动估计的块匹配算法,以及快速运动估计算法。

2、掌握运动估计算法的研究现状及多种计算方法。

3、学习基于块的全搜索运动估计算法,研究分析其Matlab实现

程序过程,并补充完成程序,对实验结果进行分析比较。

二、实验内容

1、分析基于块匹配的全搜索运动估计算法程序,画出

motionEstAnalysis.m文件流程图

2、编程补充完成costFuncMAD.m 文件中最小绝对误差计算函数

costFuncMAD()和imgPSNR.m文件中峰值信噪比PSNR计算函数

imgPSNR()的程序,最终输出运动矢量场;

3、掌握运动补偿算法,编程补充minCost( )函数;

4、了解多种快速运动估计算法,例如三步法搜索法、菱形搜索法等。总结实验结果。

三、实验原理

在帧间预测编码中,由于活动图像邻近帧中的景物存在着一定的相关性。因此,可将活动图像分成若干块或宏块,并设法搜索出每个块或宏块在邻近帧图像中的位置,并得出两者之间的空间位置的相对偏移量,得到的相对偏移量就是通常所指的运动矢量,得到运动矢量的过程被称为运动估计。

运动矢量和经过运动匹配后得到的预测误差共同发送到解码端,在解码端按照运动矢量指明的位置,从已经解码的邻近参考帧图像中找到相应的块或宏块,和预测误差相加后就得到了块或宏块在当前帧中的位置。

运动估计的准确程度往往用补偿图像与原图像比较的PSNR来衡量表示。

四、实验要求

1、对实验程序motionEstAnalysis.m进行分析,完成主程序流程图。

函数流程图:

2、编写补充完成部分不全程序代码,调试程序使其能正确运行

(1)motionEstAnalysis.m

% This script uses all the Motion Estimation algorithms written for the % final project and save their results.

close all

clear all

% imageName = 'caltrain.avi';

mbSize = 4;

p = 7;

imgP1=double(imread('imagP.bmp'));

imgI1=double(imread('imagI.bmp'));

imgP=imgP1(:,:,1);

imgI=imgI1(:,:,1);

[row col] = size(imgI);

% Exhaustive Search

%»ùÓÚ¿éµÄÈ«ËÑË÷Ëã·¨

[BlockCenter, motionVect, computations] = motionEstES(imgP,imgI,mbSize,p);

% P Ö¡µ±Ç°Öع¹Í¼Ïñ

imgPComp = motionComp(imgI, motionVect, mbSize);

% P Ö¡µ±Ç°Í¼ÏñºÍP Ö¡µ±Ç°Öع¹Í¼ÏñµÄPSNRÖµ

%ESpsnr(i+1) = imgPSNR(imgP,imgPComp,255);

n=255;

PSNR=imgPSNR(imgP,imgPComp,255)

%MSE=(1/(n*n))*sum(sum((imgP-imgPComp).^2));

%PSNR=10*log(max(max(imgPComp)).^2/MSE);

%psnr=PSNR;

%EScomputations(i+1) = computations;

% P Ö¡µ±Ç°Öع¹Îó²îͼÏñ

imagePDiff = imgP - imgPComp;

figure;

imageI = uint8(imgI);

imageP = uint8(imgP);

imagePComp = uint8(imgPComp);

imagePDiff = uint8(imagePDiff);

subplot(221);imshow(imageI);

title('I Ö¡²Î¿¼Í¼Ïñ');

subplot(222);imshow(imageP);

title('P Ö¡µ±Ç°Í¼Ïñ');

subplot(223);imshow(imagePComp);

title('P Ö¡µ±Ç°Öع¹Í¼Ïñ');

subplot(224);imshow(imagePDiff);

title('P Ö¡µ±Ç°Öع¹Îó²îͼÏñ');

% »-Ô˶¯Ê¸Á¿Í¼

figure;

quiver( BlockCenter(2,:), BlockCenter(1,:), motionVect(2,:), motionVect(1,:), .2,'r');

axis([0 320 0 240]);

for i=mbSize:mbSize:col-mbSize

x = [i,i];

相关文档
最新文档