在对采集到的图像进行3D坐标相关计算时,需要用到相机内参信息,但是在对图像进行缩放之后相机内参如何变化
https://dsp.stackexchange.com/questions/6055/how-does-resizing-an-image-affect-the-intrinsic-camera-matrix/6057#6057
20210415 重新修订
调整图像大小如何影响固有相机矩阵?
我有一个相机矩阵(我知道内在参数和外在参数),已知尺寸为HxW的图像。 (我将此矩阵用于需要的一些计算)。
我想使用较小的图像,例如:H / 2×W / 2(原件的一半)。 为了保持相同的关系,我需要对矩阵进行哪些更改?
我有,K作为固有参数,(R,T旋转和平移)
K为3 * 3,我曾考虑过将ax,ay,u0和v0乘以0.5(图像调整大小的因子),其实不是这样的。
回答:
注意:这取决于您在调整大小后的图像中使用的坐标。 我假设您使用的是从0开始的语言(例如C,与Matlab不同,matlab是从1开始)。而且,我假设您在坐标之间没有任何skew 偏差。 如果您确实有skew 偏斜,也应该乘以 skew 。
简短的答案:假设您使用的坐标系中u’= u/2,v’= v/2,是的,您应该将ax,ay,u0,v0乘以0.5。
详细答案:
将世界坐标中的点P转换为相机坐标(x,y,z,1)->(u,v,S)的函数是:
其中(u,v,S)->(u / S,v / S,1),因为坐标是齐次的。
简而言之,可以写成u = m1P/m3P,v = m2P/m3P
其中M是上述两个矩阵的乘积,mi是矩阵M的第i行。(乘积是标量积)。
重新调整图像大小可以考虑:
u′=u/2,v′=v/2
u′=(1/2)M1P/M3P
v′=(1/2)M2P/M3P
转换回矩阵形式可以使我们:
不是您从0开始的c语言,使用的是matlab,是否需要其他任何调整
如果您使用的是Matlab,则应使用u′=(u-1)/ 2 + 1,v′=(v-1)/ 2 + 1的转换,因为它具有基于一个的索引(第一个元素为1 ,而不是0)。 在这种情况下,请尝试计算相关矩阵。 如果您不需要亚像素精度,则可以忽略它并使用我给您的公式。
呢?
通用的思想
您真正需要做的唯一假设是,您的图像变换可以由3x3矩阵表示 。 要更新您的相机矩阵,您可以将其乘以代表图像变换的矩阵。
[new_camera_matrix] = [image_transform]*[old_camera_matrix]
例如,假设您需要将图像的分辨率更改2^n倍,并且使用0索引像素坐标。 您的坐标由关系转换
这可以用矩阵表示
所以你最终的相机矩阵是