📄 matching_half.m
字号:
% exhaustive search block matching (EBMA) algorithm
%
function [vm,hm,pframe]=EBMA_half(refframe, newframe, row, col, bsize, Vrange, Hrange, vm, hm, pframe);
%assumes bsize=16
clear err
err=zeros(4*Vrange+1, 4*Hrange+1);
clear x;
x=zeros(16,16);
MAX_ERROR=255^2*16^2;
%up sample refframe
row2=row*2; col2=col*2;
refframe2(1:2:row2,1:2:col2)=refframe(1:row,1:col);
refframe2(1:2:row2,2:2:col2-2)=(refframe(1:row,1:col-1)+refframe(1:row,2:col))/2;
refframe(1:2:row2,col2)=refframe(1:row,col);
refframe2(2:2:row2-2,1:2:col2)=(refframe(1:row-1,1:col)+refframe(2:row,1:col))/2;
refframe2(row2,1:2:col2)=refframe(row,1:col);
refframe2(2:2:row2-2,2:2:col2-2)=(refframe(1:row-1,1:col-1)+...
refframe(1:row-1,2:col)+refframe(2:row,1:col-1)+refframe(2:row,2:col))/4;
refframe2(2:2:row2-2,col2)=(refframe(1:row-1,col)+refframe(2:row,col))/2;
refframe2(row2,2:2:col2-2)=(refframe(row,1:col-1)+refframe(row,2:col))/2;
refframe2(row2,col2)=refframe(row,col);
%figure;image(refframe2);colormap(gray(256));
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)-refframe2(2*(r+v0)-1:2:2*(r+v0+15)-1, 2*(c+h0)-1:2:2*(c+h0+15)-1);
err0=sum(sum(abs(x)));
minerr=err0;
vmin=v0;hmin=h0;
%bbr=0;
for v=-Vrange+v0:0.5:Vrange+v0
%bbr=bbr+1;
%bbc=0;
for h=-Hrange+h0:0.5:Hrange+h0
%bbc=bbc+1;
if ((r+v>=1) & (r+v<=row-15) & (c+h>=1) & (c+h<=col-15))
x=newframe(r:r+15, c:c+15)- ...
refframe2(2*(r+v)-1:2:2*(r+v+15)-1, 2*(c+h)-1:2:2*(c+h+15)-1);
err=sum(sum(abs(x)));
if (err<minerr)
minerr=err;
hmin=h; vmin=v;
end;
end
end %the motion search window
end
if (minerr>(err0-100))%favor 0 MV if error is similar
hmin=h0;
vmin=v0;
end;
vm(br,bc)=vmin;
hm(br,bc)=hmin;
disp([r,c,br,bc,vmin,hmin,v0,h0]);
pframe(r:r+15, c:c+15)=refframe2(2*(r+vmin)-1:2:2*(r+vmin+15)-1, 2*(c+hmin)-1:2:2*(c+hmin+15)-1);
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -