我目前正在研究相机校准方法。我对这个领域很陌生。给定一组 2D-3D 对应关系,使用最小二乘拟合方法构建 3*4 投影矩阵。
案例 - 1:我拍摄了一张尺寸为 $H$ x $W$ 的图像 $I_1$ 并计算了 $3*4$ 投影矩阵 $M_1$。 情况 - 2:我通过 2 倍插值调整了图像 ($I_1$) 的大小,并获得了大小为 $2H$ x $2W$ 的新图像 $I_2$,然后计算了投影矩阵 $M_2$。
$M_1$ 和 $M_2$ 之间有什么关系。它们是相同还是不同?如果一样,为什么?如果不同的话是什么 $M_1$ 和 $M_2$ 之间的数学关系?
我通过实验发现输出 $M_1$ 和 $M_2$ 大致相同(不精确,第二个小数后有一些偏差)。我不确定我是否接近正确。
您的问题缺少一些精确答案的代码。这取决于如何匹配。
例如,通常考虑“无维”矩阵,即考虑图像坐标从 0 到 1(或 -1 到 1,中心位于图像中心)。 在这种情况下,图像分辨率并不重要。
如果考虑图像坐标是 H×W 数组中的传统索引的情况(因此从左上角开始 y=0,x=0,并在右下角以 y=H,x=W 结束),那么,调整图像大小就相当于将该图像中的点坐标乘以矩阵
Z=[[ρ, 0, 0],
[0, ρ, 0],
[0, 0, 1]]
因此,初始图像中出现在坐标
(x,y,1)
处的点现在出现在新图像中的坐标 (ρx, ρy, 1)
处(在您的示例中,ρ=2)
或者,因为在那些齐次坐标中,
(ρx,ρy,1)
与(x,y,1/ρ)
相同,它也可以是矩阵
Z=[[1, 0, 0],
[0, 1, 0],
[0, 0, 1/ρ]]
(这是有道理的:任何东西,矩阵或坐标,都对比例因子有效)
所以,如果你的 3×4 投影矩阵是 M,那么现实生活中的一个点
(xᵣ,yᵣ,zᵣ,1)
在原始图像中投影为 (xᵢ,yᵢ,1) = M.(xᵣ,yᵣ,zᵣ,1)
,并且一旦调整大小为 (ρxᵢ,ρyᵢ,1) = Z(xᵢ,yᵢ,1) = ZM(xᵣ,yᵣ,zᵣ,1)
。
换句话说,只需将矩阵 M 的前两行乘以 ρ 即可。或者将最后一个除以 ρ,就得到新的投影矩阵。
再次强调,如果“投影矩阵”是指将现实世界的坐标转换为表示图像的二维数组中的索引的矩阵。如果这些坐标不是索引,而是以图像大小(0 = 中心,1 = 右,-1 = 左,或类似的东西)表示的比例,或实际单位,如厘米,W 和 H 只是分辨率,而不是图像的大小,那么,投影矩阵不会受到图像分辨率的影响(显然,其估计可以是:分辨率越好,投影矩阵的估计就越好)
相机校准中“投影矩阵”最常见的定义是:
M = K * [R|t]
,哪里
K = [[fx, 0, cx], [0, fy, cy], [0, 0, 1]]
.
注意:一些文献提到了像素倾斜参数,但在数字传感器中,这通常可以忽略不计。
该矩阵将 3D 点(同质世界坐标)投影到图像中的 2D 像素坐标(同样作为 3 元素同质向量)。 OpenCV、libCalib、Matlab、Halcon 以及有关相机校准和机器/计算机视觉的科学文献均采用此约定。有时,使用“归一化相机坐标”,其中点简单地投影到 Z=1 处的平面上,并且可以在上面的公式中省略 K 矩阵。 当按因子
s
重新缩放图像时,可以导出一个新的相应 K 矩阵。它的形式取决于所采用的坐标约定:
对于 OpenCV、Calib.io Calibrator、Halcon,像素原点位于 左上角像素的中心。新的 K 矩阵变为:
Ks = [[s*fx, 0, s*(cx+0.5)-0.5], [0, s*fy, s*(cy+0.5)-0.5], [0, 0, 1]]
如果像素原点位于左上角像素的左上角:
Ks = [[s*fx, 0, s*cx], [0, s*fy, s*cy], [0, 0, 1]]
更多信息可以在我撰写的这篇文章中找到:https://calib.io/blogs/knowledge-base/camera-models