Simulación de Matlab y simulación del algoritmo de flujo óptico LK

1. Descripción del problema:

        La velocidad instantánea del movimiento de píxeles del objeto que se mueve espacialmente en el plano de imágenes de observación es utilizar el cambio del píxel en el dominio del tiempo en la secuencia de imágenes y la correlación entre cuadros adyacentes para encontrar la relación correspondiente entre el cuadro anterior y el fotograma actual, para calcular la información de movimiento de los objetos entre fotogramas adyacentes. Es decir, la proyección desde el dominio espacial al plano de la imagen. En términos sencillos, averiguar la velocidad instantánea y la dirección de cada punto de la imagen es el flujo óptico. Luego, use el método de mínimos cuadrados para resolver la ecuación de flujo óptico básica para todos los píxeles de la vecindad. Debido a que el número de ecuaciones ha excedido el número de incógnitas, suponga que el área alrededor de la posición p del píxel está determinada por el píxel; escríbalo en forma de matriz, luego

Escriba la descripción de la imagen aquí

 

2. Parte del programa:

 

función [u, v] = LucaKanade (im1, im2)
numLevels = 3;
ventana = 9;
iteraciones = 1;
alfa = 0,001;

hw = piso (ventana / 2);
pyramid1 = im1;
pyramid2 = im2;
para i = 2: numLevels
    im1 = impyramid (im1, 'reduce');
    im2 = impyramid (im2, 'reducir');
    pyramid1 (1: tamaño (im1,1), 1: tamaño (im1,2), i) = im1;
    pyramid2 (1: tamaño (im2,1), 1: tamaño (im2,2), i) = im2;
fin;
para p = 1: numLevels
   
    im1 = pyramid1 (1: (size (pyramid1,1) / (2 ^ (numLevels - p))), 1: (size (pyramid1,2) / (2 ^ (numLevels - p)) ), (numLevels - p) +1);
    im2 = pyramid2 (1: (tamaño (pyramid2,1) / (2 ^ (numLevels - p))), 1: (size (pyramid2,2) / (2 ^ (numLevels - p))), (numLevels - p ) +1);
       
    si p == 1
    u = ceros (tamaño (im1));
    v = ceros (tamaño (im1));
    si no  
    u = 2 * imresize (u, tamaño (u) * 2, 'bilineal');   
    v = 2 * imresize (v, tamaño (v) * 2, 'bilineal');
    fin
    
    para r = 1: iteraciones
   
    u = round (u);
    v = redondo (v);
    
        para i = 1 + hw: tamaño (im1,1) -hw
            para j = 1 + hw: tamaño (im2,2) -hw
            patch1 = im1 (i-hw: i + hw, j-hw: j + hw) ;
      
            lr = i-hw + v (i, j);
            hr = i + hw + v (i, j);
            lc = j-hw + u (i, j);
            hc = j + hw + u (i, j);
           
                  if (lr <1) || (hr> tamaño (im1,1)) || (lc <1) || (hc> tamaño (im1,2))  
                  más
                  parche2 = im2 (lr: hr, lc: hc) ;
      
                  fx = conv2 (parche1, 0.25 * [-1 1; -1 1], 'mismo') + conv2 (parche2, 0.25 * [- 1 1; -1 1], 'mismo');
                  fy = conv2 (parche1, 0.25 * [-1 -1; 1 1], 'mismo') + conv2 (parche2, 0.25 * [- 1 -1; 1 1], 'mismo');
                  ft = conv2 (parche1, 0.25 * unos (2), 'mismo') + conv2 (parche2, -0.25 * unos (2), 'mismo');

      
                  Fx = fx (2: ventana-1,2: ventana-1) ';
                  Fy = fy (2: ventana-1,2: ventana-1) ';
                  Ft = ft (2: ventana-1,2: ventana-1) ';

                  A = [Fx (:) Fy (:)];      
                  G = A '* A;
              
                  G (1,1) = G (1,1) + alfa; G (2,2) = G (2,2) + alfa;
                  U = 1 / (G (1,1) * G (2,2) -G (1,2) * G (2,1)) * [G (2,2) -G (1,2); - G (2,1) G (1,1)] * A '* - Ft (:);
                  u (yo, j) = u (yo, j) + U (1); v (yo, j) = v (yo, j) + U (2);
                  fin
            fin
        fin
    fin
fin
fin
 

3. Conclusión de la simulación:

C-79

Supongo que te gusta

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