function [u, v] = HornSchunck();
ite=100;
alpha=25;
im1=imread('MobileCalendar034.bmp');
im2=imread('MobileCalendar035.bmp');
im1=rgb2gray(im1);
im2=rgb2gray(im2);
im1=double(im1);
im2=double(im2);
im1 = smoothts(im1, 'g', 5);
im2 = smoothts(im2, 'g', 5);
fx = conv2(im1,0.25* [-1 1; -1 1],'same') + conv2(im2, 0.25*[-1 1; -1 1],'same');
fy = conv2(im1, 0.25*[-1 -1; 1 1], 'same') + conv2(im2, 0.25*[-1 -1; 1 1], 'same');
ft = conv2(im1, 0.25*ones(2),'same') + conv2(im2, -0.25*ones(2),'same');
u = zeros(size(im1));
v = zeros(size(im2));
kernel_1=[1/12 1/6 1/12;1/6 0 1/6;1/12 1/6 1/12];
for i=1:ite
uAvg=conv2(u,kernel_1,'same');
vAvg=conv2(v,kernel_1,'same');
u= uAvg - ( fx .* ( ( fx .* uAvg ) + ( fy .* vAvg ) + ft ) ) ./ ( alpha^2 + fx.^2 + fy.^2);
v= vAvg - ( fy .* ( ( fx .* uAvg ) + ( fy .* vAvg ) + ft ) ) ./ ( alpha^2 + fx.^2 + fy.^2);
end
figure;
rSize=1;
scale=2;
imshow(im1,[0 255]);
hold on;
for i=1:size(u,1)
for j=1:size(u,2)
if floor(i/rSize)~=i/rSize || floor(j/rSize)~=j/rSize
u(i,j)=0;
v(i,j)=0;
end
end
end
quiver(u, v, scale, 'color', 'y', 'linewidth', 1);
set(gca,'YDir','reverse');