0

我想测量两个图像之间物体的位移。位移可以是图像平面中的任何内容。如果可能的话,结果应该以亚像素精度给出位移。

有一些假设应该会让事情变得更容易,但到目前为止对我没有帮助:

  • camara 物镜实际上是无失真(远心)并且垂直于物平面定向
  • 物体平面永远不会改变
  • 平面标记对象(可能是已知图像,例如扑克牌)始终位于对象平面中,因此不会缩放或扭曲 -> 仅会发生旋转和平移变化。

我的第一种方法是从 EmguCV 中获取特征识别示例,在第一张图像中找到第一个对象,获取该图片的相关部分,现在将其用作模板并在第二张图像中搜索它。这确实有效,但有点不令人满意。单应矩阵中存在缩放和扭曲(可能是因为某些点,分配错误)并且放置精度非常差。

我在商业图像处理软件 Halcon 的演示中尝试过一次,它在亚像素精度方面就像一个魅力。在那里,您可以对正在搜索对象的图像进行某种模板的最小二乘拟合。结果是仿射变换矩阵并且非常精确。

EmguCV/OpenCV 中是否有类似的东西?

先感谢您!

编辑:

在 EmguCV 函数中找到解决方案

CameraCalibration.EstimateRigidTransform(PointF[] src, PointF[] dest, bool fullAffine);

设置fullAffinefalse. 我之前的问题是,我正在使用

Features2DToolbox.GetHomographyMatrixFromMatchedFeatures();

从匹配的例子。

4

1 回答 1

-1

在 EmguCV 函数中找到解决方案

CameraCalibration.EstimateRigidTransform(PointF[] src, PointF[] dest, bool fullAffine);

设置fullAffinefalse. 我之前的问题是,我正在使用

Features2DToolbox.GetHomographyMatrixFromMatchedFeatures();

从匹配的例子。

剩下的唯一问题是仍然产生的小比例EstimateRigidTransform,但我能够从结果中计算出来。

于 2013-05-15T14:29:14.653 回答