[Flujo óptico 3D LK] Simulación de MATLAB basada en el algoritmo de extracción de flujo óptico 3D de Lucas Kanade

1. Versión de software

MATLAB2021a

2. Parte del código central

function [ux,uy,uz]=LK3D( image1, image2, r )


%  Default parameter
if nargin==2
    r=2;
end

[height,width,depth]=size(image1); 
image1=im2double(image1);
image2=im2double(image2);

% Initializing flow vectors
ux=zeros(size(image1)); uy=ux; uz=ux;

% Computing image derivatives
[Ix,Iy,Iz,It]=imageDerivatives3D(image1,image2);

for i=(r+1):(height-r)
    for j=(r+1):(width-r)
        for k=(r+1):(depth-r)
        
        blockofIx=Ix(i-r:i+r,j-r:j+r,k-r:k+r);
        blockofIy=Iy(i-r:i+r,j-r:j+r,k-r:k+r);
        blockofIz=Iz(i-r:i+r,j-r:j+r,k-r:k+r);
        blockofIt=It(i-r:i+r,j-r:j+r,k-r:k+r);

               
        A=zeros(3,3);
        B=zeros(3,1);
        
        A(1,1)=sum(sum(sum(blockofIx.^2)));
        A(1,2)=sum(sum(sum(blockofIx.*blockofIy)));
        A(1,3)=sum(sum(sum(blockofIx.*blockofIz)));
        
        A(2,1)=sum(sum(sum(blockofIy.*blockofIx)));
        A(2,2)=sum(sum(sum(blockofIy.^2)));
        A(2,3)=sum(sum(sum(blockofIy.*blockofIz)));

        A(3,1)=sum(sum(sum(blockofIz.*blockofIx)));
        A(3,2)=sum(sum(sum(blockofIz.*blockofIy)));
        A(3,3)=sum(sum(sum(blockofIz.^2)));
       
        B(1,1)=sum(sum(sum(blockofIx.*blockofIt)));
        B(2,1)=sum(sum(sum(blockofIy.*blockofIt)));
        B(3,1)=sum(sum(sum(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);
        end
    end
end

end

3. Pasos de operación y conclusión de la simulación.

4. Referencias

[1] Xie Hong, Yuan Bo, Xie Wu. Algoritmo de detección de objetivos en movimiento basado en el método de flujo óptico LK y el método de diferencia de tres fotogramas [J] Applied Science and Technology, 2016, 43(3):6.

D231

Supongo que te gusta

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