使用OpenCV和C++实现图像稳定化

7
今天我有很多问题需要帮助,即使在我的问题的某些部分也需要帮助。这些问题非常紧急,所以请尽力帮我。
我正在使用光流方法进行图像稳定。这一步骤已经完成并产生了良好的结果,现在我想为视频实现稳定,我有两种方法可以做到这一点:
第一种方法: 我已经获得了第一帧和下一帧之间特征点之间的平移和旋转矩阵。现在,我的主管建议我这样做;将画布扩大两倍,比原始画面大,并将第一帧复制到中间。对于每个下一帧,使用我获得的变换来计算偏移量和旋转角度。使用这些参数并将下一帧复制到其校正位置。这应该会产生一个校正后的视频。
那么如何做呢?如果openCV中有相关函数,请提供帮助。
第二种方法, 我试图用自己的方式来做,我试图通过变形图像来获得校正后的视频,我已经获得了单应性矩阵,但它无法与cvWarpPerspective() 函数配合使用。无论如何,我正在做的获取稳定图像的方法是否正确或您有什么建议?
问题:
1-单应性矩阵会给出负值,这正确吗?
2-如我上面所提到的关于旋转和平移矩阵,我必须制作这个方程式,以便将第二帧中估计的特征点返回到第一帧中的位置
Y = 旋转矩阵* x + 平移矩阵
它有时会给出几乎完美的结果,而另一次则会给出非常糟糕的结果,其中我得到了负值并且远离它们应该在的位置,为什么会这样?
请回答您能回答的问题,即使它是子问题。
非常感谢。

关于第二种方法 - 问题2:如果你得到了好的结果,然后又得到了坏的结果,那么很可能意味着你正在走上正确的道路。但是,你需要过滤结果或预处理图像,以确保你始终能够获得可接受的结果。 - nacho4d
@Mario,我现在也遇到了类似的问题。你是怎么解决这个问题的?能否分享一下你编写图像稳定代码的方法? - tom
@tom:从未再继续开发它,我把它留给了你看到的这些问题,并开始了另一个项目。 - Mario
2个回答

1

看起来你可能有一些错误的对应关系,这会破坏你恢复全局对齐的算法(顺便问一下,你用的是哪个算法?)。尝试在一个只有少数对应关系的合成数据集上观察会有什么结果可能会有所帮助。


-1

单应矩阵出现负值是正确的吗?

可能不是。我猜这需要从“后面”查看图像。

有时会给出非常糟糕的结果,我得到了负值并且远离它们应该在的位置,为什么会这样?

一些想法:

  • int 类型溢出?
  • 特征检测错误?
  • 如果我没记错,只有在平移不为空时,单应矩阵才有效。

当平移为NULL时,2D单应性运作得非常好。 - ssegvic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接