【问题标题】:Compute global motion opencv 2.4.x C++计算全局运动 opencv 2.4.x C++
【发布时间】:2016-04-25 06:23:28
【问题描述】:

这里有两张图像,一张是在外科医生采取行动之前拍摄的,另一张是之后拍摄的。

之前:

之后:

区别:(After - Before)+ 128。(加上128只是为了更好的形象)

如白色箭头所示,有一个全局运动影响了所有对象。

因此,我需要对其进行估计,以获得有关场景中正在发生的事情的更有价值的信息。

我已经知道OpenCV 3.0 在这种情况下会有所帮助,它实现了一些方法来估计两个图像或两个点列表之间的主要运动。但到目前为止我一直在使用OpenCV 2.4.x,因为我的机器上已经安装了库,所以我正在寻找替代解决方案或任何其他可以满足我需求的代码。

【问题讨论】:

  • 我将分享一个链接here。它与视频有关,而不是前后图像对,但也许它可以给你一个想法。我建议您浏览一下该博客上的其他帖子,可能对您有用。

标签: c++ opencv opencv3.0 motion-detection


【解决方案1】:

您正在寻找dense optical flow 算法:

结果

cv::calcOpticalFlowFarneback(img1, img2, flowField, 0.5, 3, 10, 5, 5, 1.1)

是您清楚地看到变化的以下流场:

关于全局运动检测:

  • 如果全局运动非常小(如您的示例中所示),您可以只对运动矢量设置阈值:丢弃小的值。
  • 如果它更大,请找到主要运动矢量并将其从所有矢量中减去。然后阈值丢弃小值

【讨论】:

  • 你是如何得到这张图片的?
  • 是的。我想我交换了图像顺序,但使用上面发布的图像就是结果。配置为cv::calcOpticalFlowFarneback(previousImage, image, flowField, 0.5, 3, 10, 5, 5, 1.1)
  • 但我真的不明白你是怎么得到这张图片的? here 是我得到的
  • 该链接显示了一种稀疏光流方法(例如几个关键点的流)。 Farneback 光流直接作用于图像,因此返回每个像素的流向量
猜你喜欢
  • 2012-05-24
  • 2022-01-21
  • 1970-01-01
  • 2011-06-29
  • 1970-01-01
  • 2017-02-24
  • 1970-01-01
  • 2016-01-18
  • 1970-01-01
相关资源
最近更新 更多