我想测量两个图像之间物体的位移。位移可以是图像平面中的任何内容。如果可能的话,结果应该以亚像素精度给出位移。
有一些假设应该会让事情变得更容易,但到目前为止对我没有帮助:
- camara 物镜实际上是无失真(远心)并且垂直于物平面定向
- 物体平面永远不会改变
- 平面标记对象(可能是已知图像,例如扑克牌)始终位于对象平面中,因此不会缩放或扭曲 -> 仅会发生旋转和平移变化。
我的第一种方法是从 EmguCV 中获取特征识别示例,在第一张图像中找到第一个对象,获取该图片的相关部分,现在将其用作模板并在第二张图像中搜索它。这确实有效,但有点不令人满意。单应矩阵中存在缩放和扭曲(可能是因为某些点,分配错误)并且放置精度非常差。
我在商业图像处理软件 Halcon 的演示中尝试过一次,它在亚像素精度方面就像一个魅力。在那里,您可以对正在搜索对象的图像进行某种模板的最小二乘拟合。结果是仿射变换矩阵并且非常精确。
EmguCV/OpenCV 中是否有类似的东西?
先感谢您!
编辑:
在 EmguCV 函数中找到解决方案
CameraCalibration.EstimateRigidTransform(PointF[] src, PointF[] dest, bool fullAffine);
设置fullAffine
为false
. 我之前的问题是,我正在使用
Features2DToolbox.GetHomographyMatrixFromMatchedFeatures();
从匹配的例子。