【发布时间】:2014-06-25 10:54:50
【问题描述】:
首先,我是图像处理的新手,所以请不要对我太苛刻。 话虽如此,我正在开发一个应用程序,使用相机获得的热图像来分析四肢血流的变化。用户可以通过在当前图像上放置一个形状(圆形、矩形等)来定义感兴趣的区域。然后,用户应该能够看到在指定的 ROI 内,平均温度是如何逐帧变化的。
问题在于,由于测试对象的(小)移动,某些图像不稳定。我的问题是如何确定帧之间的移动,以便相应地重新定位 ROI?
我正在使用 Emgu OpenCV .Net 包装器进行图像处理。
到目前为止,我尝试的是在找到的最大轮廓上使用GetMoments() 计算重心,并计算此重心与前一个重心之间的方向矢量。然后使用该向量转换 ROI,但结果还没有那么乐观。
这是正确的做法还是我完全找错了树?
-----编辑------
以下是两张显示向右下方轻微移动的示例图片:
http://postimg.org/image/wznf2r27n/
轮廓之间的比较:
http://postimg.org/image/4ldez2di1/
如您所见,轮廓的形状几乎相同,尽管脚趾附近有一些细微差别。
【问题讨论】:
-
光流(图像之间的速度向量)或 sift/homography(一个图像中的点在哪里结束)
-
如果 ROI 的非易失部分之间有足够的相似性,也许模板匹配是可以的。
-
在最坏的情况下,两帧之间的运动(以像素为单位)有多大?有多少纹理信息(因为您正在处理热图像)?你能给我们一些示例图像吗?也许可以显示运动的示例图像。
-
你会说(你的印象)提取的轮廓可以匹配吗?如果是,计算 cog 是常用 icp 算法(迭代最近点)的第一部分。也许你也看看它并实施其他步骤;)
-
感谢您的回答。我将看看光流和筛选。我还编辑了我的帖子并提供了一些示例图片。
标签: opencv emgucv motion-detection