% estimate the motion vector of a 1 d ``image'' N = 1000; % number of ``pixels'' in 1d ``image'' x = (0:(N-1))/N; % [0,1) f = 2; % number of cycles of sinusoid pixelshift = .1234; % number of pixels shifted over %pixelshift = 125; E1 = sin(2*pi*f*x); pixelspercycle = length(x)/f; phase = pixelshift/pixelspercycle; % not *2*pi; for now E2 = sin(2*pi*(f*x-phase)); % shift right by pixelshift pixels subplot(211) plot(E1) plot(E2) % sampling is between each on a 4 by 4 matrix, so if E1 and E2 both 1 by 8 % (ie if movie is 2 by 8) result is 1 by 7, centered % % 1 2 3 4 3 2 1 0 % @ @ @ @ @ @ @ % 9 8 7 6 5 4 3 2 Ex = (diff(E1) + diff(E2))/2; % dim. 1 by N now = (E1(1:N-1) + E1(2:N))/2; % interpolate to between pixels later = (E2(1:N-1) + E2(2:N))/2; Et = later - now; u = - sum(Et.*Ex)/sum(Ex.*Ex) % velocity in X direction err = u - pixelshift