function [ux, uy, uz] = LK3D (image1, image2, r)
% Esta función estima las deformaciones entre dos imágenes tridimensionales subsiguientes
% utilizando la ecuación de flujo óptico de Lucas-Kanade.
%
% Descripción:
%
% -image1, image2: dos imágenes o fotogramas posteriores
% -r: radio de la zona, el valor predeterminado es 2.
%
% Referencia:
% Lucas, BD, Kanade, T., 1981. Un registro de imágenes iterativo
% técnica con una aplicación a la visión estéreo. En: Actas de la
7ª conferencia internacional conjunta sobre inteligencia artificial - Volumen 2.
% Morgan Kaufmann Publishers Inc., San Francisco, CA, EE. UU., Págs. 674-679.
%%
Autor: Mohammad Mustafa
% Por cortesía de la Universidad de Nottingham y Mirada médica limitada,
% Oxford, Reino Unido
%
% Publicado bajo una licencia Creative Commons Reconocimiento-No comercial-Compartir bajo la misma
% 3.0 Unported http://creativecommons.org/licenses/by-nc- sa / 3.0 /
%
% de junio de 2012
% Parámetro predeterminado
si nargin == 2
r = 2;
fin
[alto, ancho, profundidad] = tamaño (imagen1);
imagen1 = im2double (imagen1);
imagen2 = im2double (imagen2);
% Inicializando vectores de flujo
ux = ceros (tamaño (imagen1)); uy = ux; uz = ux;
% Calcular derivadas de imágenes
[Ix, Iy, Iz, It] = imageDerivatives3D (image1, image2);
para i = (r + 1) :( altura-r)
para j = (r + 1) :( ancho-r)
para k = (r + 1) :( profundidad-r)
bloque de Ix = Ix (ir: i + r, jr: j + r, kr: k + r);
blockofIy = Iy (ir: i + r, jr: j + r, kr: k + r);
bloque de Iz = Iz (ir: i + r, jr: j + r, kr: k + r);
blockofIt = It (ir: i + r, jr: j + r, kr: k + r);
A = ceros (3,3);
B = ceros (3,1);
A (1,1) = suma (suma (suma (bloque de Ix. ^ 2)));
A (1,2) = suma (suma (suma (bloque deIx. * Bloque deIy)));
A (1,3) = suma (suma (suma (bloque deIx. * Bloque deIz)));
A (2,1) = suma (suma (suma (bloque deIy. * Bloque deIx)));
A (2,2) = sum (sum (sum (blockofIy. ^ 2)));
A (2,3) = suma (suma (suma (bloque deIy. * Bloque deIz)));
A (3,1) = suma (suma (suma (bloque de Iz. * Bloque de Ix)));
A (3,2) = suma (suma (suma (bloque deIz. * Bloque deIy)));
A (3,3) = suma (suma (suma (bloque deIz. ^ 2)));
B (1,1) = sum (sum (sum (blockofIx. * BlockofIt)));
B (2,1) = sum (sum (sum (blockofIy. * BlockofIt)));
B (3,1) = suma (suma (suma (bloque deIz. * Bloque deIt)));
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
fin