clc
close all
clear all
% Block Size
N = 32;
% Reading Files
Anchor1 = rgb2gray(imread('c:/frame1.tif'));
Target1 = rgb2gray(imread('c:/frame2.tif'));
[a1 b1] = size(Anchor1);
% ZeroPadding Files
Anchor = zeros(a1+2*N,b1+2*N);
Target = zeros(a1+2*N,b1+2*N);
Anchor(N+1:a1+N,N+1:b1+N) = Anchor1(1:a1,1:b1);
Target(N+1:a1+N,N+1:b1+N) = Target1(1:a1,1:b1);
% ZeroPadded image size
[a b] = size(Anchor);
prediction = zeros(a,b);
flag = zeros(a,b);
% Search Range
Rx = 32
Ry = 32
% Motion Field Array
vx = zeros(a/N,b/N);
vy = zeros(a/N,b/N);
% Main Loop
for ai = N+1:N:a-N
for aj = N+1:N:b-N
% calculation for block number (ai,aj) in anchor frame
minBlockIdxi = -1;
minBlockIdxj = -1;
minDiff = 10000000;
diff0 = 0;
% finding the most similar block
for ti=-Rx:Rx
for tj=-Ry:Ry
diff = calDiff(ai,aj,ti,tj,N,Anchor,Target);
if diff < minDiff
minBlockIdxi = ti;
minBlockIdxj = tj;
minDiff = diff;
end
end
end
% Motion field Calculation
x1 = (ai-1)/N+1;
y1 = (aj-1)/N+1;
vx(x1,y1) = minBlockIdxi;
vy(x1,y1) = minBlockIdxj;
% replacing most similar block
for ix=1:N
for jx=1:N
idx1 = ai + ix-1;
idx2 = aj + jx-1;
d1 = idx1+minBlockIdxi;
d2 = idx2+minBlockIdxj;
prediction(d1,d2)=Anchor(idx1,idx2);
flag(d1,d2) = 255;
end
end
end
end
% recovering the pixels which have not been met
for i=1:a
for j=1:b
if flag(i,j)==0
prediction(i,j) = Anchor(i,j);
end
end
end
% calculating PSNR
prediction1 = zeros(a-2*N,b-2*N);
prediction1(:,:) = prediction(N+1:a-N,N+1:b-N);
calPSNR(prediction1,Target1)
calPSNR(prediction1,Anchor1)
% Calculating difference image
d = zeros(a-2*N,b-2*N);
for i=N+1:a
for j=N+1:b
d(i,j) = Target(i,j)-prediction(i,j);
end
end
figure,
subplot(2,2,1),imshow(Anchor1);
title('Anchor Image');
subplot(2,2,2),imshow(Target1);
title('Target Image');
subplot(2,2,3),imshow(prediction(N+1:a-N,N+1:b-N),[]);
title('Predicted Image');
subplot(2,2,4),imshow(d(N+1:a-N,N+1:b-N),[]);
title('Difference Image');
% motion vector
[y,x] = meshgrid(2:a/N-1,2:b/N-1);
vx = vx(2:a/N-1,2:b/N-1)';
vy = vy(2:a/N-1,2:b/N-1)';
title('Motion Vector');
figure,quiver(x,y,vx,vy);
评论0