基于块的全搜索运动估计算法实现实验报告.docx
《基于块的全搜索运动估计算法实现实验报告.docx》由会员分享,可在线阅读,更多相关《基于块的全搜索运动估计算法实现实验报告.docx(10页珍藏版)》请在冰豆网上搜索。
基于块的全搜索运动估计算法实现实验报告
数字视频处理
实验报告
学院:
通信与信息工程学院
系班:
电信科0901班
姓名:
学号:
时间:
2012年11月23号
一、实验名称:
基于块的全搜索运动估计算法实现
二、实验目的:
1、掌握运动估计算法的实现原理。
2、掌握运动估计算法的研究现状及多种计算方法。
3、学习基于块的全搜索运动估计算法,研究分析其Matlab实现程序过程,并补充完成程序,对实验结果进行分析比较。
三、实验要求
三、实验要求
1、对实验程序motionEstAnalysis.m进行分析,完成主程序流程图。
函数流程图:
2、编写补充完成部分不全程序代码,调试程序使其能正确运行
(1)motionEstES()
%Computesmotionvectorsusingexhaustivesearchmethod(全搜索法计算运动矢量)
%
%Input
%imgP:
Theimageforwhichwewanttofindmotionvectors(当前图像)
%imgI:
Thereferenceimage(参考图像)
%mbSize:
Sizeofthemacroblock(宏块尺寸)
%p:
Searchparameter(readliteraturetofindwhatthismeans)(搜索参数)
%
%Ouput
%motionVect:
themotionvectorsforeachintegralmacroblockinimgP(当前图像中每一个积分宏块的运动矢量)
%EScomputations:
Theaveragenumberofpointssearchedforamacroblock(每个宏块搜索的平均点数)
%
%WrittenbyArohBarjatya
function[BlockCenter,motionVect,EScomputations]=motionEstES(imgP,imgI,mbSize,p)%定义函数文件motionEstES.m,imgP、imgI、mbSize、p为传入参数,BlockCenter、motionVect、EScomputations为返回参数
[rowcol]=size(imgI);%将参考图像的行数赋值给row,列数赋值给col
blockcenter=zeros(2,row*col/mbSize^2);
vectors=zeros(2,row*col/mbSize^2);%定义全0的矢量矩阵的大小
costs=ones(2*p+1,2*p+1)*65537;%定义最小绝对差矩阵的大小
computations=0;%搜索点数赋初值为0
%westartofffromthetopleftoftheimage(从图像左上角开始)
%wewillwalkinstepsofmbSize(以宏块尺寸为步长)
%foreverymarcoblockthatwelookatwewilllookfor
%aclosematchppixelsontheleft,right,topandbottomofit(对于每一个宏块,在它的上下左右找到与搜索参数p最匹配的像素)
mbCount=1;%搜索的宏块数赋初值为1
%1为循环起始值,mbSize为步长值,row-mbSize+1为循环终止值
fori=1:
mbSize:
row-mbSize+1
forj=1:
mbSize:
col-mbSize+1
%theexhaustivesearchstartshere(全搜索开始)
%wewillevaluatecostfor(2p+1)blocksvertically
%and(2p+1)blockshorizontaly(我们将计算水平方向上(2p+1)个块的最小绝对差和垂直方向上(2p+1)个块的最小绝对差)
%misrow(vertical)index(m为行指数)
%niscol(horizontal)index(n为列指数)
%thismeanswearescanninginrasterorder
form=-p:
p%水平方向上位移矢量范围
forn=-p:
p%垂直方向上位移矢量范围
%补充下面程序
%row/Vertco-ordinateforrefblock(参考块的行(垂直方向)的范围)
refBlkVer=i+m;
%col/Horizontalco-ordinate(参考块的列(水平方向)的范围)
refBlkHor=j+n;
%如果参考块的行列范围的任意一个在已经搜索过的宏块之外,则继续下一步的搜索
if(refBlkVer<1||refBlkVer+mbSize-1>row...
||refBlkHor<1||refBlkHor+mbSize-1>col)
continue;
end
costs(m+p+1,n+p+1)=costFuncMAD(imgP(i:
i+mbSize-1,j:
j+mbSize-1),...
imgI(refBlkVer:
refBlkVer+mbSize-1,refBlkHor:
refBlkHor+mbSize-1),mbSize);
%搜索下一个点
computations=computations+1;
end
end
%Nowwefindthevectorwherethecostisminimum
%andstoreit...thisiswhatwillbepassedback.(现在找到有最小绝对差的矢量并存储它,这就是将被返回的东西)
%补充下面程序
blockcenter(1,mbCount)=i+mbSize/2-1;
blockcenter(2,mbCount)=j+mbSize/2-1;
%findswhichmacroblockinimgIgaveusminCost(找到参考图像中最小绝对差的宏块)
[dx,dy,min]=minCost(costs);
%rowco-ordinateforthevector(矢量的行集合)
vectors(1,mbCount)=dy-p-1;
%colco-ordinateforthevector(矢量的列集合)
vectors(2,mbCount)=dx-p-1;
%搜索下一个宏块
mbCount=mbCount+1;
costs=ones(2*p+1,2*p+1)*65537;
end
end
BlockCenter=blockcenter;
motionVect=vectors;%返回当前图像中每一个积分宏块的运动矢量
EScomputations=computations/(mbCount-1);%返回每个宏块搜索的平均点数
(2)costFuncMAD()
%ComputestheMeanAbsoluteDifference(MAD)forthegiventwoblocks(对给定的两个块计算最小绝对差)
%Input
%currentBlk:
TheblockforwhichwearefindingtheMAD(当前块)
%refBlk:
theblockw.r.t.whichtheMADisbeingcomputed(参考块)
%n:
thesideofthetwosquareblocks
%
%Output
%cost:
TheMADforthetwoblocks(两个块的最小绝对差)
%
%WrittenbyArohBarjatya
%定义函数文件costFuncMAD.m,currentBlk、refBlk、n为传入参数,cost为返回参数
functioncost=costFuncMAD(currentBlk,refBlk,n)
%补充下面程序
cost=sum(sum(abs(currentBlk-refBlk)))/(n*n);
(3)minCost()
%Findstheindicesofthecellthatholdstheminimumcost(找到拥有最小绝对差的点的指数)
%
%Input
%costs:
Thematrixthatcontainstheestimationcostsforamacroblock(包含宏块的估计代价的矩阵)
%
%Output
%dx:
themotionvectorcomponentincolumns(列方向上运动矢量组成)
%dy:
themotionvectorcomponentinrows(行方向上运动矢量组成)
%
%WrittenbyArohBarjatya
function[dx,dy,min]=minCost(costs)
[row,col]=size(costs);
%wecheckwhetherthecurrentvalueofcostsislessthenthealreadypresentvalueinmin.
%Ifitsindedsmallerthenweswaptheminvaluewiththecurrentoneandnotetheindices.
%(检测costs的当前值是否比已经出现的最小值小。
如果小的话,我们将当前值与最小值对调,并注明指数)
%补充下面程序
minnum=65536;
x=8;
y=8;
fori=1:
row
forj=1:
col
if(costs(i,j)minnum=costs(i,j);
x=i;
y=j;
end
end
end
dx=x;
dy=y;
min=minnum;
(4)imgPSNR()
%Computesmotioncompensatedimage'sPSNR(计算运动补偿图像的峰值信噪比)
%
%Input
%imgP:
Theoriginalimage(原始图像)
%imgComp:
Thecompensatedimage(补偿图像)
%n:
thepeakvaluepossibleofanypixelintheimages(图像中任何一个像素的可能的峰值)
%
%Ouput
%psnr:
Themotioncompensatedimage'sPSNR(运动补偿图像的峰值信噪比)
%
%WrittenbyArohBarjatya
functionpsnr=imgPSNR(imgP,imgComp,n)
%补充下面程序
MSE=(1/(n*n))*sum(sum((imgP-imgComp).^2));
PSNR=10*log10(255^2/MSE);
psnr=PSNR;
四、实验结果与分析
1、当前研究帧运动估计结果图
图一第2帧到4帧运动矢量图
图二第4帧到6帧运动矢量图
2、当前研究帧重构图像和当前研究帧重构误差图像
图三由i=2的参考图像得出P帧重构图像
图四由i=2帧参考图像得出直接误差与重构误差对比
图五由i=4的参考图像得出P帧重构图像
图六由i=4帧参考图像得出直接误差与重构误差对比
3、当前研究帧图像和当前研究帧重构图像的PSNR值
直接运动补偿算法的PSNR值
基于运动估计的运动补偿算法的PSNR值
PSNR=40.8615;
实验结果分析: