opencv – 使用任意已知的几何关系计算单应矩阵

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

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

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

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

在图中呈现的是示例性图像.

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

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

最佳答案 这个问题已经很老了,但它很有趣,对某些人来说可能有用.

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

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

关于这个问题的一些评论:

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

由于我们只需要每个图像的相机相对姿势,我们可以选择使用以I1为中心并与相机坐标系对齐的3D坐标系.因此,我们将通过P1 = K1 * [I |表示I1的投影矩阵0].然后,我们通过P2 = K2 * [R2 |表示I2的投影矩阵(在相同的3D坐标系中) t2].我们还将通过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中的epilines)并推断出基本矩阵E12 = K2T * F12 * K1
>从E12推断R2和t2以及一点对应(参见this answer到相关问题).此时,您对相机姿势进行了仿射估计,但由于t2具有单位范数,因此不能达到规模.
>使用两个任意标记之间的测量距离l0来推断t2的正确范数.
>为了获得最佳精度,您可以使用捆绑调整来优化P1和P2,使用K1和|| t2 ||根据I1和I2中相应的标记位置固定.

此时,您可以准确估计相机姿态P1 = K1 * [I | 0]和P2 = K2 * [R2 | t2].现在,估计Ho12的步骤如下:

>使用D1和D2校正图像I1和I2的镜头失真,然后确定校正图像中的标记位置(与上面相同,无需重新进行),并从这些相应位置估算Hm12
>通过求解该线性方程,计算描述标记平面pm的3×1向量v:Z * Hm12 = K2 *(R2-t2 * vT)* K1-1(参见HZ00第13章,结果13.5和方程13.2,以供参考那个),其中Z是比例因子.推断到原点的距离dm = || v ||和法线n = v / || v ||,它们描述3D中标记的平面pm.
>由于物体平面po与pm平行,因此它们具有相同的法线n.因此,您可以推断距离原点的距离为距离到原点dm的pm和测量的平面偏移dm-o,如下所示:do = dm±dm-o(符号取决于相对位置飞机:如果pm比I更靠近相机,则为正,否则为负.
>从n开始用3D描述物体平面,推断出单应性Ho12 = K2 *(R2 – t2 * nT / do)* K1-1(见HZ00第13章,等式13.2)
>单应性Ho12将I1中的测量对象上的点映射到I2中的对应点,其中假设I1和I2都针对透镜失真进行校正.如果需要将点映射到原始失真图像,请不要忘记使用失真系数D1和D2来转换Ho12的输入和输出点.

我使用的参考:

[HZ00]“计算机视觉的多视图几何”,R.Hartley和A.Zisserman,2000年.

点赞