function [ux, uy, uz] = LK3D (image1, image2, r)
% Cette fonction estime les déformations entre deux images 3D suivantes
% en utilisant l'équation de flux optique de Lucas-Kanade.
%
% Description:
%
% -image1, image2: deux images suivantes ou images
% -r: rayon de voisinage, la valeur par défaut est 2.
%
% Référence:
% Lucas, BD, Kanade, T., 1981. Un enregistrement d'image itérative
% technique avec une application à la vision stéréo. Dans: Actes de la
7e conférence internationale conjointe sur l'intelligence artificielle - Volume 2.
% Morgan Kaufmann Publishers Inc., San Francisco, Californie, États-Unis, pp. 674-679.
%%
Auteur: Mohammad Mustafa
% Avec l'aimable autorisation de l'Université de Nottingham et Mirada Medical Limited,
% Oxford, Royaume - Uni
%
% Publié sous Creative Commons Attribution-non-commercial-Share Alike
% 3.0 Unported http://creativecommons.org/licenses/by-nc- sa / 3.0 /
%
% Juin 2012
% Paramètre par défaut
si nargin == 2
r = 2;
finir
[hauteur, largeur, profondeur] = taille (image1);
image1 = im2double (image1);
image2 = im2double (image2);
% Initialisation des vecteurs de flux
ux = zéros (taille (image1)); uy = ux; uz = ux;
% Calcul des dérivés d'image
[Ix, Iy, Iz, It] = imageDerivatives3D (image1, image2);
pour i = (r + 1) :( hauteur-r)
pour j = (r + 1) :( largeur-r)
pour k = (r + 1) :( profondeur-r)
blockofIx = Ix (ir: i + r, jr: j + r, kr: k + r);
blockofIy = Iy (ir: i + r, jr: j + r, kr: k + r);
blockofIz = Iz (ir: i + r, jr: j + r, kr: k + r);
blockofIt = It (ir: i + r, jr: j + r, kr: k + r);
A = zéros (3,3);
B = zéros (3,1);
A (1,1) = somme (somme (somme (blockofIx. ^ 2)));
A (1,2) = somme (somme (somme (blockofIx. * BlockofIy)));
A (1,3) = somme (somme (somme (blockofIx. * BlockofIz)));
A (2,1) = somme (somme (somme (blockofIy. * BlockofIx)));
A (2,2) = somme (somme (somme (blockofIy. ^ 2)));
A (2,3) = somme (somme (somme (blockofIy. * BlockofIz)));
A (3,1) = somme (somme (somme (blockofIz. * BlockofIx)));
A (3,2) = somme (somme (somme (blockofIz. * BlockofIy)));
A (3,3) = somme (somme (somme (blockofIz. ^ 2)));
B (1,1) = somme (somme (somme (blockofIx. * BlockofIt)));
B (2,1) = somme (somme (somme (blockofIy. * BlockofIt)));
B (3,1) = somme (somme (somme (blockofIz. * BlockofIt)));
invofA = pinv (A);
V = invofA * (- B);
ux (i, j, k) = V (1,1);
uy (i, j, k) = V (2,1);
uz (i, j, k) = V (3,1);
fin
fin
fin
finir