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