% Normalized sum of squared differences between two image windows
function s = ssd(w1, w2, delta)
if nargin < 3
delta = [];
end
% Pixel-by-pixel difference
d = (w1 - w2) .^2;
d = d(:);
% If the window is at the image boundary, it may contain NaN values.
% Do not count those
d = d(find(~isnan(d)));
% Sum of squared differences, per pixel
if length(d) > 0
s = sum(d) / length(d);
else
s = Inf; % Empty windows are maximally dissimilar
end
% This normalization is conceptually unnecessary, but prevents big numbers
% in the output. It is equivalent to normalizing images down from 0:255 to
% 0:1
s = s / 255 ^ 2;