【发布时间】:2013-05-08 15:29:28
【问题描述】:
我想测量两个图像之间物体的位移。位移可以是图像平面中的任何内容。如果可能的话,结果应该以亚像素精度给出位移。
有一些假设,应该会更容易,但到目前为止对我没有帮助:
- camara 物镜几乎没有失真(远心)并且垂直于物平面定向
- 对象平面永远不会改变
- 平面标记对象(可能是已知图像,例如扑克牌)始终位于对象平面中,因此不会缩放或扭曲 -> 只会发生旋转和平移变化。
我的第一个方法是从 EmguCV 中获取特征识别示例,在第一张图像中找到第一个对象,获取该图片的相关部分,现在将其用作模板并在第二张图像中搜索它。这确实有效,但有点不令人满意。单应矩阵中存在缩放和翘曲(可能是因为某些点,分配错误)并且放置精度非常差。
我曾在商业图像处理软件 Halcon 的演示中尝试过这种方法,它在亚像素精度方面表现出色。在那里,您可以对要搜索对象的图像进行某种模板的最小二乘拟合。结果是仿射变换矩阵并且非常精确。
EmguCV/OpenCV 有什么可比的吗?
提前谢谢你!
编辑:
在 EmguCV 函数中找到解决方案
CameraCalibration.EstimateRigidTransform(PointF[] src, PointF[] dest, bool fullAffine);
将fullAffine 设置为false。我之前的问题是,我使用的是
Features2DToolbox.GetHomographyMatrixFromMatchedFeatures();
来自匹配示例。
【问题讨论】:
标签: opencv computer-vision precision emgucv measurement