Estabilizar el video de una cámara en movimiento o cómo traducir todo a un sistema de coordenadas fijo

Las capacidades de visión por computadora (CV) ahora están remodelando completamente el panorama del mercado de soluciones de seguridad pública. Si bien ya no es fácil sorprender a nadie con los sistemas tradicionales de videovigilancia, y resulta extraño no encontrarlo en ningún lugar público, el uso de la IA en este ámbito sigue siendo una novedad.



Estamos investigando la aplicación de CV a diversas tareas comerciales de seguridad pública. En esta publicación ofrecemos una opción para traducir el video de una cámara en movimiento a un sistema de coordenadas fijas para un análisis más detallado.



Todo el proyecto está en GitHub .






Digamos que tenemos algún tipo de video y queremos construir un sistema de coordenadas fijo para él con el fin de evaluar la ubicación de los objetos entre sí.



¿Por qué es necesario? Muy a menudo en las tareas de vigilancia pública, el video que necesita ser analizado se filma con una cámara en movimiento. Debido a esto, surgen varios problemas al determinar la posición de los objetos entre sí:



  • No está claro qué causó el cambio en las coordenadas del objeto: la cámara o el objeto mismo se está moviendo;
  • Al cambiar de escena debido a la rotación de la cámara, diferentes objetos pueden obtener las mismas coordenadas, incluso si los objetos fueran estáticos.


imagen

Figura 1: objetos idénticos tienen diferentes coordenadas debido al movimiento de la cámara



Para construir un sistema de coordenadas fijo, debe:



  1. Determine el origen de las coordenadas;
  2. Compare dos fotogramas consecutivos entre sí;
  3. , , (, , ..).


imagen

2 —



:



  1. .
  2. : , . . . SIFT, SURF ORB. , . , , , .




3 — matching visualization



  1. , .




:



imagen



  • a, e x y ;
  • b, d — ( a e );
  • c, f — ;
  • g, h — .


, , . (x,y) (x',y') :



imagen

:



t(X,y,1)=H(X,y,1)(1)



:



k- .

N(f1,..., fN). . matching points , fk fk-1.



:



— ;

(Xk, Yk)=((x1k, y1k),…, (xnk, ynk)) – n matching points;

(X'k, Y'k) =((x'1k, y'1k),…, (x'nk, y'nk)) – n matching points ;

(X''k, Y''k) =((x''1k, y''1k),…, (x''nk, y''nk)) – k — n matching points , fk-1.

Hk – , fk-1 fk.

, .



(Xk, Yk) (X'k, Y'k). f1 fk , .. . Hk.



, (H1,…, Hk-1). Hk (Xk-1, Yk-1) (Xk, Yk), , .



3:



imagen



3 — ,



, . a :

x1k= x1k-1a, , a : x'1k = x1ka, 3. , , .



?

(H1,…, Hk-1). , 1 k-1 mathcing points fk-1 . (1), , — .



Hstupags=H1(H2(H3.........))(2)



, , , fk-1 fk, : (Xk-1, Yk-1) (Xk, Yk) ( (2)), (X'k-1, Y'k-1) (X''k, Y''k) Hk. , , (x1k, y1k) (x'1k, y'1k).



t(X,y,1)=Hstupags(X,y,1)(3)



: , ( , , .. ), - , . .

:



  • "" matching points ((x1k, y1k),… ,(x'nk, y'nk)),
  • H, k- k-1 .
  • ((x'1k, y'1k),… ,(x'nk, y'nk))
  • :

    • , ;
    • . , ;
    • - ( LENGTH_ACCOUNTED_POINTS len(matching points)), , , , .


, . .



"" , . , , , , . T , . , motion video segmentation.





.

GitHub , .



  • evenvizion_component.py
  • evenvizion_visualization.py
  • compare_evenvizion_with_original_video.py


evenvizion_component.py

, evenvizion_component.py. , json , fk-1 fk. , json , . , , .



- , json --path_to_original_coordinate recalculated_coordinates.json , .

json :



{"frame_no": [{"x1": x coordinate, "y1": y coordinate}, ...], ...}

evenvizion_component.py , 3 ( matching and heatmap --show_matches --visualize_fixed_coordinate_system ).



evenvizion_visualization.py compare_evenvizion_with_original_video.py .



README.



, .



:



matching points — matching visualization:



imagen

5 — matching visualization



.

, , (heatmap visualization):



imagen

6 — heatmap visualization



20 , , . , . : r=sqrt(x2+y2), heatmap_constant , : 0 — , 1 — .





7 — fixed_coordinate_system_visualization



json , , fixed_coordinate_system_visualization ( 7).



evenvizion_visualization.py compare_evenvizion_with_original_video.py , ( ). 8 9 .



imagen

8 — visualize_camera_stabilization



imagen

9 — original_video_with_EvenVizion



Known issues



N/a . matching points , , 90 , . video motion segmentation, , , static points motion points. — .



. 4 matching points, , 4 , =None. : none_H_processing True, : Hk=Hk-1. False, H — , . .



. . . :



  • . , , (, ).
  • findHomography() opencv. .




Así, obtenemos un componente que nos permite estimar la posición real de los objetos entre sí, para trasladar las coordenadas del objeto a un sistema estacionario en relación con el marco. Porque En esta solución, lo principal es evaluar la transformación de los aviones usando puntos clave, luego, como se muestra arriba, el problema se puede resolver incluso en malas condiciones de disparo (movimiento brusco de la cámara, condiciones climáticas difíciles, disparos de noche, etc.).




All Articles