如何从视频中以数学方式获取相机跟踪路径
How to mathematically obtain camera trace path from video
我有一些(大致平坦的)视图的航拍视频(不需要深度图)。
我想获取相机中心经过的地面路径的形状
路径不必与世界北方相对应,也不必具有任何世界坐标。即使仿射变换,也只是具有大致相同的形状。
我已经为每一帧准备了一个矩阵,表示该帧与前一帧之间的仿射变换,精度很高,这意味着我有一个矩阵,对于一帧中的每个像素,给出了该帧的位置连续帧中的像素。
鉴于相机在移动,我怎样才能获得位于帧中心(=轨迹)的地面上的点的地面路径的形状(随时间变化)?
更一般地说,问题实际上只是关于知道帧的相对中心,对于每个帧,与第一帧相对应。
任何线索和答案都会让我受益匪浅。
我们称帧i和i+1[=35=之间的转换] T。
让我们看一个点 P[i] = (Xi,Yi) 在框架 i。如果我们想知道这个点是否在框架 i+1 中,我们只需要应用变换 T 在点 P[i] 上得到一个新点 P[i+1] = T(P).
为了获得相机的路径,我们从第 1 帧开始,图像的中心点 P1 = (row/2,col/2) 并计算 P2 = T(P1)。相机在第 1 帧和第 2 帧之间所做的路径大约是连接第 2 帧和 P2 中心的线。我们可以通过计算 P3 = T(P2) 等继续对第 2 帧执行此操作...问题是这些点在图像坐标中而不是世界坐标中。
为了解决这个问题,我们只是决定我们的 "World coordinate system" PW1 = (0,0) 是第一帧的中心。在我们新的 "World coordinate system" 的第二帧中,相机的中心将是 PW2 = ((row/2,col/2) - P2) - PW1。对于第三帧,中心将是 PW3 = ((row/2,col/2) - P3) - PW2 对于第 i 帧 PWi+1 = ((row/2,col/2) - Pi+1) - PWi。
这个想法是 PW_new = movement_of_the_camera_between_frames - last_location.
最后你会得到一组点PW1,PW2,..,PWn,它们是相机中心的路径。拟合样条曲线或其他东西并获得路径的形状。
我有一些(大致平坦的)视图的航拍视频(不需要深度图)。
我想获取相机中心经过的地面路径的形状
路径不必与世界北方相对应,也不必具有任何世界坐标。即使仿射变换,也只是具有大致相同的形状。
我已经为每一帧准备了一个矩阵,表示该帧与前一帧之间的仿射变换,精度很高,这意味着我有一个矩阵,对于一帧中的每个像素,给出了该帧的位置连续帧中的像素。
鉴于相机在移动,我怎样才能获得位于帧中心(=轨迹)的地面上的点的地面路径的形状(随时间变化)?
更一般地说,问题实际上只是关于知道帧的相对中心,对于每个帧,与第一帧相对应。
任何线索和答案都会让我受益匪浅。
我们称帧i和i+1[=35=之间的转换] T。 让我们看一个点 P[i] = (Xi,Yi) 在框架 i。如果我们想知道这个点是否在框架 i+1 中,我们只需要应用变换 T 在点 P[i] 上得到一个新点 P[i+1] = T(P).
为了获得相机的路径,我们从第 1 帧开始,图像的中心点 P1 = (row/2,col/2) 并计算 P2 = T(P1)。相机在第 1 帧和第 2 帧之间所做的路径大约是连接第 2 帧和 P2 中心的线。我们可以通过计算 P3 = T(P2) 等继续对第 2 帧执行此操作...问题是这些点在图像坐标中而不是世界坐标中。
为了解决这个问题,我们只是决定我们的 "World coordinate system" PW1 = (0,0) 是第一帧的中心。在我们新的 "World coordinate system" 的第二帧中,相机的中心将是 PW2 = ((row/2,col/2) - P2) - PW1。对于第三帧,中心将是 PW3 = ((row/2,col/2) - P3) - PW2 对于第 i 帧 PWi+1 = ((row/2,col/2) - Pi+1) - PWi。 这个想法是 PW_new = movement_of_the_camera_between_frames - last_location.
最后你会得到一组点PW1,PW2,..,PWn,它们是相机中心的路径。拟合样条曲线或其他东西并获得路径的形状。