[cv3d] 相机标定+内外参矩阵推导

[cv3d] 相机标定+内外参矩阵推导



注:章节一图像拷贝自:计算机视觉:相机成像原理:世界坐标系、相机坐标系、图像坐标系、像素坐标系之间的转换,侵删!


1. 世界坐标系到像素坐标系

注:此章节坐标系图像图像拷贝自:计算机视觉:相机成像原理:世界坐标系、相机坐标系、图像坐标系、像素坐标系之间的转换,侵删!

1.0. 立体视觉的四个坐标系

在这里插入图片描述

  • 相机矩阵:
    成像过程就是三维空间坐标到二维图像坐标的变换,这是一个投影过程(降维打击)。
    相机矩阵就是建立这种三维到二维的投影关系。

    [ 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) p1p5p9p2p6p10p3p7p11p4p8p123×4xwywzw1

    \\

    这里, [ P ] [P] [P] 矩阵就是一个 3 × 4 3×4 3×4的矩阵(这是为了满足4X1变换到3X1的要求)
    该矩阵就被称为相机矩阵(camera matrix ),或者相机投影矩阵(camera projection matrix)。

1.1. 世界坐标系 to 相机坐标系

在这里插入图片描述

  • 世界坐标系中的点 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×3xwywzw+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=RxRyRz(绕xyz轴的旋转变换)T3×1=[txtytz]T(沿xyz轴方向的平移)世界坐标点:(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×30 T3×11]4×4xwywzw1

1.2. 相机坐标系 to 图像坐标系

在这里插入图片描述

虽然拷贝的图上已经将矩阵变换写了出来,但是还是需要自己写一遍。

  • 相机坐标系到图像坐标系是从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=fzcxcyi=fzcyczc=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):图像坐标系(iimage

  • 矩阵表示形式表示:

    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] zcxiyi1=f000f0001xcyczc

    \\

    在等号右边先使用为齐次坐标表示,与世界坐标系 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=f0000f0000100001xcyczc1

    \\

    在对得到的坐标进行降维 ( 4 D    到 3 D ) \text{在对得到的坐标进行降维}\left( 4D\,\,\text{到} 3D \right) 在对得到的坐标进行降维(4D3D)

    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=1000100010003×4right4×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=100010001000f0000f0000100001xcyczc1=f000f00010003×4xcyczc1

    \\

    这里: \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:此矩阵是一个缩放矩阵(在xy轴方向)

    \\

    因此相机坐标到图像坐标可以表示为: \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] zcxiyi1=f000f0001000xcyczc1

1.3. 图像坐标系 to 像素坐标系

在这里插入图片描述

  • O − u v O-uv Ouv 像素坐标系, O − x y O-xy Oxy图像坐标系,
  • d x , d y dx,dy dxdy像素的每一列,每一行的实际长度(毫米, m m mm mm),
  • x / d x , y / d y x/dx,y/dy x/dxy/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=dx1xi+u0v=dy1yi+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=dx1000dy10u0v01xiyi1

1.4. 整合表达式,得出世界坐标系到像素坐标系的表达:

  • 世界坐标系 – 相机坐标系 ( 3 D − 3 D ) (3D-3D) 3D3D:

    [ 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×30 T3×11]4×4xwywzw1

    \\

  • 相机坐标系 – 图像坐标系 ( 3 D − 2 D ) (3D-2D) 3D2D:

    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] zcxiyi1=f000f0001000xcyczc1

    \\

  • 图像坐标系 – 像素坐标系 ( 2 D − 2 D ) (2D-2D) 2D2D:

    [ 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=dx1000dy10u0v01xiyi1

    \\

  • 整合:世界坐标系 – 像素坐标系 ( 3 D − 2 D ) (3D-2D) 3D2D:

    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} zcuv1=dx1000dy10u0v013×3拆分此矩阵 f000f00010003×4[R3×30 T3×11]4×4xwywzw14×1zcuv1=这两项相乘 dx1000dy10u0v013×3f000f00013×3这两项相乘 1000100010003×4[R3×30 T3×11]4×4xwywzw14×1zcuv13×1=fx000fy0u0v013×3[R3×3T3×1]3×4xwywzw14×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 (深度值)的值(来源)。

