📄 ebma2.m
字号:
%f1: anchor frame; f2: target frame, fp: predicted image;
%mvx,mvy: store the MV image
%widthxheight: image size; N: block size, R: search range
f2=imread('e:\car\car1.bmp');
f1=imread('e:\car\car2.bmp');
fp=0;
figure,imshow(f2),title('target');
figure,imshow(f1),title('anchor')
N=16;R=16;
height=256;
width=256;
for i=1:N:height-N+1
for j=1:N:width-N+1 %for every block in the anchor frame
% for every block (i,j), culculate the best matching block (i+k,j+l) in the rectangle scope
% [(i-R,j-k),(i+R,j+k)]
MAD_min=256*N*N;
dy=0;dx=0;
for k= -R:1:R,
for l= -R:1:R %for every search candidate
if i+k<1
MAD=256*N*N;
elseif i+k>height-N
MAD=256*N*N;
elseif j+l<1
MAD=256*N*N;
elseif j+l>width-N
MAD=256*N*N;
else
% calculate MAD for this candidate
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
if MAD<MAD_min
MAD_min=MAD;
dy=k;dx=l;
end;end;end;
%put the best matching block in the predicted image
fp(i:i+N-1,j: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); %block index
mvx(iblk,jblk)=dx;
mvy(iblk,jblk)=dy; %record the estimated MV
end;end;
figure,imshow(uint8(fp)),title('predict');
% figure,quiver(mvx,mvy);title('move vector');
[X,Y]=meshgrid(N/2:N:256-N/2);
Y=256-Y;
figure,quiver(X,Y,mvx,mvy),title('motion vector');
diff=abs(double(f1)-fp);
figure,imshow(uint8(diff)),title('diff');
PSNR=20*log10(255)+20*log10(256)-10*log10(sum(sum(diff.*diff)));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -