Fast, robust estimation of translational offset between a pair of images. Approximates the translational offset between two images by assuming the images lie on linear manifold. Specifically, assumes that if I0 and I1 are a pair of images related by a translation [dx dy], then (I0+I1)/2 is the image exactly halfway between I0 and I1 (ie I0 translated by [dx/2 dy/2]). The above only holds for small translations and spatially smooth images. As such the input images typically need to be spatially smoothed first, the amount of necessary smoothing will increase as the size of translation increases (experiment for best results). The code is quite fast, the bottleneck is the spatial smoothing. More accurate results can be optained by iterating between estimating the translation and applying the resulting translation. The actual computation is performed as follows. First we generate an artificial translation of I0 by 1 pixel in x and y, and store the results in Tx and Ty respectively. The linearity assumption then tells us that: I1 = I0 + (I0-Tx) * dx + (I0-Ty) * dy Only dx and dy are unknown in the resulting overcomplete set of linear equations, least squares is then used. The error of the estimate can be used as a measure of the quality of the linear fit. This function was inspired by the beautiful work ok Yang et al.: H. Yang, M. Pollefeys, G. Welch, J. Frahm, and A. Ilie. Differential camera tracking through linearizing the local appearance manifold. CVPR, 2007. USAGE [delta,err] = diffTracker( I0, I1, sigma ) INPUTS I0 - reference grayscale double image I1 - translated version of I0 sigma - amount of Gaussian spatial smoothing to apply OUTPUTS delta - estimated dx/dy err - squared error of estimate EXAMPLE I = imread('cameraman.tif'); dx=3; dy=5; I0=I(1+dy:end,1+dx:end); figure(1); im(I0); I1=I(1:end-dy,1:end-dx); figure(2); im(I1); tic, [delta,err] = diffTracker( I0, I1, 10 ), toc See also Piotr's Image&Video Toolbox Version 2.31 Copyright 2009 Piotr Dollar. [pdollar-at-caltech.edu] Please email me if you find bugs, or have suggestions or questions! Licensed under the Lesser GPL [see external/lgpl.txt]