📄 matching.m
字号:
% block matching algorithm
% Modified from me.m by Bo Tao, Princeton University
%
% Motion estimation with exhaustive search
%
%integer pel EBMA
function [vm,hm,pframe]=EBMA(refframe, newframe, Row, Col, bsize, Vrange, Hrange, vm, hm, pframe);
%assumes bsize=16
clear err
err=zeros(2*Vrange+1, 2*Hrange+1);
clear x;
x=zeros(16,16);
MAX_ERROR=255^2*16^2;
br=0;
for r=1:bsize:Row-15
br=br+1;
bc=0;
for c=1:bsize:Col-15
bc=bc+1;
%assuming vm,hm store initial motion field
v0=vm(br,bc);
h0=hm(br,bc);
x=newframe(r:r+15, c:c+15)-refframe(r+v0:r+v0+15, c+h0:c+h0+15);
err0=sum(sum(abs(x)));
bbr=0;
for v=-Vrange+v0:Vrange+v0
bbr=bbr+1;
bbc=0;
for h=-Hrange+h0:Hrange+h0
bbc=bbc+1;
if ((r+v<1) | (r+v>Row-15) | (c+h<1) | (c+h>Col-15))
err(bbr, bbc)=MAX_ERROR;
else
x=newframe(r:r+15, c:c+15)- ...
refframe(r+v:r+v+15, c+h:c+h+15);
err(bbr, bbc)=sum(sum(abs(x)));
end
end %the motion search window
end
[y, i]=min(err);
[errmin,j]=min(y);
v=i(j)-Vrange-1+v0;
h=j-Hrange-1+h0;
if ((errmin>(err0-100))|(r+v<1) | (r+v>Row-15) | (c+h<1) | (c+h>Col-15)) %favor 0 MV if error is similar
h=h0;
v=v0;
end;
vm(br,bc)=v;
hm(br,bc)=h;
disp([r,c,br,bc,v,h,v0,h0]);
pframe(r:r+15, c:c+15)=refframe(r+v:r+v+15, c+h:c+h+15);
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -