基于块匹配算法的运动估计Word文档格式.docx
《基于块匹配算法的运动估计Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于块匹配算法的运动估计Word文档格式.docx(10页珍藏版)》请在冰豆网上搜索。
视频编码与的原理是:
由于表示图像和视频信息所需的大量的数据往往是高度相关的,这些相关性会引起信息的冗余,因此可以通过去除这些冗余信息来实现对视频数据的压缩。
静止图像的压缩是在保持重建图像质量可以接收的同时,尽量去除图像本身存在的空间冗余,而视频信号的压缩,除了去除空间冗余之外,还可以通过去除时间冗余达到较高的压缩比。
运动估计技术是视频图像压缩编码中使用的一项核心技术,很好的解决了视频图像中时间冗余的问题,运动估计技术主要分为两大类:
象素递归法和块匹配算法。
2实验原理
如图1所示,运动估计的基本思想是将图像序列的每一帧图像分成许多互不重叠的宏块,并假设块内各像素只作相等的平移,然后对于当前帧中的每一块到前一帧或后一帧某一给
定搜索范围内根据一定的匹配准则找出与当前块最相似的块,即匹配块,由匹配块与当前块的相对位置计算出运动位移,所得运动位移即为当前块的运动矢量。
宏块大小为M×
N,一般取16×
16。
搜索范围一般由最大偏移矢量来决定,设可能的最大偏移矢量为(dxmax,dymax),
则搜索范围为(M+2dxmax)×
(N+2dymax)。
图1运动估计基本原理
2
2.1块匹配介绍
按照一般的想法,运动估计应当首先将图像中静止背景和运动物体区分开来,然后对运动物体的实际位移进行估计。
但块匹配方法却不是这样,它的思想是将图像划分为许多互不重叠的子块(例如16×
16),并认为子块内所有像素的位移量都相同。
这意味着每个子块被视为运动物体。
假设在图像序列中,t时刻对应于第k帧图像,t-τ时刻对应于第k-1帧图像。
对于k帧中的一个子块,在k-1帧中寻找与其最相似的子块,这个过程称为寻找匹配块,并认为该匹配块在k-1帧中所处的位置就是k帧子块位移前的位置,这种位置的变化用运动矢量D来表示。
将图像分割成M×
N的小块,并假设块内象素作相同的运动,且只作平移运动。
虽然实际上块内各点运动不一定相同,也不定只有平移运动,但当M×
N较小时,上述假设可近似成立。
这样做的目的只是为了简化运算。
块匹配法对当前帧图像的每一块,在上一帧的一定范围内搜索最优匹配,并认为本块就是从上一帧最优匹配块位置处平移过来的。
设可能的最大偏移矢量为(r,r),则搜索范围为(p+2r)×
(q+2r)。
图2示出了待匹配块与搜索区的几何位置关系。
随着图像压缩编码技术的发展和对压缩效率愈来愈高的要求,在很多场合均要求运动矢量精确到亚象素元级。
图2待匹配块与搜索区的几何位置关系
块的大小受到两个矛盾的约束:
块大时,块内各像素作平移运动的假设易被破坏,影响估计的精度;
块小时,则易受噪声影响,估计不够可靠,而且运算量增加,所需传输的附加信息也增加了。
因此必须恰到好处地选择块的大小,以做3
到两者兼顾。
目前的视频压缩标准,如H.26x和MPEG等,一般均以16×
16大小的块作为块匹配单元,这是一个已为实践证明的较好的折衷结果。
2.2离散余弦变换(DCT)
离散余弦变换(DCT)是利用傅立叶变换的对称性,将图象描述为不同幅值和频率的正弦值
之和的形式;
是图象压缩JPEG压缩算法的基础和核心。
是一个无信号损失的双向数学过程。
通过DCT变换能去除视频信号的空间冗余。
一个N×
N矩阵的二维DCT定义如下:
(1)正变换
Fc(u,v)c(u)c(v)f(x,y)cos(
x0y0N,1N,1u(2x,1)2N)cos(v(2y,1)
2N)(2.1)
(2)反变换
f(x,y)c(x)c(y)Fc(,v)cos(
u0v0N,1N,1x(2u,1)2N)cos(y(2v,1)
2N)(2.2)
其中
1/k0)c(k)
kN,1)
2.3块匹配的准则
运动估计算法中常用的匹配准则有三种,即最小绝对差(拟D)、最小均方误差(MSE)和归
一化互相关函数(NCCF)。
分别定义如下:
1、互相关函数(Cross-CorrelationFunction,简称
CCF)
s(n1,n2,k)s(n1,d1,n2,d2,k,1)
(2.3)
其中,,pn1,n2p。
(2.3)式是计算当前帧中(X×
Y)矩阵域与前帧相对应的(X+2P,Y+2P)
矩阵区域互相关函数。
2、均方误差函数(MSE)
4
MSE(d1,d2)1
N1N2(n1,n2B)s(n1,n2,k),s(n1,d1,n2,d2,k,1)2(2.4)
(2.4)式是计算相邻帧相对应(X×
Y)矩形区域的最小均方误差。
这是一种非线性测量,能较好地跟踪图像的协方差模型。
3、绝对平均误差函数(MAD)
MAD(d1,d2)1
N1N2(n1,n2B)s(n1,n2,k),s(n1,d1,n2,d2,k,1)(2.5)
(2.5)式是最简单的匹配函数,用它计算相邻帧的绝对平均误差。
在(2.3),(2.4)和(2.5)式中都在寻找(x,y),得到一个最小失真矢量。
(2.3)式是计算一个最大的自相关函数CCF(x,y),而(2.4)和(2.5)式是计算最小的均方误差和绝对平均误差函数MSE(x,y)和MAD(x,y)。
由于块匹配算法计算简单,能够实时处理,近几年获得广泛的应用。
4、最大像素匹配统计(MaximumPixelsCounting,MPC)
还有一种匹配准则叫做最大匹配像素数(MPC:
Matching-PixelCount)准则。
首先根据下式将当前块中的像素分成匹配像素和不匹配像素:
1(s(n1,n2,k),s(n1,d1,n2,d2,k,1)t)T(n1,n2,d1,d2)(2.6)0(Otherwise)
MPC(d1,d2)
(n1,n2B)T(n1,n2,d1,d2)(2.7)
T(n1,n2,d1,d2)1,则位置(n1,n2,d1,d2)的像素为匹配像素,否则为不匹配像素。
2.4块匹配的搜索算法
前两节的分析可以发现,在块匹配方法中最重要的两个问题是如何确定:
(1)判别两个子块匹配的准则:
(2)计算量最小的搜索方法。
对这两个问题的不同解决方案构成了不同的搜索算法。
下面将对一些典型的块匹配快速搜索算法进行逐次介绍。
5
2.4.1完全搜索法
(1)算法思想
全搜索法(FullSearchMethod,FS)也称为穷尽搜索法,是对(p+2r)×
(q+2r)搜索范围内所有可能的候选位置计算MAD(i,j)值,从中找出最小MAD,其对应偏移量即为所求运动矢量。
此算法虽计算量大,但最简单、可靠,找到的必为全局最优点。
(2)FS算法描述
FS算法描述如下:
Step1:
从原点出发,按顺时针方向由近及远,在逐个像素处计算MAD值,直到遍历搜索范围内所有的点.
Step2:
在所有点MAD中找到最小值,该点所在位置即对应最佳运动矢量。
(3)FS算法的分析
FS算法是最简单、最原始的块匹配算法,由于可靠,且能够得到全局最优的结果,通常是其它算法性能比较的标准,但它的计算量的确很大,这就限制了在需要实时压缩场合的应用,所以有必要进一步研究其它快速算法。
2.4.2二维对数法
二维对数(Two-DimensionalLogarithmicTDL)搜索法由J.R.Jain和
A.K.Jain提出,它开创了快速算法的先例,分多个阶段搜索,逐次减小搜索范围直到不能
再小而结束。
(1)TDL算法描述
TDL算法的基本思想是从原点开始,以“十”字形分布的五个点构成每次搜索的点群,通过快速搜索跟踪最小块误差MBD(MininumBlockDistortion)点(MAD值最小的点),算法具体描述如下:
从原点开始,选取一定的步长,在以十字形分布的五个点处进行块匹配计算并比较。
若MBD点在边缘四个点处,则以该点作为中心点,保持步长不变,重新搜索十字形分布的五个点;
若MBD点位于中心点,则保持中心点位置不变,6
将步长减半,构成十字形点群,在五个点处计算。
Step3:
在中心及周围8个点处找出MBD点,若步长为1,该点所在位置即对应最佳运动矢量,算法结束;
否则重复Step2。
具体的一个搜索例子请参考图3。
图中每个点上的数字表明了每个阶段搜索时计算的候选块的位置。
图3TDL搜索过程
(2)TDL算法的分析
TDL算法搜索时,最大搜索点数为2+71og2r,若发现新的十字形点群的中心点位于搜索区的边缘,则步长也减半,后来有人提出应该在搜索的每个阶段都将步长减半,所有这些改动都是为了使算法搜索范围很快变小,提高收敛速度。
TDL算法的前提是假设搜索区内只有一个谷点,如果搜索区内存在多个谷点时,该方法找到的可能是局部最小点。
2.4.3三步搜索法
三步搜索(ThreeStepSearch,TSS)法与二维对数法类似,是T.KOGA等人提出的,由于简单、健壮、性能良好的特点,为人们所重视。
若最大搜索长度为7,搜索精度取1个像素,则步长为4,2,1,共需三步即可满足要求,因此而得名三步法。
(1)TSS算法描述
TSS算法的基本思想是采用一种由粗到细的搜索模式,从原点开始,按一定步长取周围8个点构成每次搜索的点群,然后进行匹配计算,跟踪最小块误差7
MBD点算法具体描述如下:
从原点开始,选取最大搜索长度的一半为步长,在周围距离步长的8个点处进行块匹配计算并比较。
将步长减半,中心点移到上一步的MBD点,重新在周围距离步长的8个点处进行块匹配计算并比较。
一个可能的搜索过程如图4所示,图中每个点上的数字表明了每个阶段搜索时计算的候选
块的位置。
图4三步搜索步骤
(2)TSS算法的分析
TSS算法搜索时,整个过程采用了统一的搜索模板(SearchPattern),使得第一步的步长过大,容易引起误导,从而对小运动效率较低。
最大搜索点数为1,1og2r,当搜索范围大于7时,仅用3步是不够的,搜索步数的一般表达式为log2(p+1)。
总体说来,三步法是一种较典型的快速搜索算法,所以被研究的较多,后来又相继有许多改进的新三步法出现,改进了它对小运动的估计性能。
2.4.4直角搜索法
直角搜索法(OrthogonalSearchAlgorithm,OSA)是二维对数法和三步法的一种混合,由Purl提出[is],为了找到最佳匹配点搜索过程由垂直和水平两个阶段交替进行,逐步减小步长。
(1)OSA算法描述
8
TSS算法实际上仍是TDL和TSS的模式,但更加简化,使每次只沿水平或垂直方向在三个点处进行块匹配计算,算法具体描述如下:
初始化选取最大搜索长度的一半为步长,先在水平方向距离原点步长的位置处进行块匹配计算并比较,然后将中心点移到MBD点。
在垂直方向距离当前中心点步长处选取两点进行块匹配,并找到MBD点。
若步长为1,该点即为最优点,算法结束;
否则,将步长减半,改变中心点位置,重复Step1。
图4是一个具体的搜索例子,图中每个点上的数字表明了每个阶段搜索时计算的候选块的位置。
图5OSA搜索过程
(2)OSA算法分析
OSA算法每一步可以看成是由水平和垂直两个阶段组成,直到步长变为1时视为算法结束。
由于每次计算的匹配点数太少,不能顾及各个方向,虽然速度较快,但得到局部最优的可能性进一步扩大。
2.4.5交叉法
1990年,Ghanbari提出了交叉搜索算法(CrossSearchAlgorithm,CSA),9
它也是在TDL和TSS基础上为进一步减少计算量而发展起来的快速搜索法。
(1)CSA描述
CSA的基本思想是从原点开始,以“X”字形分布的五个点构成每次搜索的点群,以TDL的搜索方法检测MBD点,仅在最后一步采用“十”字形点群。
算法具体描述如下:
从原点开始,选取最大搜索长度的一半为步长,在以“X”字形分布的五个点处进行块匹配计算并比较,然后移动中心点。
以上一步的MBD点为中心,步长减半,继续做“X”字形的S点搜索。
若步长大于1,则重复Step2;
若步长为1,则进行Step3。
最后一步根据MBD点的位置,分别做“+”字形和“X”字形搜索:
若上一步MBD点处于中心点、左下角或右上角,做“十”字形搜索;
若上一步MBD点处于左上角或右下角,做“X”字形搜索。
由当前MBD点得到最佳运动矢量,算法结束。
图6是CSA搜索的一个具体实例,图中每个点上的数字表明了每个阶段搜索时计算的候选块的位置,第三步箭头说明了两种不同的搜索模式。
图6CSA搜索过程
(2)CSA分析
CSA的最大搜索点数为5+41og2r,搜索速度很快,但是运动补偿的效果不算太好。
如图6右图所示,有些点根本就不可能成为候选点,或者说,在搜索区域的边界上有四分之一的点CSA没有考虑,因此它不适用于较复杂的运动。
除此以外,还有菱形搜索法和四步搜索法,就不一一介绍了。
10
3设计实现
f2=imread(„G:
\壁纸\car1.BMP?
)
f1=imread(„G:
\壁纸\car2.BMP?
fp=0
figure,imshow(f2),title(„target?
figure,imshow(f1),title(„anchor?
N=16;
R=16
height=256
width=256
fori=1:
N:
height-N+1
forj=1:
width-N+1
MAD_min=256*N*N
dy=0;
dx=0;
fork=-R:
1:
R
forl=-R:
ifi+k&
lt;
1
MAD=256*N*N
elseifi+k&
gt;
height-N
elseifj+l&
width-N
else
MAD=sum(sum(abs(double(f1(i:
i+N-1,j:
j+N-1))-double(f2(i+k:
i+k+N-1,j+l:
j+l+N-1)))))end
ifMAD&
MAD_min
MAD_min=MAD
dy=k;
dx=l;
end;
11
fp(i:
j+N-1)=f2(i+dy:
i+dy+N-1,j+dx:
j+dx+N-1)
iblk=floor((i-1)/N+1);
jblk=floor((j-1)/N+1);
mvx(iblk,jblk)=dx;
mvy(iblk,jblk)=dy;
figure,imshow(uint8(fp)),title(„predict?
);
[X,Y]=meshgrid(N/2:
256-N/2);
Y=256-Y;
figure,quiver(X,Y,mvx,mvy),title(„motionvector?
diff=abs(double(f1)-fp);
figure,imshow(uint8(diff)),title(„diff?
PSNR=20*log10(255)+20*log10(256)-10*log10(sum(sum(diff.*diff)));
实验结果
目标帧锚定帧
预测帧
12
4结果分析
通过实验可以看出,由预测帧(predict)和给定的目标帧和锚定帧可知,大量的块基本上被精确的预测到了。
由于人肉眼分辨力的限制,基本上看不出由于EBMA算法而引起的块效应导致的误差。
13
参考文献
[1]彭真明.强杂波、弱信号成像目标探测与稳定跟踪技术研究.成都:
中国科学院光电技术研究所博士后科研工作报告,2003.
[2]孔刚,张启衡,许俊平.一种复杂背景下运动扩展目标识别算法.仪器仪表学
报,2005,26(8):
712-715.
[3]胡喜华,刘卫忠,郑立新.运动估计块匹配算法的分析研究.电视技术,2005,(12):
4-6.
[4]张晓芸,宋建社,郑永安.视频编码技术研究进展.计算机工程,2004,30(14):
4-5.
[5]毕厚杰,李涛.视频通信技术的新发展.世界电信,2004,(4):
32-36.
[6]胡伟军,李克非.视频压缩标准的最新进展.中国有线电视,2003,(24):
57-61.
[7]张志伟,向健勇,朱学涛.视频压缩新标准H.264的新特点.电子科技,2004,(8):
49-51.
[8]刘凯,胡晓斌,王春彦.视频压缩中的运动估计技术的研究.无线通信技术,2004,(4):
44-47.
[9]周祥平,王嵩.新标准H.264的核心技术与应用前景.中国有线电视,2004,(15):
55-61.
[10]蒋晓悦,赵荣椿.几种块匹配运动估计算法的比较.计算机应用研究,2004,(7):
1-3.
14