Método de flujo óptico de Lucas-Kanade para el programa de código fuente 3D-algoritmo de extracción de flujo óptico LK tridimensional

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

Supongo que te gusta

Origin blog.csdn.net/ccsss22/article/details/113852196
Recomendado
Clasificación