确定两帧之间的移动/运动(以像素为单位)

时间:2014-06-25 10:54:51

标签: opencv emgucv motion-detection

首先,我是图像处理的新手,所以请不要对我太苛刻。 话虽这么说,我正在开发一个应用程序,使用相机获得的热图像分析四肢血流量的变化。用户能够通过在当前图像上放置形状(圆形,矩形等)来定义感兴趣区域。然后,用户应该能够看到指定ROI内的平均温度如何在帧与帧之间变化。

问题在于,由于测试对象的(小)移动,一些图像不稳定。我的问题是如何确定帧之间的移动,以便我可以相应地重新定位ROI?

我使用Emgu OpenCV .Net包装器进行图像处理。 到目前为止,我所尝试的是使用GetMoments()在找到的最大轮廓上计算重心,并计算此与前一个重心之间的方向向量。然后使用该向量转换ROI,但结果还不是那么有希望。

这是正确的做法吗?还是我完全咆哮错误的树?

------ ------编辑

以下是两个示例图像,显示向右下方的轻微移动:

http://postimg.org/image/wznf2r27n/

轮廓之间的比较:

http://postimg.org/image/4ldez2di1/

正如你所看到的,轮廓的形状几乎相同,尽管脚趾附近有一些小的差异。

1 个答案:

答案 0 :(得分:0)

似乎我终于能够使用基于Lukas-Kanade方法的光流找到我的问题的解决方案。

以防万一其他人想知道如何在Emgu / C#中实现它,这里是Emgu示例项目的链接,他们使用Lukas-Kanade和Farneback的算法: http://sourceforge.net/projects/emguexample/files/Image/BuildBackgroundImage.zip/download

您可能需要调整一些内容,例如角点检测的参数(frame.GoodFeaturesToTrack(..)方法),但它绝对是一个开始的东西。

感谢所有想法!