Stabiliser la vidéo d'une caméra en mouvement, ou comment tout traduire en un système de coordonnées fixe

Les capacités de vision par ordinateur (CV) remodèlent maintenant complètement le paysage du marché des solutions de sécurité publique. S'il n'est pas facile de surprendre qui que ce soit avec les systèmes de vidéosurveillance traditionnels, et qu'il soit étrange de ne le trouver dans aucun lieu public, l'utilisation de l'IA dans ce domaine est encore nouvelle.



Nous étudions l'application du CV à diverses tâches commerciales de sécurité publique. Dans cet article, nous proposons une option pour traduire la vidéo d'une caméra en mouvement dans un système de coordonnées fixes pour une analyse plus approfondie.



L'ensemble du projet est sur GitHub .






Disons que nous avons une sorte de vidéo et que nous voulons construire un système de coordonnées fixe pour cela afin d'évaluer l'emplacement des objets les uns par rapport aux autres.



Pourquoi est-ce nécessaire? Très souvent, dans les tâches de surveillance publique, la vidéo à analyser est filmée avec une caméra en mouvement. Pour cette raison, plusieurs problèmes se posent lors de la détermination de la position des objets les uns par rapport aux autres:



  • On ne sait pas ce qui a provoquĂ© le changement des coordonnĂ©es de l'objet: la camĂ©ra ou l'objet lui-mĂŞme est en mouvement;
  • Lors du changement de scène en raison de la rotation de la camĂ©ra, diffĂ©rents objets peuvent obtenir les mĂŞmes coordonnĂ©es, mĂŞme si les objets Ă©taient statiques.


image

Figure 1 - Les objets identiques ont des coordonnées différentes en raison du mouvement de la caméra



Pour créer un système de coordonnées fixe, vous devez:



  1. Déterminez l'origine des coordonnées;
  2. Comparez deux images consécutives l'une avec l'autre;
  3. , , (, , ..).


image

2 —



:



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




3 — matching visualization



  1. , .




:



image



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


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



image

:



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:



image



3 — ,



, . a :

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



?

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



Hsup=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)=Hsup⋅(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:



image

5 — matching visualization



.

, , (heatmap visualization):



image

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 .



image

8 — visualize_camera_stabilization



image

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. .




Ainsi, nous obtenons un composant qui nous permet d'estimer la position réelle des objets les uns par rapport aux autres, de traduire les coordonnées de l'objet en un système stationnaire par rapport au cadre. Parce que Dans cette solution, l'essentiel est d'évaluer la transformation des avions à l'aide de points clés, puis, comme indiqué ci-dessus, le problème peut être résolu même dans de mauvaises conditions de prise de vue (mouvement brusque de la caméra, conditions météorologiques difficiles, prise de vue de nuit, etc.).




All Articles