Méthode de flux optique Lucas-Kanade pour l'algorithme d'extraction de flux optique LK tridimensionnel de code source 3-D

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

Je suppose que tu aimes

Origine blog.csdn.net/ccsss22/article/details/113852196
conseillé
Classement