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



首先,我在图像处理方面完全是新手,所以请不要对我太苛刻。话虽如此,我正在开发一个应用程序,通过摄像头获得的热图像来分析四肢血液流动的变化。用户可以通过在当前图像上放置一个形状(圆、矩形等)来定义感兴趣的区域。然后,用户应该能够看到在指定的ROI内每帧的平均温度是如何变化的。

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

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

这是正确的方法吗?还是我完全找错对象了?

——编辑——

这里有两个示例图像显示轻微向下移动到右边:

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

轮廓比较:

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

正如你所看到的,轮廓的形状几乎是一样的,尽管在脚趾附近有一些小的不同。

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

如果有人想知道如何在Emgu/c#中实现它,这里有一个Emgu示例项目的链接,在那里他们使用lucas - kanade和Farneback的算法:http://sourceforge.net/projects/emguexample/files/Image/BuildBackgroundImage.zip/download

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

谢谢你的建议!

最新更新