首页 > 编程知识 正文

照相是放大还是缩小现象,照相机照相是形的缩小

时间:2023-05-03 15:39:27 阅读:208058 作者:3156

图像缩放之后相机内参变化

1. 问题描述

在对采集到的图像进行3D坐标相关计算时,需要用到相机内参信息,但是在对图像进行缩放之后相机内参如何变化呢?

在大多数书上只会给出结论(假设缩小一半):

[f_x'= frac{f_x}{2},f_y'=frac{f_y}{2},c_x'=frac{c_x}{2},c_y'=frac{c_y}{2}

]

2. 数学推导

以下函数把3D空间点 (P) 投影到像素坐标系中: $$(x,y,z,1)rightarrow(u,v,S)$$

[begin{pmatrix}

a_x & 0 & u_0 \

0 & a_y & v_0 \

0 & 0 & 1

end{pmatrix}

begin{pmatrix}

R_{11} & R_{12} & R_{13} & T_x \

R_{21} & R_{22} & R_{23} & T_y \

R_{31} & R_{32} & R_{33} & T_z \

end{pmatrix}

begin{pmatrix}

x \

y \

z \

1

end{pmatrix}

]

之后,$$(u,v,S)rightarrow(u/S,v/S,1)$$得到非齐次的像素坐标.

可以简写为:

[u= frac{m_1 P}{m_3 P} \

v = frac{m_2 P}{m_3 P}

]

其中(m_i)为(K[R|T]_{3times4})构成的投影矩阵的第(i)行,在进行resize之后:

[u'=frac{u}{2} \

v' = frac{v}{2}

]

因此:

[u' = (1/2) frac {m_1 P} {m_3 P} \

v' = (1/2) frac {m_2 P} {m_3 P}

]

转换回最初的投影方程:

[left( begin{array}{ccc}

0.5 & 0 & 0 \

0 & 0.5 & 0 \

0 & 0 & 1 end{array} right)

left( begin{array}{ccc}

a_x & 0 & u_0 \

0 & a_y & v_0 \

0 & 0 & 1 end{array} right)

left( begin{array}{ccc}

R_{11} & R_{12} & R_{13} & T_x \

R_{21} & R_{22} & R_{23} & T_y \

R_{31} & R_{32} & R_{33} & T_z \

end{array} right)

left( begin{array}{ccc}

x \

y \

z \

1

end{array} right)

]

与如下形式等价:

[left( begin{array}{ccc}

0.5 a_x & 0 & 0.5 u_0 \

0 & 0.5 a_y & 0.5 v_0 \

0 & 0 & 1 end{array} right)

left( begin{array}{ccc}

R_{11} & R_{12} & R_{13} & T_x \

R_{21} & R_{22} & R_{23} & T_y \

R_{31} & R_{32} & R_{33} & T_z \

end{array} right)

left( begin{array}{ccc}

x \

y \

z \

1

end{array} right)

]

如果使用的是Matlab类似的索引由1开始的,需要利用: (u'=(u-1)/2+1,v'=(v-1)/2+1)替换,并重新推导

3. 对于0.5pixel问题的处理

同样需要进行处理:

[u'=(u-0.5)s+0.5\

v'=(v-0.5)s+0.5

]

于是可以得到(假设缩放为(s)):

[begin{pmatrix}

sf_x & 0 & sc_x+0.5s-0.5 \

0 & sf_y & sc_y+0.5s-0.5 \

0 & 0 & 1

end{pmatrix}

]

于是,对应的内参变化为:

[begin{aligned}

f_x' &= s*f_x\

f_y' &= s*f_y\

c_x' &= s*c_x+0.5s-0.5\

c_y' &= s*c_y +0.5s-0.5

end{aligned}

]

4. 参考资料

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。