首先,我是图像处理的新手,所以请不要对我太苛刻。 话虽这么说,我正在开发一个应用程序,使用相机获得的热图像分析四肢血流量的变化。用户能够通过在当前图像上放置形状(圆形,矩形等)来定义感兴趣区域。然后,用户应该能够看到指定ROI内的平均温度如何在帧与帧之间变化。
问题在于,由于测试对象的(小)移动,一些图像不稳定。我的问题是如何确定帧之间的移动,以便我可以相应地重新定位ROI?
我使用Emgu OpenCV .Net包装器进行图像处理。
到目前为止,我所尝试的是使用GetMoments()
在找到的最大轮廓上计算重心,并计算此与前一个重心之间的方向向量。然后使用该向量转换ROI,但结果还不是那么有希望。
这是正确的做法吗?还是我完全咆哮错误的树?
------ ------编辑
以下是两个示例图像,显示向右下方的轻微移动:
http://postimg.org/image/wznf2r27n/
轮廓之间的比较:
http://postimg.org/image/4ldez2di1/
正如你所看到的,轮廓的形状几乎相同,尽管脚趾附近有一些小的差异。
答案 0 :(得分:0)
似乎我终于能够使用基于Lukas-Kanade方法的光流找到我的问题的解决方案。
以防万一其他人想知道如何在Emgu / C#中实现它,这里是Emgu示例项目的链接,他们使用Lukas-Kanade和Farneback的算法: http://sourceforge.net/projects/emguexample/files/Image/BuildBackgroundImage.zip/download
您可能需要调整一些内容,例如角点检测的参数(frame.GoodFeaturesToTrack(..)
方法),但它绝对是一个开始的东西。
感谢所有想法!