Estabilizar vídeo de uma câmera em movimento ou como traduzir tudo em um sistema de coordenadas fixo

Os recursos de visão computacional (CV) estão agora remodelando completamente o cenário do mercado de soluções de segurança pública. Embora já não seja fácil surpreender ninguém com os sistemas tradicionais de videovigilância, e seja estranho não o encontrar em nenhum local público, o uso de IA nesta área ainda é uma novidade.



Estamos investigando a aplicação do CV a várias tarefas de segurança pública. Nesta postagem, oferecemos uma opção para traduzir o vídeo de uma câmera em movimento em um sistema de coordenadas fixas para análise posterior.



O projeto está totalmente no GitHub .






Digamos que temos algum tipo de vídeo e queremos construir um sistema de coordenadas fixas para ele, a fim de avaliar a localização dos objetos em relação uns aos outros.



Por que isso é necessário? Muitas vezes, nas tarefas de vigilância pública, o vídeo que precisa ser analisado é filmado com uma câmera em movimento. Por causa disso, vários problemas surgem na determinação da posição de objetos em relação uns aos outros:



  • Não está claro o que causou a mudança nas coordenadas do objeto: a câmera ou o próprio objeto está se movendo;
  • Quando a cena muda devido à rotação da câmera, diferentes objetos podem obter as mesmas coordenadas, mesmo se os objetos fossem estáticos.


imagem

Figura 1 - Objetos idênticos têm diferentes coordenadas devido ao movimento da câmera



Para construir um sistema de coordenadas fixas, você deve:



  1. Determine a origem das coordenadas;
  2. Compare dois quadros consecutivos entre si;
  3. , , (, , ..).


imagem

2 —



:



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




3 — matching visualization



  1. , .




:



imagem



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


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



imagem

:



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:



imagem



3 — ,



, . a :

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



?

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



Hsvocêp=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)=Hsvocêp(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:



imagem

5 — matching visualization



.

, , (heatmap visualization):



imagem

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 .



imagem

8 — visualize_camera_stabilization



imagem

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




Assim, obtemos um componente que nos permite estimar a posição real dos objetos em relação uns aos outros, para traduzir as coordenadas do objeto em um sistema estacionário em relação ao quadro. Porque Nessa solução, o principal é avaliar a transformação dos aviões usando pontos-chave, então, como mostrado acima, o problema pode ser resolvido mesmo em más condições de filmagem (movimentos nítidos da câmera, condições climáticas difíceis, filmagem à noite, etc.).




All Articles