matlab实现视频运动向量搜索

实验四 运动向量的预测

一、问题描述

利用matlab,导入YUV格式的视频,选择第一帧的某一位置为目标宏块,第2、3、5、10、20、50、100帧为参考帧,实现顺序搜索算法(采用绝对误差测量)对目标宏块进行运动向量的预测,再实现2D对数搜索算法(采用绝对误差测量)对目标宏块进行运动向量的预测。实验中自行设置搜索窗口的大小和9个参考点的位置,并对这两个参数对实验结果的影响进行分析。(视频的分辨率352*288,共300帧。展示在不同参考帧上得到的结果并进行分析,分析不同的搜索窗口大小和参考点位置对实验性能的影响,解释顺序搜索和2D对数搜索得到的结果是否最优。)

二、问题分析

一段视频的时间冗余是比较显著的,利用这个特征,可以将当前帧与其他帧的差值进行编码,探测相应像素或区域的移动并测量它们的差值来“补偿”这些运动。采用该方法的视频压缩算法被称为基于运动补偿(MC)的压缩算法,算法一般有三步:(1)运动估计(2)基于运动补偿的预测(3)预测误差的生成——差值。本次实验,需要实现运动向量的搜索。

搜索的目标是找到一个向量(i,j)作为运动向量MV(u,v),使得平均绝对误差(MAD)最小。(书本P201公式)

2.1顺序搜索

寻找运动向量最简单的方法是顺序搜索参考帧中整个(2p+1)(2p+1)大小的窗口。将该窗口中的每一个宏块逐个像素地和目标帧中的宏块进行比较,得到各自的MAD值,MAD最小的向量即为目标帧中宏块的运动向量。

2.2 2D对数搜索

对数搜索虽然不是最优方法, 通常却是非常有效的一个办法,且代价较低。在搜索窗口中只有9个位置被标记为1,它们作为基于MAD搜索的起始位置。当MAD最小值的位置确定后,将新的搜索区域中心移动到该位置,搜索的步长(偏移)减半。在下一次迭代中,9个新的位置为标记为2,依次类推。

计算复杂度为O(logp·N^2),与顺序搜索的O(p^2N^2)相比,有很大的改善。

三、算法分析与详细设计

3.1顺序搜索算法

在-p到p的窗口范围内搜索最小MAD的宏块进行运动向量的匹配。

Min_MAD=LARGE_NUMBER;

For i=-p to p

   For j=-p to p

{

  Cur_MAD=MAD(i,j);

  If cur_MAD<min_MAAD

    {

   Min_MAD=cur_MAD;

   u=i;//get the coordinates for MV

   v=j;

}

}

Matlab实现:

function [ u,v ] = SequenceSearch(target,ref,p,N,x0,y0)

%SequenceSearch 顺序搜索

%  依次搜索宏块,找到全局中的最优解

%target为目标帧,ref为参考帧,p指示窗口大小(2*p+1),

%N指示宏块大小,x0,y0为宏块中心坐标

%u v为找到的匹配宏块中心坐标

 

%扩大尺寸,防止窗口越界

target=EnlargeSize(target,p);

ref=EnlargeSize(ref,p);

 

%全搜索算法

 

LARGE_NUM=9999999999999;

min_MAD=LARGE_NUM;

cur_MAD=0;%当前的平均绝对误差

x=x0-N/2;

y=y0-N/2;%目标宏块的左上角顶点坐标,作为原点

 

diff=zeros(N,N);%误差图

 

      for  i=-p:p

           for j=-p:p%(i,j)表示子块在参考帧搜索的位置

             cur_MAD=sum(sum(target(x:x+N,y:y+N)-ref(x +i:x+i+N,y+j:y+j+N)))/(N^2);

            if cur_MAD<min_MAD

                min_MAD=cur_MAD;

                u=i;

                v=j;

            end;

           end;

      end;

 

      %绘制误差图

      for i=1:N

          for j=1:N

              diff(i,j)=target(x+i,y+

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值