2. 畸变参数:径向畸变

  • 景深(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]

    理想的透镜是没有畸变的。但是,因为制造和安装精度等方面的原因,镜头总是存在这畸变。畸变是相机固有特性,和相机内参一样,标定一次即可。

  • 畸变参数类型:

    • 径向畸变(Radial Distortion)
    • 切向畸变(Tangential Distortion)
    • 其他类型畸变,故忽略不计
  • 径向畸变:
    透镜形状不规则以及建模的方式,导致镜头不同部分焦距不同。

    光线在远离透镜中心的地方偏折更大(枕型畸变)或更小(桶形畸变)

    对径向畸变,成像仪中心(光轴)的畸变为0,随着向边缘移动,畸变越来越严重。

    可以用 r = 0 r=0 r=0(半径)位置周围的泰勒级数展开的前几项来定量描述
    在这里插入图片描述
    常见的径向畸变情形,桶形畸变通常 k 1 > 0 k1>0 k1>0,枕形畸变通常 k 1 < 0 k1<0 k1<0


3. 畸变参数:切向畸变

  • 切向畸变
    在整个摄像机的组装过程,由于透镜制造上的缺陷使得透镜本身与图像平面不平行而产生的

    切向畸变可以用两个额外的参数 p 1 和 p 2 p_1和p_2 p1p2来描述
    在这里插入图片描述


4. 标定与去畸变原理

  • 径向畸变、切向畸变图示: 在这里插入图片描述

    • 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] \,\, fx000fy0u0v01fx000fy0cxcy1

    u 0 , v 0 可 以 写 作 c x , c y u_0, v_0 可以写作 c_x, c_y u0,v0cx,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,k3p1,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=fxzcxc+cxyi=fyzcyc+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


5. 标定板


&&_参考

链接: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)
链接:深入解读相机矩阵


&&_问题解决

  • 6
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
相机内外标定是计算机视觉中的一个重要问题,它需要通过多组已知的图像和相应的三维空间点来计算相机的内部数和外部数。Matlab提供了一个相机标定的工具箱,可以方便地进行相机标定。下面是一个简单的相机标定的Matlab代码示例。 首先需要准备好一些数据,包括: - 图像坐标点:已知的图像上的点的坐标。 - 三维空间点:对应于图像坐标点的已知三维点的坐标。 - 相机数:包括相机的内部数(如焦距、光心等)和外部数(如旋转矩阵、平移矩阵等)。 假设已经准备好了这些数据,下面是一个相机标定的Matlab代码示例: ```matlab % 定义图像坐标点和三维空间点 imagePoints = [x1, y1; x2, y2; ...]; worldPoints = [X1, Y1, Z1; X2, Y2, Z2; ...]; % 定义相机数 focalLength = [fx, fy]; principalPoint = [cx, cy]; radialDistortion = [k1, k2, k3]; tangentialDistortion = [p1, p2]; rotationVectors = [rvec1; rvec2; ...]; translationVectors = [tvec1; tvec2; ...]; % 定义相机标定对象 cameraParams = cameraParameters('IntrinsicMatrix', [fx, 0, cx; 0, fy, cy; 0, 0, 1], ... 'RadialDistortion', [k1, k2, k3], ... 'TangentialDistortion', [p1, p2]); % 进行相机标定 [cameraParams, ~, estimationErrors] = estimateCameraParameters(imagePoints, worldPoints, ... 'CameraMatrix', cameraParams.IntrinsicMatrix, ... 'RotationVectors', rotationVectors, ... 'TranslationVectors', translationVectors, ... 'WorldPoints', worldPoints, ... 'ReprojectionErrors', estimationErrors); % 输出相机内部数和外部数 disp('相机内部数:'); disp(cameraParams.IntrinsicMatrix); disp('相机外部数:'); disp(table(cameraParams.RotationMatrices, cameraParams.TranslationVectors, ... 'VariableNames', {'旋转矩阵', '平移矩阵'})); ``` 在这个例子中,使用了`cameraParameters()`函数来定义相机数,然后使用`estimateCameraParameters()`函数来进行相机标定。最后,输出了相机的内部数和外部数。 需要注意的是,这只是一个简单的相机标定的Matlab代码示例,实际应用中可能需要根据具体情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值