注:章节一图像拷贝自:计算机视觉:相机成像原理:世界坐标系、相机坐标系、图像坐标系、像素坐标系之间的转换,侵删!
注:此章节坐标系图像图像拷贝自:计算机视觉:相机成像原理:世界坐标系、相机坐标系、图像坐标系、像素坐标系之间的转换,侵删!
相机矩阵:
成像过程就是三维空间坐标到二维图像坐标的变换,这是一个投影过程(降维打击)。
相机矩阵就是建立这种三维到二维的投影关系。
[ x i y i 1 ] = [ p 1 p 2 p 3 p 5 p 6 p 7 p 9 p 10 p 11 p 4 p 8 p 12 ] 3 × 4 ⏟ 相机矩阵 ( 3 × 4 ) ⋅ [ x w y w z w 1 ] \left[ \begin{array}{c} x_i\\ y_i\\ 1\\ \end{array} \right] =\underset{\text{相机矩阵}\left( 3\times 4 \right)}{\underbrace{\left[ \begin{matrix} p_1& p_2& p_3\\ p_5& p_6& p_7\\ p_9& p_{10}& p_{11}\\ \end{matrix}\,\,\begin{array}{c} p_4\\ p_8\\ p_{12}\\ \end{array} \right] _{3\times 4}}}\cdot \left[ \begin{array}{c} x_w\\ y_w\\ z_w\\ 1\\ \end{array} \right] ⎣⎡xiyi1⎦⎤=相机矩阵(3×4) ⎣⎡p1p5p9p2p6p10p3p7p11p4p8p12⎦⎤3×4⋅⎣⎢⎢⎡xwywzw1⎦⎥⎥⎤
\\
这里, [ P ] [P] [P] 矩阵就是一个 3 × 4 3×4 3×4的矩阵(这是为了满足4X1变换到3X1的要求)
该矩阵就被称为相机矩阵(camera matrix ),或者相机投影矩阵(camera projection matrix)。
世界坐标系中的点 P P P在相机坐标系中的坐标(公式推导见5):
[ x c y c z c ] = R 3 × 3 [ x w y w z w ] + T 3 × 1 \left[ \begin{array}{c} x_c\\ y_c\\ z_c\\ \end{array} \right] =R_{3\times 3}\left[ \begin{array}{c} x_w\\ y_w\\ z_w\\ \end{array} \right] +T_{3\times 1} ⎣⎡xcyczc⎦⎤=R3×3⎣⎡xwywzw⎦⎤+T3×1
仿射变换 = 旋转变换(线性) + 平移变换(非线性) \\ \text{仿射变换}=\text{旋转变换(线性)}+\text{平移变换(非线性)} 仿射变换=旋转变换(线性)+平移变换(非线性)
其中: R 3 × 3 = R x ⋅ R y ⋅ R z (绕 x , y , z 轴的旋转变换) T 3 × 1 = [ t x t y t z ] T (沿 x , y , z 轴方向的平移) 世界坐标点: ( x w , y w , z w ) 相机坐标点: ( x c , y c , z c ) \text{其中:} \\ R_{3\times 3}=R_x\cdot R_y\cdot R_z\text{(绕}x\text{,}y\text{,}z\text{轴的旋转变换)} \\ T_{3\times 1}=\left[ \begin{matrix} t_x& t_y& t_z\\ \end{matrix} \right] ^T\text{(沿}x\text{,}y\text{,}z\text{轴方向的平移)} \\ \text{世界坐标点:}\left( x_w, y_w, z_w \right) \\ \text{相机坐标点:}\left( x_c, y_c, z_c \right) 其中:R3×3=Rx⋅Ry⋅Rz(绕x,y,z轴的旋转变换)T3×1=[txtytz]T(沿x,y,z轴方向的平移)世界坐标点:(xw,yw,zw)相机坐标点:(xc,yc,zc)
引入齐次坐标,将仿射变换纳入统一的变换矩阵中:
[ x c y c z c 1 ] = [ R 3 × 3 T 3 × 1 0 ⃗ 1 ] 4 × 4 ⋅ [ x w y w z w 1 ] \left[ \begin{array}{c} x_c\\ y_c\\ z_c\\ 1\\ \end{array} \right] =\left[ \begin{matrix} R_{3\times 3}& T_{3\times 1}\\ \vec{0}& 1\\ \end{matrix} \right] _{4\times 4}\cdot \left[ \begin{array}{c} x_w\\ y_w\\ z_w\\ 1\\ \end{array} \right] ⎣⎢⎢⎡xcyczc1⎦⎥⎥⎤=[R3×30T3×11]4×4⋅⎣⎢⎢⎡xwywzw1⎦⎥⎥⎤
虽然拷贝的图上已经将矩阵变换写了出来,但是还是需要自己写一遍。
相机坐标系到图像坐标系是从3D空间投影到2D空间,通过投影透视(perspective projection)
利用相似三角形法则,建立方程组:
{ x i = f ⋅ x c z c y i = f ⋅ y c z c z c = z c \\ \begin{cases} x_i=f\cdot \frac{x_c}{z_c}\\ y_i=f\cdot \frac{y_c}{z_c}\\ z_c=z_c\\ \end{cases} ⎩⎪⎨⎪⎧xi=f⋅zcxcyi=f⋅zcyczc=zc
f :相机焦距 ( x c , y c , z c ) : 相机坐标系 ( x i , y i ) : 图像坐标系( i : i m a g e ) \\ f\text{:相机焦距} \\ \left( x_c, y_c, z_c \right) : \text{相机坐标系} \\ \left( x_i, y_i \right) : \text{图像坐标系(}i\text{:}image\text{)} f:相机焦距(xc,yc,zc):相机坐标系(xi,yi):图像坐标系(i:image)
矩阵表示形式表示:
z c ⋅ [ x i y i 1 ] = [ f 0 0 0 f 0 0 0 1 ] ⋅ [ x c y c z c ] z_c\cdot \left[ \begin{array}{c} x_i\\ y_i\\ 1\\ \end{array} \right] =\left[ \begin{matrix} f& 0& 0\\ 0& f& 0\\ 0& 0& 1\\ \end{matrix} \right] \cdot \left[ \begin{array}{c} x_c\\ y_c\\ z_c\\ \end{array} \right] zc⋅⎣⎡xiyi1⎦⎤=⎣⎡f000f0001⎦⎤⋅⎣⎡xcyczc⎦⎤
\\
在等号右边先使用为齐次坐标表示,与世界坐标系 to 相机坐标系结果保持一致: \text{在等号右边先使用为齐次坐标表示,与世界坐标系 to 相机坐标系结果保持一致:} 在等号右边先使用为齐次坐标表示,与世界坐标系 to 相机坐标系结果保持一致:
r i g h t 4 × 1 = [ f 0 0 0 0 f 0 0 0 0 1 0 0 0 0 1 ] ⋅ [ x c y c z c 1 ] right_{4\times 1}\,\,=\,\,\left[ \begin{matrix} f& 0& 0& 0\\ 0& f& 0& 0\\ 0& 0& 1& 0\\ 0& 0& 0& 1\\ \end{matrix} \right] \cdot \left[ \begin{array}{c} x_c\\ y_c\\ z_c\\ 1\\ \end{array} \right] right4×1=⎣⎢⎢⎡f0000f0000100001⎦⎥⎥⎤⋅⎣⎢⎢⎡xcyczc1⎦⎥⎥⎤
\\
在对得到的坐标进行降维 ( 4 D 到 3 D ) \text{在对得到的坐标进行降维}\left( 4D\,\,\text{到} 3D \right) 在对得到的坐标进行降维(4D到3D)
r i g h t 3 × 1 = [ 1 0 0 0 1 0 0 0 1 0 0 0 ] 3 × 4 ⋅ r i g h t 4 × 1 right_{3\times 1}=\left[ \begin{matrix} 1& 0& 0\\ 0& 1& 0\\ 0& 0& 1\\ \end{matrix}\,\,\begin{array}{c} 0\\ 0\\ 0\\ \end{array} \right] _{3\times 4}\cdot right_{4\times 1} right3×1=⎣⎡100010001000⎦⎤3×4⋅right4×1
\\
即: \text{即:} 即:
r i g h t 3 × 1 = [ 1 0 0 0 1 0 0 0 1 0 0 0 ] ⋅ [ f 0 0 0 0 f 0 0 0 0 1 0 0 0 0 1 ] ⋅ [ x c y c z c 1 ] = [ f 0 0 0 f 0 0 0 1 0 0 0 ] 3 × 4 ⋅ [ x c y c z c 1 ] right_{3\times 1}=\left[ \begin{matrix} 1& 0& 0\\ 0& 1& 0\\ 0& 0& 1\\ \end{matrix}\,\,\begin{array}{c} 0\\ 0\\ 0\\ \end{array} \right] \cdot \left[ \begin{matrix} f& 0& 0& 0\\ 0& f& 0& 0\\ 0& 0& 1& 0\\ 0& 0& 0& 1\\ \end{matrix} \right] \cdot \left[ \begin{array}{c} x_c\\ y_c\\ z_c\\ 1\\ \end{array} \right] =\left[ \begin{matrix} f& 0& 0\\ 0& f& 0\\ 0& 0& 1\\ \end{matrix}\,\,\begin{array}{c} 0\\ 0\\ 0\\ \end{array} \right] _{3\times 4}\cdot \left[ \begin{array}{c} x_c\\ y_c\\ z_c\\ 1\\ \end{array} \right] right3×1=⎣⎡100010001000⎦⎤⋅⎣⎢⎢⎡f0000f0000100001⎦⎥⎥⎤⋅⎣⎢⎢⎡xcyczc1⎦⎥⎥⎤=⎣⎡f000f0001000⎦⎤3×4⋅⎣⎢⎢⎡xcyczc1⎦⎥⎥⎤
\\
这里: \text{这里:} 这里:
[ 1 0 0 0 1 0 0 0 1 0 0 0 ] :此矩阵将 3 D 坐标降维到 2 D 坐标( 3 D 齐次坐标转化为 2 D 齐次坐标) \left[ \begin{matrix} 1& 0& 0\\ 0& 1& 0\\ 0& 0& 1\\ \end{matrix}\,\,\begin{array}{c} 0\\ 0\\ 0\\ \end{array} \right] \text{:此矩阵将}3D\text{坐标降维到}2D\text{坐标(}3D\text{齐次坐标转化为}2D\text{齐次坐标)} ⎣⎡100010001000⎦⎤:此矩阵将3D坐标降维到2D坐标(3D齐次坐标转化为2D齐次坐标)
[ f 0 0 0 0 f 0 0 0 0 1 0 0 0 0 1 ] :此矩阵是一个缩放矩阵(在 x , y 轴方向) \left[ \begin{matrix} f& 0& 0& 0\\ 0& f& 0& 0\\ 0& 0& 1& 0\\ 0& 0& 0& 1\\ \end{matrix} \right] \text{:此矩阵是一个缩放矩阵(在}x\text{,}y\text{轴方向)} ⎣⎢⎢⎡f0000f0000100001⎦⎥⎥⎤:此矩阵是一个缩放矩阵(在x,y轴方向)
\\
因此相机坐标到图像坐标可以表示为: \text{因此相机坐标到图像坐标可以表示为:} 因此相机坐标到图像坐标可以表示为:
z c ⋅ [ x i y i 1 ] = [ f 0 0 0 f 0 0 0 1 0 0 0 ] ⋅ [ x c y c z c 1 ] z_c\cdot \left[ \begin{array}{c} x_i\\ y_i\\ 1\\ \end{array} \right] =\left[ \begin{matrix} f& 0& 0\\ 0& f& 0\\ 0& 0& 1\\ \end{matrix}\,\,\begin{array}{c} 0\\ 0\\ 0\\ \end{array} \right] \cdot \left[ \begin{array}{c} x_c\\ y_c\\ z_c\\ 1\\ \end{array} \right] zc⋅⎣⎡xiyi1⎦⎤=⎣⎡f000f0001000⎦⎤⋅⎣⎢⎢⎡xcyczc1⎦⎥⎥⎤
- O − u v O-uv O−uv 像素坐标系, O − x y O-xy O−xy图像坐标系,
- d x , d y dx,dy dx,dy像素的每一列,每一行的实际长度(毫米, m m mm mm),
- x / d x , y / d y x/dx,y/dy x/dx,y/dy 每一行,每一列的像素个数(整数)。
建立图像点到像素点的方程组:
{ u = 1 d x ⋅ x i + u 0 v = 1 d y ⋅ y i + v 0 \begin{cases} u=\frac{1}{dx}\cdot x_i+u_0\\ v=\frac{1}{dy}\cdot y_i+v_0\\ \end{cases} {u=dx1⋅xi+u0v=dy1⋅yi+v0
矩阵形式,齐次坐标表示,则图像坐标系到像素坐标系的转换可以表示为:
[ u v 1 ] = [ 1 d x 0 u 0 0 1 d y v 0 0 0 1 ] ⋅ [ x i y i 1 ] \left[ \begin{array}{c} u\\ v\\ 1\\ \end{array} \right] =\left[ \begin{matrix} \frac{1}{dx}& 0& u_0\\ 0& \frac{1}{dy}& v_0\\ 0& 0& 1\\ \end{matrix} \right] \cdot \left[ \begin{array}{c} x_i\\ y_i\\ 1\\ \end{array} \right] ⎣⎡uv1⎦⎤=⎣⎡dx1000dy10u0v01⎦⎤⋅⎣⎡xiyi1⎦⎤
世界坐标系 – 相机坐标系 ( 3 D − 3 D ) (3D-3D) (3D−3D):
[ x c y c z c 1 ] = [ R 3 × 3 T 3 × 1 0 ⃗ 1 ] 4 × 4 ⋅ [ x w y w z w 1 ] \left[ \begin{array}{c} x_c\\ y_c\\ z_c\\ 1\\ \end{array} \right] =\left[ \begin{matrix} R_{3\times 3}& T_{3\times 1}\\ \vec{0}& 1\\ \end{matrix} \right] _{4\times 4}\cdot \left[ \begin{array}{c} x_w\\ y_w\\ z_w\\ 1\\ \end{array} \right] ⎣⎢⎢⎡xcyczc1⎦⎥⎥⎤=[R3×30T3×11]4×4⋅⎣⎢⎢⎡xwywzw1⎦⎥⎥⎤
\\
相机坐标系 – 图像坐标系 ( 3 D − 2 D ) (3D-2D) (3D−2D):
z c ⋅ [ x i y i 1 ] = [ f 0 0 0 f 0 0 0 1 0 0 0 ] ⋅ [ x c y c z c 1 ] z_c\cdot \left[ \begin{array}{c} x_i\\ y_i\\ 1\\ \end{array} \right] =\left[ \begin{matrix} f& 0& 0\\ 0& f& 0\\ 0& 0& 1\\ \end{matrix}\,\,\begin{array}{c} 0\\ 0\\ 0\\ \end{array} \right] \cdot \left[ \begin{array}{c} x_c\\ y_c\\ z_c\\ 1\\ \end{array} \right] zc⋅⎣⎡xiyi1⎦⎤=⎣⎡f000f0001000⎦⎤⋅⎣⎢⎢⎡xcyczc1⎦⎥⎥⎤
\\
图像坐标系 – 像素坐标系 ( 2 D − 2 D ) (2D-2D) (2D−2D):
[ u v 1 ] = [ 1 d x 0 u 0 0 1 d y v 0 0 0 1 ] ⋅ [ x i y i 1 ] \left[ \begin{array}{c} u\\ v\\ 1\\ \end{array} \right] =\left[ \begin{matrix} \frac{1}{dx}& 0& u_0\\ 0& \frac{1}{dy}& v_0\\ 0& 0& 1\\ \end{matrix} \right] \cdot \left[ \begin{array}{c} x_i\\ y_i\\ 1\\ \end{array} \right] ⎣⎡uv1⎦⎤=⎣⎡dx1000dy10u0v01⎦⎤⋅⎣⎡xiyi1⎦⎤
\\
整合:世界坐标系 – 像素坐标系 ( 3 D − 2 D ) (3D-2D) (3D−2D):
z c ⋅ [ u v 1 ] = [ 1 d x 0 u 0 0 1 d y v 0 0 0 1 ] 3 × 3 ⋅ [ f 0 0 0 f 0 0 0 1 0 0 0 ] 3 × 4 ⏟ 拆分此矩阵 ⋅ [ R 3 × 3 T 3 × 1 0 ⃗ 1 ] 4 × 4 ⋅ [ x w y w z w 1 ] 4 × 1 ⇕ z c ⋅ [ u v 1 ] = [ 1 d x 0 u 0 0 1 d y v 0 0 0 1 ] 3 × 3 ⋅ [ f 0 0 0 f 0 0 0 1 ] 3 × 3 ⏟ 这两项相乘 ⋅ [ 1 0 0 0 1 0 0 0 1 0 0 0 ] 3 × 4 ⋅ [ R 3 × 3 T 3 × 1 0 ⃗ 1 ] 4 × 4 ⏟ 这两项相乘 ⋅ [ x w y w z w 1 ] 4 × 1 ⇕ z c ⋅ [ u v 1 ] 3 × 1 = [ f x 0 u 0 0 f y v 0 0 0 1 ] 3 × 3 ⋅ [ R 3 × 3 T 3 × 1 ] 3 × 4 ⋅ [ x w y w z w 1 ] 4 × 1 z_c\cdot \left[ \begin{array}{c} u\\ v\\ 1\\ \end{array} \right] =\left[ \begin{matrix} \frac{1}{dx}& 0& u_0\\ 0& \frac{1}{dy}& v_0\\ 0& 0& 1\\ \end{matrix} \right] _{3\times 3}\cdot \underset{\text{拆分此矩阵}}{\underbrace{\left[ \begin{matrix} f& 0& 0\\ 0& f& 0\\ 0& 0& 1\\ \end{matrix}\,\,\begin{array}{c} 0\\ 0\\ 0\\ \end{array} \right] _{3\times 4}}}\cdot \left[ \begin{matrix} R_{3\times 3}& T_{3\times 1}\\ \vec{0}& 1\\ \end{matrix} \right] _{4\times 4}\cdot \left[ \begin{array}{c} x_w\\ y_w\\ z_w\\ 1\\ \end{array} \right] _{4\times 1} \\ \Updownarrow \\ \\ z_c\cdot \left[ \begin{array}{c} u\\ v\\ 1\\ \end{array} \right]=\underset{\text{这两项相乘}}{\underbrace{\left[ \begin{matrix} \frac{1}{dx}& 0& u_0\\ 0& \frac{1}{dy}& v_0\\ 0& 0& 1\\ \end{matrix} \right] _{3\times 3}\cdot \left[ \begin{matrix} f& 0& 0\\ 0& f& 0\\ 0& 0& 1\\ \end{matrix} \right] _{3\times 3}}}\cdot \underset{\text{这两项相乘}}{\underbrace{\left[ \begin{matrix} 1& 0& 0\\ 0& 1& 0\\ 0& 0& 1\\ \end{matrix}\,\,\begin{array}{c} 0\\ 0\\ 0\\ \end{array} \right] _{3\times 4}\cdot \left[ \begin{matrix} R_{3\times 3}& T_{3\times 1}\\ \vec{0}& 1\\ \end{matrix} \right] _{4\times 4}}}\cdot \left[ \begin{array}{c} x_w\\ y_w\\ z_w\\ 1\\ \end{array} \right] _{4\times 1} \\ \Updownarrow \\ \\ z_c\cdot \left[ \begin{array}{c} u\\ v\\ 1\\ \end{array} \right] _{3\times 1}=\left[ \begin{matrix} f_x& 0& u_0\\ 0& f_y& v_0\\ 0& 0& 1\\ \end{matrix} \right] _{3\times 3}\cdot \left[ \begin{matrix} R_{3\times 3}& T_{3\times 1}\\ \end{matrix} \right] _{3\times 4}\cdot \left[ \begin{array}{c} x_w\\ y_w\\ z_w\\ 1\\ \end{array} \right] _{4\times 1} zc⋅⎣⎡uv1⎦⎤=⎣⎡dx1000dy10u0v01⎦⎤3×3⋅拆分此矩阵 ⎣⎡f000f0001000⎦⎤3×4⋅[R3×30T3×11]4×4⋅⎣⎢⎢⎡xwywzw1⎦⎥⎥⎤4×1⇕zc⋅⎣⎡uv1⎦⎤=这两项相乘 ⎣⎡dx1000dy10u0v01⎦⎤3×3⋅⎣⎡f000f0001⎦⎤3×3⋅这两项相乘 ⎣⎡100010001000⎦⎤3×4⋅[R3×30T3×11]4×4⋅⎣⎢⎢⎡xwywzw1⎦⎥⎥⎤4×1⇕zc⋅⎣⎡uv1⎦⎤3×1=⎣⎡fx000fy0u0v01⎦⎤3×3⋅[R3×3T3×1]3×4⋅⎣⎢⎢⎡xwywzw1⎦⎥⎥⎤4×1
\\
- 按照习惯,内参矩阵是 3 x 3 3x3 3x3 形式,外参矩阵是 3 x 4 3x4 3x4 形式,相机矩阵是 3 x 4 3x4 3x4 形式
- f x f_x fx:使用像素来描述x轴方向焦距的长度
- f y f_y fy:使用像素来描述y轴方向焦距的长度
- u 0 , v 0 u_0, v_0 u0,v0:主点的实际位置,单位也是像素。
- 通过最终的转换关系来看,一个三维中的坐标点,的确可以在图像中找到一个对应的像素点,但是反过来,通过图像中的一个点找到它在三维中对应的点就很成了一个问题,因为我们并不知道等式左边的 z c z_c zc (深度值)的值(来源)。
景深(depth of field):(摄影学或计算机图形学)每个镜头都会有特定的准确对焦的距离。假如我们另取一点 Q ,在像平面上的投影点则可能是模糊或失焦的。
焦点:镜头能够讲所有平行于光轴的光线折射到同一个点。
焦距:焦点和光心的距离 f f f。从光心穿过的光线不会偏离原始方向。
一个理想的透镜具有如下两个性质:
畸变参数:
相机的内参除了以上 f x , f y , u 0 , v 0 fx, fy, u0, v0 fx,fy,u0,v0,还包含畸变系数 [ k 1 , k 2 , p 1 , p 2 , k 3 ] [k1, k2, p1, p2, k3] [k1,k2,p1,p2,k3]
理想的透镜是没有畸变的。但是,因为制造和安装精度等方面的原因,镜头总是存在这畸变。畸变是相机固有特性,和相机内参一样,标定一次即可。
畸变参数类型:
径向畸变:
透镜形状不规则以及建模的方式,导致镜头不同部分焦距不同。
光线在远离透镜中心的地方偏折更大(枕型畸变)或更小(桶形畸变)
对径向畸变,成像仪中心(光轴)的畸变为0,随着向边缘移动,畸变越来越严重。
可以用 r = 0 r=0 r=0(半径)位置周围的泰勒级数展开的前几项来定量描述
常见的径向畸变情形,桶形畸变通常 k 1 > 0 k1>0 k1>0,枕形畸变通常 k 1 < 0 k1<0 k1<0
- i d e a l p o i n t : ( x u , y u ) , 理 想 点 ideal point: (x_u, y_u), 理想点 idealpoint:(xu,yu),理想点
- r e a l p o i n t : ( x d , y d ) , 实 际 点 real point: (x_d, y_d), 实际点 realpoint:(xd,yd),实际点
- d r : 径 向 畸 变 , 参 数 { k 1 , k 2 , k 3 } dr: 径向畸变,参数 \left\{ k_1, k_2, k_3 \right\} dr:径向畸变,参数{k1,k2,k3}
- d t : 切 向 畸 变 , 参 数 { p 1 , p 2 , } dt: 切向畸变,参数 \left\{ p_1, p_2, \right\} dt:切向畸变,参数{p1,p2,}
相机的固有参数(内参):
[ f x 0 u 0 0 f y v 0 0 0 1 ] 或 [ f x 0 c x 0 f y c y 0 0 1 ] \left[ \begin{matrix} f_x& 0& u_0\\ 0& f_y& v_0\\ 0& 0& 1\\ \end{matrix} \right] \,\,\text{或} \left[ \begin{matrix} f_x& 0& c_x\\ 0& f_y& c_y\\ 0& 0& 1\\ \end{matrix} \right] \,\, ⎣⎡fx000fy0u0v01⎦⎤或⎣⎡fx000fy0cxcy1⎦⎤
u 0 , v 0 可 以 写 作 c x , c y u_0, v_0 可以写作 c_x, c_y u0,v0可以写作cx,cy
\\
畸变参数(系数):
D i s t o r t i o n c o e f f i c i e n t s = ( k 1 k 2 p 1 p 2 k 3 ) Distortion_{coefficients}=\left( k_1\,\,k_2\,\,p_1\,\,p_2\,\,k_3 \right) Distortioncoefficients=(k1k2p1p2k3)
其 中 : k 1 , k 2 , k 3 是 径 向 畸 变 系 数 , p 1 , p 2 是 切 向 畸 变 系 数 其中:k_1, k_2, k_3 是径向畸变系数,p_1, p_2 是切向畸变系数 其中:k1,k2,k3是径向畸变系数,p1,p2是切向畸变系数
\\
使用标定流程确定这两个矩阵:内参矩阵、畸变系数矩阵:
把摄像机对准一个有很多独立可标识点的物体,在不同角度观看这个物体,进一步可通过每个图像来计算摄像机的相对位置和方向,以及摄像机的内参。
内参标定完成后,可以建立三维坐标和二维图像(像素)坐标的关系:
{ x i = f x ⋅ x c z c + c x y i = f y ⋅ y c z c + c y \begin{cases} x_i=f_x\cdot \frac{x_c}{z_c}+c_x\\ y_i=f_y\cdot \frac{y_c}{z_c}+c_y\\ \end{cases} {xi=fx⋅zcxc+cxyi=fy⋅zcyc+cy
( x i , y i ) 是 图 像 坐 标 , 可 以 是 ( u , v ) 像 素 坐 标 (x_i, y_i) 是图像坐标,可以是 (u, v) 像素坐标 (xi,yi)是图像坐标,可以是(u,v)像素坐标
\\
通过下面的变换,可以得到没有畸变的标定结果:
x c o r r e c t e d = x ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) + [ 2 p 1 x y + p 2 ( r 2 + 2 x 2 ) ] y c o r r e c t e d = y ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) + [ p 1 ( r 2 + 2 y 2 ) + 2 p 2 x y ] x_{corrected}=x(1+k_1r^2+k_2r^4+k_3r^6)+[2p_1xy+p_2(r^2+2x^2)] \\ y_{corrected}=y(1+k_1r^{_2}+k_2r^{_4}+k_3r^6)+[p_1(r^{_2}+2y^{_2})+2p_2xy] xcorrected=x(1+k1r2+k2r4+k3r6)+[2p1xy+p2(r2+2x2)]ycorrected=y(1+k1r2+k2r4+k3r6)+[p1(r2+2y2)+2p2xy]
已知: r 2 = x 2 + y 2 \text{已知:}r^2=x^2+y^2 已知:r2=x2+y2
链接:4×4齐次矩阵
链接:理解齐次坐标的意义
链接:2D坐标系与3D坐标系的相互转换–python实现
链接:http://www.cse.psu.edu/~rtc12/CSE486/lecture12.pdf
链接:https://cg.informatik.uni-freiburg.de/course_notes/graphics_03_projections.pdf
链接:6.5 矩阵的运算及其运算规则
链接:计算机视觉:相机成像原理:世界坐标系、相机坐标系、图像坐标系、像素坐标系之间的转换
链接:相机矩阵(Camera Matrix)
链接:深入解读相机矩阵