Opencv 利用任意已知几何关系计算单应矩阵

Opencv 利用任意已知几何关系计算单应矩阵,opencv,computer-vision,measurement,homography,Opencv,Computer Vision,Measurement,Homography,我使用OpenCV作为光学测量系统。我需要在数码相机拍摄的两幅图像之间进行透视变换。在相机的视野中,我放置了一组标记(位于一个公共平面上),我将其用作两幅图像中的对应点。利用标记的位置,我可以计算单应矩阵。问题是,被测量的物体,我实际上想要变换它的图像,被放置在距离标记很小的位置,并且与标记的平面平行。我可以测量这个距离 我的问题是,在计算单应矩阵时,如何考虑该距离,这是执行透视变换所必需的 在我的解决方案中,强烈要求不使用测量对象点来计算单应性(这就是为什么我需要在视野中使用其他标记) 如果描

我使用OpenCV作为光学测量系统。我需要在数码相机拍摄的两幅图像之间进行透视变换。在相机的视野中,我放置了一组标记(位于一个公共平面上),我将其用作两幅图像中的对应点。利用标记的位置,我可以计算单应矩阵。问题是,被测量的物体,我实际上想要变换它的图像,被放置在距离标记很小的位置,并且与标记的平面平行。我可以测量这个距离

我的问题是,在计算单应矩阵时,如何考虑该距离,这是执行透视变换所必需的

在我的解决方案中,强烈要求不使用测量对象点来计算单应性(这就是为什么我需要在视野中使用其他标记)

如果描述不准确,请告诉我

图中所示为示例性图像

红色矩形是测量对象。它实际放置在圆形标记后面的一小段距离内


我从不同的摄像机位置捕捉物体的图像。在每次采集之间,被测对象可能会变形。使用圆形标记,我想将对象的图像转换为相同的坐标。我可以测量对象和标记之间的距离,但我不知道如何修改单应矩阵以处理测量对象(而不是标记)。

这个问题很老,但它很有趣,可能对某人有用

首先,我是如何理解问题中提出的问题的:

同一台数码相机在两个不同的位置采集了两幅图像I1和I2。这些图像都显示了一组标记,它们都位于同一平面上。还有一个测量对象,其可见表面位于平行于标记平面但偏移较小的平面po中。您计算了将I1中的标记位置映射到I2中相应标记位置的单应性Hm12,并测量了平面po和pm之间的偏移量dm-o。由此,您希望计算I1中测量对象上的单应映射Ho12点到I2中相应点的映射

关于这个问题的几点意见:

首先,请注意,单应性是图像点之间的关系,而标记平面和对象平面之间的距离是世界坐标中的距离。使用后者来推断关于前者的信息需要对相机姿势进行度量估计,即,您需要为两幅图像中的每一幅确定相机的欧几里得和上比例相对位置和方向。欧几里得要求意味着必须校准数码相机,这对于“光学测量系统”来说不应该是一个问题。按比例要求意味着必须知道两个给定3D点之间的真实3D距离。例如,您需要知道两个任意标记之间的真实距离l0

因为我们只需要每个图像的相机的相对姿势,我们可以选择使用一个以I1为中心并与相机坐标系对齐的三维坐标系。因此,我们将用P1=K1*[I | 0]表示I1的投影矩阵。然后,我们用P2=K2*[R2 | t2]表示I2(在相同的三维坐标系中)的投影矩阵。我们还将分别用D1和D2表示I1和I2的透镜畸变建模系数

作为I1和I2的单个数码相机,可以假定K1=K2= K和D1= D2= D。然而,如果I1和I2在采集之间(或用不同变焦等)获得长延迟,则将更准确地考虑两个不同的相机矩阵和两组失真系数。 以下是解决此类问题的方法:

估算P1和P2的步骤如下:

  • 通过校准数码相机估算K1、K2和D1、D2

  • 使用D1和D2校正图像I1和I2的镜头畸变,然后确定校正图像中的标记位置

  • 从相应的标记位置计算基本矩阵F12(将I1中的点映射到I2中的外延线),并推断基本矩阵E12=K2T*F12*K1

  • 根据E12和一点对应关系推断R2和t2(参见相关问题)。此时,可以对摄影机姿势进行仿射估计,但不能进行放大估计,因为t2具有单位范数

  • 使用两个任意标记之间的测量距离l0推断t2的正确范数

  • 为了获得最佳精度,您可以使用束调整来优化P1和P2,并根据I1和I2中相应的标记位置,固定K1和| | t2 |的值

  • 此时,您对相机姿势P1=K1*[I | 0]和P2=K2*[R2 | t2]有了精确的度量估计。现在,估算Ho12的步骤如下:

  • 使用D1和D2校正图像I1和I2的镜头畸变,然后确定校正图像中的标记位置(与上面的2相同,无需重新进行),并从这些对应位置估计Hm12

  • 通过求解以下线性方程,计算描述标记平面pm的3x1矢量v:Z*Hm12=K2*(R2-t2*vT)*K1-1(参考HZ00第13章,结果13.5和方程13.2),其中Z为比例因子。推断到原点的距离dm=| | v | | |和法线n=v/| | v | | |,它们在三维中描述标记的平面pm

  • 由于对象平面po与pm平行,因此它们具有相同的法线n。因此,你可以推断t