调整图像大小如何影响固有相机矩阵?


18

我有一个相机矩阵(我知道内在参数和外在参数),其尺寸为HxW。(我将此矩阵用于所需的一些计算)。

我想使用较小的图像,例如:H2×W2(原件的一半)。为了保持相同的关系,我需要对矩阵进行哪些更改?

我有K作为内在参数,(RT旋转和平移)

cam=K[RT]

K=(ax0u00ayv0001)

K为3 * 3,我想乘上axayu0v0 0.5(图像大小被调整的因素),但我不知道。

Answers:


13

注意:这取决于您在调整大小后的图像中使用的坐标。我假设您使用的是从零开始的系统(如C,与Matlab有所不同),并且0转换为0。而且,我假设您在坐标之间没有任何偏差。如果您确实有偏斜,也应该乘以

简短答案:假设您使用的坐标系中u=u2,v=v2,是的,你应该乘以ax,ay,u0,v00.5。

详细答案将世界坐标中的点P转换为相机坐标 (x,y,z,1)>(u,v,S)函数是:

(ax0u00ayv0001)(R11R12R13TxR21R22R23TyR31R32R33Tz0001)(xyz1)

其中(u,v,S)>(u/S,v/S,1),因为坐标是同质的。

简而言之,可以写成 u=m1Pm3P,v=m2Pm3P
,其中M是两个矩阵的乘积如上所述,和mi是矩阵的第i行M。(该产品为标量产品)。

重新调整图像大小可以考虑:

u=u/2,v=v/2

从而

u=(1/2)M1PM3Pv=(1/2)M2PM3P

转换回矩阵形式可以使我们:

(0.50000.50001)(ax0u00ayv0001)(R11R12R13TxR21R22R23TyR31R32R33Tz0001)(xyz1)

等于

(0.5ax00.5u000.5ay0.5v0001)(R11R12R13TxR21R22R23TyR31R32R33Tz0001)(xyz1)

有关更多信息,请参阅Forsyth,第3章-相机几何校准。


非常感谢您的解释!我只是不确定您从零开始的系统是什么意思,我正在使用matlab,是否还需要进行其他调整?
matlabit 2012年

ü=ü-1个/2+1个v=v-1个/2+1个

8

安德烈(Andrey)提到,他的解决方案假设将0转换为0。如果使用像素坐标,则在调整图像大小时可能不正确。您真正需要做的唯一假设是,您的图像变换可以由3x3矩阵表示(如Andrey所示)。要更新相机矩阵,您可以将其乘以代表图像变换的矩阵。

[new_camera_matrix] = [image_transform]*[old_camera_matrix]

例如,假设您需要将图像的分辨率更改一个因子 2ñ并且您正在使用0个索引像素坐标。您的坐标由关系转换

X=2ñX+.5-.5

ÿ=2ñÿ+.5-.5

这可以用矩阵表示

2ñ02ñ-1个-.502ñ2ñ-1个-.5001个

所以你最终的相机矩阵是

2ñ02ñ-1个-.502ñ2ñ-1个-.5001个一种X0ü00一种ÿv0001个


您能否解释一下为什么加上0.5减去0.5的原因?0.5仅适用于带因子的缩放吗2ñ?如果不是,如何计算该子像素数?
2014年

1
我认为关键是像素“ 0,0”的中心不是真正在“ 0,0”(=像素的左上角),而是在“ 0.5,0.5”。因此,您必须在转换之前和之后考虑该偏移量,并且无论缩放比例因子如何,该因子始终为0.5。
JanRüegg'02

是啊这就是完全正确的
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.