补偿连续图像的旋转

时间:2014-02-03 22:34:26

标签: c++ opencv rotation translation

假设我从网络摄像头获取了image1image2。对于image2,网络摄像头会进行旋转(偏航,俯仰,滚动)和翻译。

我想要的内容:从image2移除轮播,以便只保留翻译(确切地说:(x,y)中的跟踪点image2将是旋转到与image1中相同的值,以便只保留翻译组件。

到目前为止我做过/尝试过的事情:

  • 我跟踪了image1image2的相应功能。
  • 使用F计算基本矩阵RANSAC以删除异常值。
  • 校准相机,以便我得到CAM_MATRIX(fx,fy等)。
  • FCAM_MatrixE = cam_matrix^t * F * cam_matrix
  • 计算出的基本矩阵
  • 使用OpenCV的SVD函数分解E矩阵,以便我有一个旋转矩阵和平移向量。 - 我知道有4种组合,只有1种是正确的平移向量/旋转矩阵。

所以我的想法是:我知道从image1image2的相机移动不会超过20°/ AXIS,所以我可以消除角度太远的至少2种可能性。

对于剩下的2个,我必须对点进行三角测量,看看哪一个是正确的(我已经读过我只需要1,但是由于可能的错误/异常值,应该再做一些以确定哪一个是正确的)。我想我可以使用OpenCV的三角测量功能吗?到目前为止我的想法是否合适?我是否需要计算投影误差?

让我们继续前进并假设我最终获得了正确的R|t矩阵。 我该如何继续?我试图乘法正常,以及转置旋转矩阵,它应该反转旋转(?)(为了测试目的,我只是尝试了两种可能的R | t组合,我还没有在代码中进行三角测量)跟踪点在image2。但计算出来的点与它应该的距离太远了。我在这里也需要校准矩阵吗?

那么如何反转应用于image2的旋转?(确切地说,将反向旋转应用于包含跟踪的std::vector<cv::Point2f>数组(x,y) )点image2

显示反转图像也很不错。这是通过warpPerspective函数完成的吗?就像this post一样?

(我只是不完全明白T矩阵中A1 / A2和dist的用途是什么,或者我如何采用这个解决方案来解决我的问题。)

0 个答案:

没有答案