这个问题很旧,但很有趣,对某些人可能很有用。
首先,我理解问题的描述如下:
您有两张由同一数码相机在不同位置拍摄的图像I
1和I
2。这些图像都显示了一组标记,这些标记都位于共面p
m上。还有一个被测物体,其可见表面位于平行于标记平面但具有小偏移量的平面p
o上。您计算了将I
1中标记位置映射到I
2中相应标记位置的单应性H
m12,并且测量了平面p
m和p
o之间的偏移量d
m-o。基于此,您想要计算将I
1中测量对象上的点映射到I
2中相应点的单应性H
o12。
对于这个问题,以下是几点说明:
首先,需要注意的是单应性是图像点之间的关系,而标记平面和物体平面之间的距离是世界坐标系下的距离。使用后者来推断前者需要对相机姿态进行度量估计,即需要确定每个图像的相机的欧几里得和比例尺的相对位置和方向。欧几里得要求意味着数字相机必须经过校准,这对于“光学测量系统”来说不应该是问题。比例尺要求意味着必须知道两个给定3D点之间的真实3D距离。例如,您需要知道任意两个标记之间的真实距离l
0。
由于我们只需要每个图像相机的相对位姿,因此我们可以选择使用一个以I
1相机的坐标系为中心和对齐的三维坐标系。因此,我们将用P
1=K
1*[I|0]表示I
1的投影矩阵。然后,我们用P
2=K
2*[R
2|t
2]表示在同一3D坐标系下I
2的投影矩阵。我们还分别用D
1和D
2表示建模镜头畸变的系数,用于I
1和I
2。
作为一台单一的数码相机同时获得了I
1和I
2,您可以假设K
1=K
2=K和D
1=D
2=D。然而,如果I
1和I
2之间存在较长时间延迟(或使用不同的变焦等),考虑到涉及两个不同的相机矩阵和两组畸变系数将更加准确。
以下是您解决此类问题的方法:
估计P1和P2的步骤如下:
通过数字相机的校准来估计K
1,K
2和D
1,D
2。
使用D
1和D
2来校正镜头畸变后的图像I
1和I
2,然后确定更正后图像中的标记位置。
从对应的标记位置计算基础矩阵F
12(将I
1中的点映射到I
2中的极线),并推断本质矩阵E
12= K
2T * F
12 * K
1。
从E
12和一个点对应关系(参见
this answer相关问题)推断出R
2和t
2。此时,您已经得到了相机姿态的
仿射估计,但不是
按比例缩放的估计,因为t
2具有单位范数。
使用两个任意标记之间测量的距离l
0来推断t
2的正确范数。
为了获得最佳精度,可以使用基于I
1和I
2中的对应标记位置的捆绑调整来优化P
1和P
2,其中K
1和||t
2||固定。
此时,您已经获得了相机姿态的准确度量估计:P
1=K
1 * [I | 0] 和 P
2=K
2 * [R
2 | t
2]。现在,估算H
o12的步骤如下:
使用D
1和D
2来校正图像I
1和I
2的镜头畸变,然后确定校正后图像中的标记位置(同上述第2点,无需重新执行),并从这些对应位置估计H
m12。
通过解决线性方程Z * H
m12 = K
2 * ( R
2 - t
2 * v
T ) * K
1-1(参见HZ00第13章,结果13.5和方程13.2),计算描述标记平面p
m的3x1向量v。其中,Z是一个缩放因子。推断出到原点的距离d
m=||v||和法向量n=v / ||v||,它们描述了3D中的标记平面p
m。
由于物体平面p
o与p
m平行,它们具有相同的法向量n。因此,您可以通过测量平面偏移量d
m-o,从描述p
m的到原点的距离d
m推断出p
o的到原点的距离d
o,如下所示:d
o=d
m ± d
m-o(符号取决于平面的相对位置:如果I
1中p
m比p
o更靠近相机,则为正,否则为负)。
从描述物体平面在3D中的法向量n和到原点的距离d
o推断出单应性矩阵H
o12=K
2 * ( R
2 - t
2 * n
T / d
o ) * K
1-1(参见HZ00第13章,方程13.2)。
单应性矩阵H
o12将I
1中测量对象上的点映射到I
2中对应的点,其中假定I
1和I
2均已校正镜头畸变。如果需要从原始畸变图像映射点,不要忘记使用畸变系数D
1和D
2来转换H
o12的输入和输出点。
我使用的参考文献:
[HZ00] "Multiple view geometry for computer vision",作者为R.Hartley和A.Zisserman,2000年出版。