当我的相机移动时,检测视频中物体运动的最佳方法是什么(排除相机的自我运动)?
我有实时50 FPS全高清1920x1080视频流 . 相机有自我运动 .
即我必须这样做:
-
估计相机在第1帧和第2帧之间的运动(平移,缩放和旋转)
-
补偿我的相机移动 - 反向移动第2帧
-
使用gpu::MOG2_GPU来检测物体的运动 - 两帧之间的差异
什么是补偿相机移动的最佳方式(最快和最好的质量)?
-
phaseCorrelate() - 只获得翻译而且非常慢
-
cv::videostab - 旨在消除抖动和视频稳定性的类
-
为每帧计算(gpu::SURF_GPU或goodFeaturesToTrack())和estimateRigidTransform() - 获得仿射变换(平移,缩放和旋转)但对于高清实时视频来说非常慢
每50秒帧 -
(每1秒1次)计算(gpu::SURF_GPU或goodFeaturesToTrack())和estimateRigidTransform()
-
使用方法4,但使用estimateRigidTransform()的自定义实现 - 使用(calcOpticalFlowSF()或calcOpticalFlowFarneback()或DenseOpticalFlow::calc)而不是calcOpticalFlowPyrLK():https://github.com/Itseez/opencv/blob/3942b1f36261b196a264eb35c996222848fe3c93/modules/video/src/lkpyramid.cpp#L1439
这5种方法中最好的是什么,如果这是4,那么最好的OpticalFlow功能是什么: