稳定来自移动摄像机的视频,或如何将所有内容转换为固定坐标系

计算机视觉(CV)功能现在正在完全重塑公共安全解决方案的市场格局。尽管用传统的视频监控系统使每个人都不再感到惊讶,并且在任何公共场所都找不到它很奇怪,但是在这一领域使用AI仍然是一种新颖。



我们正在研究CV在各种公共安全业务任务中的应用。在这篇文章中,我们提供了一个选项,可以将视频从移动的摄像机转换为固定的坐标系以进行进一步的分析。



整个项目在GitHub上






假设我们有某种视频,并且我们想为其建立一个固定的坐标系,以便评估对象之间的相对位置。



为什么需要这个?在公共监视任务中,经常需要用移动摄像机拍摄需要分析的视频。因此,在确定对象相对于彼此的位置时会出现一些问题:



  • 目前尚不清楚是什么原因导致了对象坐标的变化:相机或对象本身正在移动;
  • 当由于摄像机旋转而改变场景时,即使对象是静态的,不同的对象也可以获得相同的坐标。


图片

图1-由于相机移动,相同的对象具有不同的坐标



为了建立固定的坐标系,您必须:



  1. 确定坐标原点;
  2. 比较两个连续的帧;
  3. , , (, , ..).


图片

2 —



:



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




3 — matching visualization



  1. , .




:



图片



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


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



图片

:



ŤXÿ1个=HXÿ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:



图片



3 — ,



, . a :

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



?

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



Hsüp=H1个H2H3.........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).



ŤXÿ1个=HsüpXÿ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:



图片

5 — matching visualization



.

, , (heatmap visualization):



图片

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 .



图片

8 — visualize_camera_stabilization



图片

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




因此,我们获得了一个组件,该组件允许我们估计对象相对于彼此的实际位置,以将对象的坐标转换为相对于框架的固定系统。因为 在此解决方案中,最主要的是使用关键点评估飞机的变形,然后,如上所示,即使在恶劣的拍摄条件下(清晰的相机移动,恶劣的天气条件,夜间拍摄等),也可以解决任务。




All Articles