针孔相机模型原理坐标系辨析内参标定流程内参变换

针孔相机的内参标定

  • 针孔相机原理
    • 真空相机模型
    • 图片的伸缩和裁剪变换
  • 内参标定———非线性优化
  • 张正定标定详细原理(含公式推导)
  • 通过多张棋盘格照片完成相机的内参标定流程(C++代码)
  • 其他工具箱

相机分为短焦镜头和长焦镜头,短焦镜头看到的视野更广阔,同样距离大小的一颗树,在短焦相机中所占的像素个数较少。
长焦镜头看到的视野较窄,能看的更远。因为同样距离大小的一棵树,在长焦距镜头中的像素个数更多;
同一款芯片,短焦距fov大,长焦fov小。

针孔相机原理

真空相机模型

要搞明白针孔相机模型,首先需要明确世界坐标系 O X w Y w Z w OX_wY_wZ_w OXwYwZw、相机坐标系 O X c Y c Z c OX_cY_cZ_c OXcYcZc、物理坐标系 O X l Y l OX_lY_l OXlYl和像素坐标系 O U V OUV OUV之间的关系。最重要的是需要理解物理坐标系和像素坐标系之间的变换关系。
在这里插入图片描述

  • 坐标系之间的关系

    • 这里提到的世界坐标系,只是一种表征的方式,与其他专业领域提到的世界坐标系不一样。这里仅仅指代的是某个自定义原定的坐标系。在自动驾驶的传感器标定中,多指车体坐标系和激光雷达坐标系。尺度为m
    • 相机坐标系。相机坐标系是以相机光心为原点的笛卡尔坐标系,遵循右手定则。正前方深度方向为Z轴,y轴方向根据相机安装方式可以朝上也可以朝下,x轴方向取决于y轴的方向(根据右手定则确定)。尺度为m
    • 物理坐标系。物理坐标系与图像采集传感器联系紧密。也就是说光线在感光芯片上的成像点。原点通常情况下是成像平面的中心。以索尼IMX249芯片为例,芯片尺寸为 11.33 m m × 7.13 m m 11.33mm \times 7.13mm 11.33mm×7.13mm。那么 x l ∈ [ − 5.665 m m , 5.665 m m ] , y ∈ [ − 3.565 m m , 3.565 m m ] x_l \in [-5.665mm, 5.665mm], y \in [-3.565mm, 3.565mm] xl[5.665mm,5.665mm],y[3.565mm,3.565mm]
    • 像素坐标系。像素坐标系与芯片的像素尺寸 σ u , σ v \sigma_u, \sigma_v σu,σv有关,像素尺寸是指图像传感器上每个像素的物理尺寸,通常以微米 ( μ m ) (μm) (μm)为单位。它是指在传感器上每个像素所占据的面积。IMX249芯片的像素尺寸为 5.86 μ m × 5.86 μ m 5.86 \mu m \times 5.86 \mu m 5.86μm×5.86μm。所以分辨率为 1920 ( 11.33 / 5.86 × 1000 ) × 1200 ( 7.13 / 5.85 × 1000 ) 1920(11.33/5.86\times1000) \times 1200(7.13/5.85\times1000) 1920(11.33/5.86×1000)×1200(7.13/5.85×1000),也就是2.3M(230万)的分辨率。
  • 什么是内参?
    内参可以完成相机坐标系中点P到像素坐标系的投影。也就是说点P的反射光线,经过光心以及透镜的折射以后,会落在像素坐标系的那个像素坐标。以下面的公式讲解:
    [ u v 1 ] = 1 z c [ f x 0 c x 0 f y c y 0 0 1 ] [ x c y c z c ] ( 1 ) { u = f x z c x c + c x v = f y z c x c + c y { x c = ( u − c x ) × σ u f × z c = ( u − c x ) f x × z c y c = ( v − c y ) × σ v f × z c = ( v − c y ) f y × z c ( 2 ) \begin{bmatrix} u\\ v\\ 1\\ \end{bmatrix} = {1 \over z_c} \begin{bmatrix} f_x&0&c_x\\ 0& f_y&c_y\\ 0&0&1\\ \end{bmatrix} \begin{bmatrix} x_c\\ y_c\\ z_c\\ \end{bmatrix} (1) \\ \ \\ \left\{ \begin{aligned} u = {f_x \over z_c} x_c + c_x \\ v = {f_y \over z_c} x_c + c_y \\ \end{aligned} \right. \\ \ \\ \left\{ \begin{aligned} x_c ={(u - c_x) \times \sigma_u \over f} \times z_c ={(u - c_x) \over f_x} \times z_c \\ y_c ={(v - c_y) \times \sigma_v \over f} \times z_c ={(v - c_y) \over f_y} \times z_c \\ \end{aligned} \right. (2) uv1=zc1fx000fy0cxcy1xcyczc(1) u=zcfxxc+cxv=zcfyxc+cy xc=f(ucx)×σu×zc=fx(ucx)×zcyc=f(vcy)×σv×zc=fy(vcy)×zc2
    上式为点P在相机坐标系中的坐标 ( x c , y c , z c ) (x_c,y_c,z_c) (xc,yc,zc)与像素坐标系坐标 ( u , v ) (u,v) (u,v)的关系。遵循相似三角形给原则,如下图:
    在这里插入图片描述
    其中, f为焦距, p p p是相机坐标系中的坐标位置, p ′ p' p为图像物理坐标系中的坐标位置。 p ′ ( x l , y l ) p'(x_l,y_l) p(xl,yl)在像素坐标中的位置为:
    u = ( x l − c x ) × σ u f v = ( y l − c y ) × σ v f f x = f σ u f y = f σ v u = {(x_l - c_x) \times \sigma_u \over f} \\ \ \\ v = {(y_l - c_y) \times \sigma_v \over f} \\ \ \\ f_x = {f \over \sigma_u }\\ \ \\ f_y = {f \over \sigma_v} u=f(xlcx)×σu v=f(ylcy)×σv fx=σuf fy=σvf

所以说,内参的作用就是完成尺度转化和中心化。

点P在像素坐标系中的像素代表了光心与点P连线方向的射线上的所有点,如果你把式子(1)的相机坐标系坐标的xyz同时缩放m倍,得到的uv像素点是一致的。
反过来思考,如果给你一个像素点坐标uv, 以及内参矩阵,你可以得到该点在相机坐标系下的笛卡尔三维坐标吗?答案是不行的,因为缺少了深度信息。每个像素点都是一条射线,但是射线的长度你不知道。但是如果允许你进行深度的采样呐?也就是说假如相机的可见距离是200,那么采样2000个深度(2000个 z c z_c zc),就可以得到2000个坐标点位置,这2000个点都在射线上,这也就是自动驾驶中LSS的原理。
如果某个像素是个接地点,那么也算是获得了深度的信息。根据相机距离地面的高度,就可以获得深度。注意这里的相机光轴需要水平,如果不水平,需要使用一个水平状态的相机坐标系作为中转,这就是接地点测距的原理。针孔相机中借助了深度为1的平面。

  • 图像传感器尺寸,像素尺寸,焦距,FOV角之间的关系
    假定某相机镜头焦距为f(mm),芯片尺寸为 w , h w, h w,h,垂直FOV角为 θ v \theta_v θv,水平FOV角度为 θ u \theta_u θu。那么,
    t a n ( θ u 2 ) = w 2 × f θ u = 2 × a r c t a n ( w 2 × f ) θ v = 2 × a r c t a n ( w 2 × f ) tan({\theta_u \over 2}) = {w \over 2 \times f} \\ \ \\ \theta_u = 2 \times arctan({w \over 2 \times f}) \\ \ \\ \theta_v= 2 \times arctan({w \over 2 \times f}) tan(2θu)=2×fw θu=2×arctan(2×fw) θv=2×arctan(2×fw)

  • 给定某个物体所占的像素大小,得到物体真实大小深度的原理
    假定有棵树与相机水平,真实高度为H,v方向占用像素M个, 像素尺寸 σ v \sigma_v σv,焦距 f f f,深度为z。则:
    H M × σ v = z f {H \over M \times \sigma_v} = {z \over f} M×σvH=fz

图片的伸缩和裁剪变换

上文已经讲解了内参的作用,给定一系列相机系下的三维点 P { p 1 , p 2 , . . . , p n } , p i ∈ R 3 P\{p_1, p_2, ... , p_n\},p_i \in R_3 P{p1,p2,...,pn},piR3。相机内参 I ∈ R 3 × 3 I \in R_{3\times3} IR3×3。计算对应的像素点,将这团三维点投影到图片上。
如果图片发生了裁剪和缩放,为了使得这团激光点还可以正确的完成反投影,需要怎么调整内参?
假定原始的内外参矩阵为:
I = [ f x 0 c x 0 f y c y 0 0 1 ] , I = \begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \\ \end{bmatrix} , I=fx000fy0cxcy1,

  • 图片缩放,在w方向缩放 t w t_w tw倍,在h方向缩放 t h t_h th
    [ u n e w v n e w 1 ] = 1 z c [ t w f x 0 t w c x 0 t h f y t h c y 0 0 1 ] [ x c y c z c ] \begin{bmatrix} u_{new}\\ v_{new}\\ 1\\ \end{bmatrix} = {1 \over z_c} \begin{bmatrix} t_wf_x&0&t_wc_x\\ 0& t_hf_y&t_hc_y\\ 0&0&1\\ \end{bmatrix} \begin{bmatrix} x_c\\ y_c\\ z_c\\ \end{bmatrix} unewvnew1=zc1twfx000thfy0twcxthcy1xcyczc

  • 图片裁剪,以原图上的像素位置 ( m x , m y ) (m_x,m_y) (mx,my)为左上角裁剪
    [ u n e w v n e w 1 ] = 1 z c [ f x 0 c x − m x 0 f y c y − m y 0 0 1 ] [ x c y c z c ] \begin{bmatrix} u_{new}\\ v_{new}\\ 1\\ \end{bmatrix} = {1 \over z_c} \begin{bmatrix} f_x&0&c_x - m_x \\ 0& f_y&c_y-m_y \\ 0&0&1\\ \end{bmatrix} \begin{bmatrix} x_c\\ y_c\\ z_c\\ \end{bmatrix} unewvnew1=zc1fx000fy0cxmxcymy1xcyczc

  • 先从 ( m x , m y ) (m_x,m_y) (mx,my)开始裁剪,裁剪后的图片尺寸是原始尺寸的 T 1 T_1 T1倍,随后把裁剪后的图片扩大到原始图片 T 2 T_2 T2
    [ u v 1 ] = 1 z c [ T 2 T 1 f x 0 T 2 T 1 ( c x − m x ) 0 T 2 T 1 f y T 2 T 1 ( c y − m y ) 0 0 1 ] [ x c y c z c ] \begin{bmatrix} u\\ v\\ 1\\ \end{bmatrix} = {1 \over z_c} \begin{bmatrix} {T_2 \over T_1 }f_x&0&{T_2 \over T_1 }(c_x - m_x)\\ 0&{T_2 \over T_1 } f_y&{T_2 \over T_1 }(c_y - m_y)\\ 0&0&1\\ \end{bmatrix} \begin{bmatrix} x_c\\ y_c\\ z_c\\ \end{bmatrix} uv1=zc1T1T2fx000T1T2fy0T1T2(cxmx)T1T2(cymy)1xcyczc

  • 先缩放后裁剪。先缩放到原始图片的 T 1 T_1 T1倍,然后从缩放后的图片的 ( m x , m y ) (m_x,m_y) (mx,my)开始裁剪。
    [ u v 1 ] = 1 z c [ T 1 f x 0 T 1 c x − m x 0 T 1 f y T 1 c y − m y 0 0 1 ] [ x c y c z c ] \begin{bmatrix} u\\ v\\ 1\\ \end{bmatrix} = {1 \over z_c} \begin{bmatrix} T_1f_x&0&T_1c_x - m_x\\ 0& T_1f_y&T_1c_y - m_y\\ 0&0&1\\ \end{bmatrix} \begin{bmatrix} x_c\\ y_c\\ z_c\\ \end{bmatrix} uv1=zc1T1fx000T1fy0T1cxmxT1cymy1xcyczc

内参标定———非线性优化

相机的内参标定通常是转化为非线性优化的问题,通过多组3D空间点和像素点的一一对应关系,构建优化函数,然后通过LM算法或者高斯牛顿计算。
在这里插入图片描述
构建棋盘格坐标系,原点为棋盘格左上角点,X/Y轴分别为棋盘格的两条边,Z轴垂直棋盘格平面。
根据棋盘格的尺寸,可以得到一系列棋盘格的交叉点3D坐标 P c h e s s b o a r d { p 0 , p 1 , p 2 , . . . , p n } , p ∈ R 3 P_{chessboard}\{p_0,p_1,p_2,...,p_n\},p \in R_3 Pchessboard{p0,p1,p2,...,pn},pR3。通过角点检测算法得到图片中的棋盘格格子角点的像素坐标(可以使用计算机视觉中的Harris算法,可以使用Opencv中的API)。最后根据外参(这里的外参是棋盘格坐标系到相机坐标系的变变换关系 T c h e s s b o a r d c a m e r a T_{chessboard}^{camera} Tchessboardcamera,图中是 T c a m e r a c h e s s b o a r d T_{camera}^{chessboard} Tcamerachessboard,我的习惯是写成前者,表示一个点从chessboar系到camera系的变换)和相机内参构建一系列的方程,通常至少需要四组点的对应关系。
那么现在的问题就是,我们得到了若干组的像素点与3D点的对应关系,怎么求解这里的内参矩阵和外参矩阵呐?这就需要提到张正友标定。

张式标定法的大致思路如下:
那么现在的问题就是,我们得到了若干组的像素点与3D点的对应关系,怎么求解这里的内参矩阵和外参矩阵呐?这就需要提到张正友标定。
张式标定法的大致思路如下:

  1. 准备一个张正标定法的棋盘格,棋盘格大小已知,用相机对其进行不同角度的拍摄,得到一组图像
  2. 对图像中的特征点如标定板的角点进行检测,得到标定板角点的像素坐标值(畸变后的),根据已知的棋盘格大小和世界坐标系(这里将棋盘格坐标系作为世界坐标系)原点,计算得到标定板角点的物理坐标值
  3. 求解内参矩阵和外参矩阵的点乘
    根据物理坐标系和像素坐标系值(就当成是没有畸变的像素点坐标)的关系,求出H矩阵(内参矩阵点乘外参矩阵),进而构造v矩阵,求解B矩阵,最后利用B矩阵求解内参矩阵,最后求解每张图片对应的相机外参矩阵。(这里的H,D,V,B矩阵的含义下文会介绍)
    这里的求解过程都是 将角点像素值作为没有畸变的情况下进行的,存在误差
  4. 求解畸变参数
    根据一组畸变后的角点像素值以及对应的理想像素值,构造D矩阵,计算畸变参数(这里的理想像素坐标值和畸变后的角点像素坐标的怎么得到?)
  5. 利用L-M算法对第4步目标函数进行求解,进行参数优化

张正定标定详细原理(含公式推导)

在梳理这个问题之前,需要明白的是不同位置不同角度的标定板与相机坐标系之间的外参矩阵 T c h e s s b o a r d c a m e r a T_{chessboard}^{camera} Tchessboardcamera是不同的,但是同一个位置标定板的不同角点坐标与相机之间的外参矩阵是一样的,还有就是所有位置所有角度拍摄的照片对应的内参是一样的。

  1. 第一步, 构建求解H矩阵
    H矩阵其实就是内参矩阵与外参矩阵的乘积,但是又有点不同,因为棋盘格坐标系Z轴垂直棋盘格平面的缘故,所以这里可以完成简化,不需要旋转矩阵的第三列。
    记点棋盘格坐标系P的坐标为 { x c h e s s b o a r d , y c h e s s b o a r d , z c h e s s b o a r d } \{x_{chessboard},y_{chessboard},z_{chessboard}\} {xchessboard,ychessboard,zchessboard},内参矩阵记为 I I I,外参矩阵记为 T c h e s s b o a r d c a m e r a T_{chessboard}^{camera} Tchessboardcamera,对应的像素点坐标为 { u , v } \{u,v\} {u,v},点P在相机坐标系下的z轴坐标为 z c a m z_{cam} zcam。由此得到如下公式:
    KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ z_{cam}\begin{…

因为棋盘坐标系垂直于棋盘格平面,所以这里的棋盘格点P的z轴坐标为0,因此得,

KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ z_{cam}\begin{…

每个对应关系可以构建上式(8)(9)两个式子,式(7)的9个参数中有个其次坐标,因为需要四个棋盘格系的坐标点,构成8个等式完成H矩阵的8个参数的求解。注意这四个点需要来自同一个位置的棋盘格标定板,因为H矩阵包含了外参,这8个等式的H矩阵需要保持一致

  1. 第二步,构建 V V V矩阵,求解 B B B矩阵

B矩阵需要内参矩阵来求解, B = I − T I − 1 B = I^{-T}I^{-1} B=ITI1。为什么需要这个参数请看下边的分析

根据上文知道, r 1 , r 2 r_1,r_2 r1,r2是外参矩阵的前两列,这两个单位列向量正交,即 r 1 T r 2 = 0 r_1^Tr_2=0 r1Tr2=0,由此可以得到下列的过程,记矩阵 H = [ h 1 , h 2 , h 3 ] , h i ∈ R 3 H=[h_1,h_2,h_3],h_i \in R_3 H=[h1,h2,h3],hiR3
KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ [h_1,h_2,h_3] …
记矩阵 B B B为:
KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ B &= I^{-T}I^{…
由式子(16)(17)我们可以知道在H矩阵已知的情况下,每个棋盘格位姿可以得到两个等式,内参据矩阵 I I I有5个参数需要求解,矩阵B有九个参数,但是因为矩阵B是个对称阵,所以矩阵B只剩下6个参数需要求解,因此我们需要三个棋盘格的位姿来完成6个等式的构建(每个棋盘格位姿选取超过4个角点坐标求出对应的H矩阵)。由此我们就求出了B矩阵,B矩阵与内参矩阵联系紧密。

因为B矩阵是个对称阵,因此B矩阵中还有6个参数需要求解,记作b。
b = [ b 11 , b 12 , b 22 , b 21 , b 22 , b 33 ] T b = [b_{11},b_{12},b_{22},b_{21},b_{22},b_{33}]^T b=[b11,b12,b22,b21,b22,b33]T
因此, h 1 T I − T I − 1 h 2 = 0 h_1^TI^{-T}I^{-1}h_2=0 h1TITI1h2=0可以完成下述推导,
KaTeX parse error: No such environment: align at position 7: \begin{̲a̲l̲i̲g̲n̲}̲ h_1^TI^{-T}I^{…
然后结合式子(16)(17),可以得到下列等式,
KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ \begin{bmatrix…
因此,每个姿态的标定板(通过标定板上的四个角点位置)得到的H矩阵的帮助下,可以构建两个方程,限制B矩阵(B矩阵来源自内参,所以所有标定板姿态对应的B矩阵都一样)的两个自由度(B矩阵只有六个自由度)。所以我们需要三个位置姿态的标定板对应的H矩阵来构建6个方程,完成B矩阵6个自由度的限制。

记第一个标定板对应的V矩阵为 v 12 ′ , v 11 ′ , v 22 ′ v'_{12},v'_{11},v'_{22} v12,v11,v22,第二个标定板对应的V矩阵为 v 12 ′ ′ , v 11 ′ ′ , v 22 ′ ′ v''_{12},v''_{11},v''_{22} v12,v11,v22,第三个标定板对应的V矩阵为 v 12 ′ ′ ′ , v 11 ′ ′ ′ , v 22 ′ ′ ′ v'''_{12},v'''_{11},v'''_{22} v12,v11,v22 。那么结合式(24),我们可以得到,
KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ \begin{bmatrix…
利用非线性优化的方式,就能求出矩阵b。

  1. 第三步,利用 B B B矩阵求解内参矩阵 I I I
    得到B矩阵以后,通过Cholesky分解得到相机的内参数
    KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ f_x & =\sqrt{\…

  2. 第四步,结合H矩阵和内参矩阵,求出每个姿态棋盘格的外参
    第三步结束以后,得到了相机的内参矩阵。然后结合每个位姿棋盘格求出的H矩阵和上一步求出的内参矩阵求解每个位置姿态的棋盘格坐标系与相机坐标系之间的转换关系 T c h e s s b o a r d c a m e r a T_{chessboard}^{camera} Tchessboardcamera
    结合式(15),具体计算步骤如下:
    KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ r_1 &= I^{-1}h…
    到这里,我们已经得到了使用的所有位姿棋盘格与相机坐标系直接的外参关系 T c h e s s b o a r d c a m e r a T_{chessboard}^{camera} Tchessboardcamera,以及相机的内参。

总结一下之前的四步: 首先每个棋盘格姿态我们提取四个角点,构建8个方程,完成H矩阵的求解(H矩阵是内参矩阵和该棋盘格坐标系与相机坐标系的乘积,因此每个位资的棋盘格都对应一个H矩阵);然后另外选取2个位姿的棋盘格,求出另外两个H矩阵。再然后每个H矩阵构建一个两个方程,三个H矩阵构建六个方程,最后构建一个方程组,自变量就是B矩阵的6个参数,系数矩阵记为V矩阵,使用非线性优化的方式求出B矩阵;在然后借助Cholesky分解完成内参矩阵的求解;最后求解相机坐标系与所有棋盘格姿态的外参联系 T c h e s s b o a r d c a m e r a T_{chessboard}^{camera} Tchessboardcamera需要注意的是,上述的过程都是在假设没有畸变的情况下,也就是说式(3)是在无畸变的情况下构建的等式。所以求出的H矩阵,也就基于无畸变的假设,进而造成后续的B矩阵,I矩阵和外参矩阵都有一定的误差存在。所以下边的步骤将解决这里的误差

  1. 第五步,求解畸变参数
    求畸变参数的过程也是最小化误差的过程,完成理想像素点坐标与畸变情况下的像素点坐标之间误差的最小化,最后构建一个方程组,使用LM算法完成最后畸变参数的求解。
    记理想像素坐标为 ( u , v ) (u,v) (u,v),对应在图像物理坐标系的坐标为 ( x l , y l ) (x_l,y_l) (xl,yl),距离芯片中心的距离 r c = x l 2 + y l 2 r_c=\sqrt{x_l^2 + y_l^2} rc=xl2+yl2 ;携带畸变的像素坐标为 ( u ′ , v ′ ) (u',v') (u,v),对应在图像物理坐标系的坐标为 ( x l ′ , y l ′ ) (x_l^{'},y_l^{'}) (xl,yl);感光芯片的像素尺寸为 ( σ u , σ v ) (\sigma_u,\sigma_v) (σu,σv);畸变参数为 k 1 , k 2 , k 3 , k 4 k_1,k_2,k_3,k_4 k1,k2,k3,k4 。为了方便写公式,下文仅对 k 1 , k 2 k_1,k_2 k1k2进行求解, k 3 , k 4 k_3,k_4 k3,k4同理拓展即可。
    KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ u &= {x_l \ove…
    结合式(35)和(36)可以推出,
    KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ u - c_x &= (u'…
    进一步,得
    KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ \begin{bmatrix…
    上式中的理想像素坐标点,通过前四步求出的理想内外参矩阵完成棋盘格坐标系3D点的重投影,得到理想的像素点坐标。携带畸变的像素点坐标通过直接对图片进行角点检测得到对应的像素点。每个3D角点和像素点都可以构建式(39)的两个方程。为了可以最小化误差的影响,我们选择已经求出H矩阵的多个棋盘格(m个)位姿的多个3D角点和对应的图片角点像素坐标(n个),构建mn个方程,参照式子(39)的形式整理为矩阵相乘的形式。
    KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ \begin{bmatrix…
    记作,
    KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ D \cdot k &= d…
    使用最小二乘法,得到最后的结果
    k = ( D T ⋅ D ) − 1 ⋅ D T ⋅ d k = (D^T \cdot D)^{-1} \cdot D^T \cdot d k=(DTD)1DTd
    至此,就已经算出了所有的参数。

  2. 第六步,重投影,根据重投影误差优化参数
    后续补充

通过多张棋盘格照片完成相机的内参标定流程(C++代码)

后续补充

其他工具箱

棋盘格下载: 棋盘格下载
ros的相机标定工具箱: ROS相机内参标定工具箱
激光雷达和相机的联合标定工具箱

https://zhuanlan.zhihu.com/p/686197773

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/3036.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

白平衡简介

文章目录 白平衡的概念白平衡的调节常见的白平衡模式 白平衡的概念 白平衡是指摄影、摄像和显示技术中的一项重要概念,用于调节图像中的白色或中性灰色的色彩,使其看起来在不同光源条件下都是准确的白色或灰色。白平衡的主要目的是确保图像的色彩准确性…

C语言 | Leetcode C语言题解之第49题字母异位词分组

题目: 题解: /*1.将字符串原串与副本进行绑定成一个节点2.对字符串副本进行按ascii码表进行从小到大排序3.按照字符串进行比较排序4.合并 */ typedef struct Node{char*s;char*s_vice;int len; }Node;void sortShellChar(char*s,int len){for(int dista…

查找总价格为目标值的两个商品 ---- 双指针

题目链接 题目: 分析: 解法一: 暴力解法, 将每两个的和都算出来, 判断是否为目标值解法二: 数组中的数是按升序排序的, 我们可以定义左右指针 如果和小于目标值, 则应该让和变大, 所以左指针右移如果和大于目标值, 则应该让和变小, 所以右指针左移 思路: 定义left 0, righ…

绝地求生【商城更新】WIA联名上架//专属商店下架

大家好,我是闲游盒. 本周商城将在4.24(周三)更新,商城内容更新如下: 上架物品 ▲W.I.A联名皮肤大礼包 小礼包如下: 包含3套衣服以及MINI、DBS的联名皮肤,3个头饰还挺有特色的,你喜欢…

链栈算法库构建

学习贺利坚老师, 链栈 , 构建链栈算法库 数据结构之自建算法库——链栈_领会链栈结构和掌握链栈中的各种基本算法-CSDN博客文章浏览阅读3.9k次,点赞3次,收藏8次。本文针对数据结构基础系列网络课程(3):栈和队列中第4课时栈的链式存储结构及其…

安全开发实战(3)--存活探测与端口扫描

目录 安全开发专栏 前言 存活探测 端口扫描 方式一: 1.3.1 One 1.3.2 Two 1.3.3 批量监测 方式二: 1.3.1 One 1.3.2 Two 1.3.3 Three 1.3.4 扫描ip地址,提取出开放端口和协议 ​编辑 1.3.5 批量扫描(最终完成版) 总结 安全开发专栏 安全开发实战​http://t.csd…

【zabbix7】新版本尝鲜之connector

zabbix历史版本中,会使用python脚本,把zabbix的告警发送到kafka进行二次处理,或者使用filebeat把zabbix的Export的njson指标数据发送到kafka进行二次处理,然而在zabbix7中新增了新功能connector简化了操作并且可以根据tag进行区分…

详解Al作画算法原理

ChatGPT AI作画算法,又称为AI图像生成算法,是一种人工智能技术,它可以根据给定的输入自动生成图像。这类算法近年来变得非常流行,尤其是随着深度学习技术的发展。这里我将聚焦于目前最先进的一类AI作画算法,即生成对抗…

C++:构造函数与析构函数

目录 构造函数 构造函数的概念 析构函数的作用 自定义构造函数与默认构造函数 自定义构造函数 默认构造函数 调用自定义构造函数 析构函 自定义析构函数和默认构造函数 自定义构造函数 默认析构函数 构造函数 构造函数的概念 我们通常的函数是都需要有返回值的,但…

布局香港之零售小店篇 | 香港一人小企与连锁超市的竞争

近年来,内地品牌入驻香港市场开拓业务已成大势所趋。香港特区政府早前公布的「2023年有香港境外母公司的驻港公司按年统计调查」显示,2023年母公司在海外及内地的驻港公司数量高达9039家。内地品牌在香港的成功落地,不仅为香港市民带来了丰富…

【第3节】“茴香豆“:搭建你的 RAG 智能助理

目录 1 基础知识1.1.RAG技术的概述1.2 RAG的基本结构有哪些呢?1.3 RAG 工作原理:1.4 向量数据库(Vector-DB ):1.5 RAG常见优化方法1.6RAG技术vs微调技术 2、茴香豆介绍2.1应用场景2.2 场景难点2.3 茴香豆的构建: 3 论文快读 1 基础…

01.JAVAEE初阶之计算机如何工作

1.一台机器如何组成 冯诺依曼体系 CPU 中央处理器: 进行算术运算和逻辑判断.存储器: 分为外存和内存, 用于存储数据(使用二进制方式存储)输入设备: 用户给计算机发号施令的设备.输出设备: 计算机个用户汇报结果的设备. 针对存储空间 硬盘 > 内存 >> CPU针对数据访问…

十大排序算法详解-上篇:比较排序算法【python 动态图解】

作者介绍:10年大厂数据\经营分析经验,现任大厂数据部门负责人。 会一些的技术:数据分析、算法、SQL、大数据相关、python 欢迎加入社区:码上找工作 作者专栏每日更新: LeetCode解锁1000题: 打怪升级之旅 python数据分析…

nginx 配置 SSL 证书实现 https 访问

nginx 配置SSL证书实现https访问 1. SSL 证书简介与获取1.1 SSL 证书介绍1.2 获取 SSL 证书 2. nginx 配置 SSL 文件2.1 SSL 文件放置与配置文件修改2.1.1 文件配置2.1.2 强制 https 访问 2.2 验证配置结果 同步发布在个人笔记 nginx 配置 SSL 证书实现 https 访问 配置好 ngi…

LabVIEW和MES系统的智能化车间数据对接

LabVIEW和MES系统的智能化车间数据对接 随着工业4.0时代的到来,智能制造成为推动制造业高质量发展的重要手段。其中,数字化车间作为智能制造的重要组成部分,其设计与实现至关重要。在数字化车间环境下,如何利用LabVIEW软件与MES系…

求最小公倍数

两种方法 1.直接求 import java.util.Scanner;/*** HJ108 求最小公倍数 - 简单*/ public class HJ108 {public static void main(String[] args) {Scanner sc new Scanner(System.in);while(sc.hasNextInt()){int n1 sc.nextInt();int n2 sc.nextInt();for(int i 1; i &l…

OAuth2、JWT

文章目录 OAuth2JWT OAuth2 官网: https://oauth.net/2/ 在 RFC 6749 中说明 1、资源所有者 resource owner, 如 github 用户 2、客户端/第三方应用 client, 如 支持github 登录的 csdn 3、资源服务器 resource server, 如 4、授…

【高阶数据结构】B树 {B树的概念;B树的实现:节点设计,查找,插入,遍历,删除;B树的性能分析;B+树和B*树;B树的应用}

一、常见的搜索结构 以上结构适合用于数据量相对不是很大,能够一次性存放在内存中,进行数据查找的场景。如果数据量很大,比如有100G数据,无法一次放进内存中,那就只能放在磁盘上了,如果放在磁盘上&#xff…

Linux系统安全:从面临的攻击和风险到安全加固、安全维护策略(文末有福利)

1. Linux面临的攻击与风险 1.1. Linux系统架构 Linux系统架构解读: 用户之间隔离内核态与用户态之间隔离用户进程一般以低权限用户运行系统服务一般以特权服务运行用户态通过系统调用进入内核态内核对系统资源进行管理和分配 1.2. Linux系统常见安全威胁 1.2.1.…

Qt/C++音视频开发71-指定mjpeg/h264格式采集本地摄像头/存储文件到mp4/设备推流/采集推流

一、前言 用ffmpeg采集本地摄像头,如果不指定格式的话,默认小分辨率比如640x480使用rawvideo格式,大分辨率比如1280x720使用mjpeg格式,当然前提是这个摄像头设备要支持这些格式。目前市面上有一些厂家做的本地设备支持264格式&am…