SLAM十四讲之第5讲--相机标定

1、相机模型

  • 针孔模型
    相机将三维世界中的坐标点(单位为米)映射到二维图像平面(单位为像素)的过程能够用一个几何模型进行描述。这个模型有很多种,其中最简单的称为针孔模型。针孔模型是很常用而且有效的模型,它描述了一束光线通过针孔之后,在针孔背面投影成像的关系。

  • 畸变模型
    由于相机镜头上的透镜的存在,使得光线投影到成像平面的过程中会产生畸变。因此,我们使用针孔和畸变两个模型来描述整个投影过程。

1.1、针孔模型

在这里插入图片描述

此图是SLAM的

在这里插入图片描述

此图是OpenCV的

f是摄像机焦距,Z是相机到物体的距离,X是物体的长度,x图像平面上的物体图像。
在这里插入图片描述
接着上图的,也可以这样的方式进行解读:

  • 相机坐标系到图像物理坐标系
    相似三角形
    { X ′ = f X Z Y ′ = f Y Z \begin{cases}X^{\prime} =f\frac{X}{Z} \\ Y^{\prime} = f\frac{Y}{Z} \end{cases} {X=fZXY=fZY
    矩阵形式为:
    Z [ X ′ Y ′ 1 ] = [ f 0 0 0 f 0 0 0 1 ] [ X Y Z ] Z\begin{bmatrix} X^{\prime}\\ Y^{\prime}\\ 1 \end{bmatrix}=\begin{bmatrix} f & 0 & 0\\ 0 & f & 0\\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} X\\ Y\\ Z \end{bmatrix} Z XY1 = f000f0001 XYZ
  • 图像物理坐标系到图像像素坐标系
    { u = X ′ d x + c x v = Y ′ d y + c y \begin{cases}u =\frac{X^{\prime}}{dx} + c_x \\ v = \frac{Y^{\prime}}{dy} + c_y\end{cases} {u=dxX+cxv=dyY+cy
    其中 d x d_x dx d y d_y dy是X方向和Y方向的一个像素分别占多少个长度单位。
    齐次坐标下,矩阵形式为:
    [ u v 1 ] = [ 1 d x 0 c x 0 1 d y c y 0 0 1 ] [ X ′ Y ′ 1 ] \begin{bmatrix} u\\ v\\ 1 \end{bmatrix}=\begin{bmatrix} \frac{1}{dx} & 0 & c_x\\ 0 & \frac{1}{dy} & c_y\\ 0 & 0 & 1 \end{bmatrix}\begin{bmatrix} X^{\prime}\\ Y^{\prime}\\ 1 \end{bmatrix} uv1 = dx1000dy10cxcy1 XY1
  • 相机坐标系到图像像素坐标系
    Z [ X ′ Y ′ 1 ] = [ f 0 0 0 f 0 0 0 1 ] [ X Y Z ] Z\begin{bmatrix} X^{\prime}\\ Y^{\prime}\\ 1 \end{bmatrix}=\begin{bmatrix} f & 0 & 0\\ 0 & f & 0\\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} X\\ Y\\ Z \end{bmatrix} Z XY1 = f000f0001 XYZ
    [ u v 1 ] = [ 1 d x 0 c x 0 1 d y c y 0 0 1 ] [ X ′ Y ′ 1 ] \begin{bmatrix} u\\ v\\ 1 \end{bmatrix}=\begin{bmatrix} \frac{1}{dx} & 0 & c_x\\ 0 & \frac{1}{dy} & c_y\\ 0 & 0 & 1 \end{bmatrix}\begin{bmatrix} X^{\prime}\\ Y^{\prime}\\ 1 \end{bmatrix} uv1 = dx1000dy10cxcy1 XY1
    通过如上两个矩阵乘法公式,可以得到:
    Z [ u v 1 ] = [ 1 d x 0 c x 0 1 d y c y 0 0 1 ] [ f 0 0 0 f 0 0 0 1 ] [ X Y Z ] = [ f x 0 c x 0 f y c y 0 0 1 ] [ X Y Z ] Z\begin{bmatrix} u\\ v\\ 1 \end{bmatrix}=\begin{bmatrix} \frac{1}{dx} & 0 & c_x\\ 0 & \frac{1}{dy} & c_y\\ 0 & 0 & 1 \end{bmatrix}\begin{bmatrix} f & 0 & 0\\ 0 & f & 0\\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} X\\ Y\\ Z \end{bmatrix}=\begin{bmatrix} f_x & 0 & c_x\\ 0 & f_y & c_y\\ 0 & 0 & 1 \end{bmatrix}\begin{bmatrix} X\\ Y\\ Z \end{bmatrix} Z uv1 = dx1000dy10cxcy1 f000f0001 XYZ = fx000fy0cxcy1 XYZ

以上涉及到相机的内参参数和外参参数。
1)内参: f x f_x fx f y f_y fy c x c_x cx c y c_y cy
2)外参: R R R t t t

1.2、畸变模型

为了获得好的成像效果,相机前方加了透镜。透镜的加人会对成像过程中光线的传播产生新的影响:
1)透镜自身的形状对光线传播的影响;
2)在机械组装过程中,透镜和成像平面不可能完全平行,这也会使光线穿过透镜投影到成像面时的位置发生变化。

  • 径向畸变
    由透镜形状引起的畸变(Distortion,也叫失真)称为径向畸变。它们主要分为两大类,桶形畸变和枕形畸变,如图5-3所示。
    在这里插入图片描述
    对于径向畸变,成像光学中心的畸变为0,随着向边缘移动,畸变会变大。但实际上,这种畸变很小,用 r = 0 r=0 r=0附近的泰勒级数展开的前几项来描述。
    1)廉价网络相机,通常取前两项 k 1 , k 2 k_1, k_2 k1,k2
    2)畸变很大的相机,比如鱼眼透镜,加入第三个径向畸变项 k 3 k_3 k3
    那么,成像装置上某点的径向位置可根据以下泰勒展示调整:
    { x d i s t o r t e d = x ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) y d i s t o r t e d = y ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) \begin{cases} x_{distorted} = x(1+k_1r^2+k_2r^4+k_3r^6) \\ y_{distorted} = y(1+k_1r^2+k_2r^4+k_3r^6) \end{cases} {xdistorted=x(1+k1r2+k2r4+k3r6)ydistorted=y(1+k1r2+k2r4+k3r6)
    其中(x,y)是成像装置上畸变点的原始位置; ( x d i s t o r t e d , y d i s t o r t e d ) (x_{distorted},y_{distorted}) (xdistorted,ydistorted)是矫正后的新位置。

  • 切向畸变
    相机组装过程中,不能使透镜和成像平面平行,导致产生切向畸变。
    在这里插入图片描述
    切向畸变可以用两个额外的参数 p 1 p_1 p1 p 2 p_2 p2来表示;则:
    { x d i s t o r t e d = x + [ 2 p 1 x y + p 2 ( r 2 + 2 x 2 ) ] y d i s t o r t e d = y + [ p 1 ( r 2 + 2 y 2 ) + 2 p 2 x y ] \begin{cases} x_{distorted} = x+[2p_1xy+p_2(r^2+2x^2)] \\ y_{distorted} = y+[p_1(r^2+2y^2)+2p_2xy] \end{cases} {xdistorted=x+[2p1xy+p2(r2+2x2)]ydistorted=y+[p1(r2+2y2)+2p2xy]

将径向畸变和切向畸变统一到一起,得到矫正后的位置坐标:
{ x d i s t o r 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 d i s t o r 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 ] \begin{cases} x_{distorted} = x(1+k_1r^2+k_2r^4+k_3r^6)+[2p_1xy+p_2(r^2+2x^2)] \\ y_{distorted} = y(1+k_1r^2+k_2r^4+k_3r^6)+[p_1(r^2+2y^2)+2p_2xy] \end{cases} {xdistorted=x(1+k1r2+k2r4+k3r6)+[2p1xy+p2(r2+2x2)]ydistorted=y(1+k1r2+k2r4+k3r6)+[p1(r2+2y2)+2p2xy]

最后,通过相机内参,得到正确的位置坐标:

{ u = f x x d i s t o r t e d + c x v = f y y d i s t o r t e d + c y \begin{cases} u= f_xx_{distorted} + c_x\\ v= f_yy_{distorted} + c_y\end{cases} {u=fxxdistorted+cxv=fyydistorted+cy
以上畸变模型,涉及到的未知参数为: k 1 k_1 k1 k 2 k_2 k2 k 3 k_3 k3 p 1 p_1 p1 p 2 p_2 p2

2、标定

对于第一部分未知的相机内参 f x f_x fx f y f_y fy c x c_x cx c y c_y cy和畸变内参 k 1 k_1 k1 k 2 k_2 k2 k 3 k_3 k3 p 1 p_1 p1 p 2 p_2 p2;通过标定来实现对这些参数的计算。

  • 获取视频流frame,新增一个灰度值gray为frame的灰度数据;
  • 用gray找到棋盘角点findChessboardCorners;
  • (可选)棋盘格上的压像素点cornerSubPix();
  • 用frame绘制棋盘角点drawChessboardCorners();
  • 标定函数calibrateCamera();

2.1、旋转矩阵和平移向量

  • 三个角度 θ \theta θ ϕ \phi ϕ ψ \psi ψ表示三维旋转
  • 三个参数 x x x y y y z z z表示三维平移

相机内参 加上 旋转平移参数,对于每个视场,需要10个参数。每个视场固定8个参数因为不同视角下旋转和平移的6个参数会变化,对每一个视角用来求解摄像机内参数矩阵的两个额外参数需要约束。因此求解全部几何参数至少需要两个视角

2.2、棋盘

可以用作标定的标定板图案,有棋盘格、圆网格、随机图案、ArUco或者ChArUco图案。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3、各接口

2.3.1、找到棋盘角点findChessboardCorners

在这里插入图片描述
image:输入8bit灰度图数据
patternSize:棋盘每行和每列有多少角点,例如cv::Size(cols, rows),此值是内角点数,比如有8x8个 正方形格子,那么此处的内角点数为7*7
corners:这个接口的输出值,记录角点位置的输出矩阵,用像素坐标来表示角点位置的每个值。

2.3.2、棋盘上的亚像素角点cornerSubPix()

为了获得更准确的结果。

CV_EXPORTS_W void cornerSubPix( InputArray image, InputOutputArray corners,
                                Size winSize, Size zeroZone,
                                TermCriteria criteria );
  • image:8bit的灰度图数据
  • corners:作为输入,是findChessboardCorners接口的输出的结果;作为输出,是经过此亚像素定位接口,精确计算后的角点结果。
  • winSize:Half of the side length of the search window. For example, if winSize=Size(5,5) ,then a ( 5 ∗ 2 + 1 ) × ( 5 ∗ 2 + 1 ) = 11 × 11 (5*2+1) \times (5*2+1) = 11 \times 11 (52+1)×(52+1)=11×11 search window is used.
  • zeroZone:Half of the size of the dead region in the middle of the search zone over which the summation in the formula below is not done. It is used sometimes to avoid possible singularities of the autocorrelation matrix. The value of (-1,-1) indicates that there is no such a size.
  • criteria:Criteria for termination of the iterative process of corner refinement. That is,the process of corner position refinement stops either after criteria.maxCount iterations or when the corner position moves by less than criteria.epsilon on some iteration.

例子:

bool CalibProcessor::detectAndParseChessboard(const cv::Mat &frame)
{
    int chessBoardFlags = cv::CALIB_CB_ADAPTIVE_THRESH | cv::CALIB_CB_NORMALIZE_IMAGE | cv::CALIB_CB_FAST_CHECK;
    bool isTemplateFound = cv::findChessboardCorners(frame, mBoardSize, mCurrentImagePoints, chessBoardFlags);

    if (isTemplateFound) {
        cv::Mat viewGray;
        cv::cvtColor(frame, viewGray, cv::COLOR_BGR2GRAY);
        cv::cornerSubPix(viewGray, mCurrentImagePoints, cv::Size(11,11),
            cv::Size(-1,-1), cv::TermCriteria( cv::TermCriteria::EPS+cv::TermCriteria::COUNT, 30, 0.1 ));
        cv::drawChessboardCorners(frame, mBoardSize, cv::Mat(mCurrentImagePoints), isTemplateFound);
        mTemplateLocations.insert(mTemplateLocations.begin(), mCurrentImagePoints[0]);
    }
    return isTemplateFound;
}

2.3.3、绘制棋盘角点drawChessboardCorners()

将findChessboardCorners()找到的角点绘制到彩色图像上。如果整个图案上的角点都找到,那么点将被绘制成不同的颜色(每一行都将有自己的颜色)。
在这里插入图片描述
image:8bit彩色图像数据
patternSize:参照findChessboardCorners()接口的说明
corners:findChessboardCorners接口的输出
patternWasFound:是否整个棋盘图案上的角点都被成功找到,findChessboardCorners返回值。

2.3.4、calibrateCamera()标定函数

这个接口可以得到相机内参矩阵,畸变系数、旋转向量和平移向量;最后返回一个double值,是标定结果的精度误差值(重投影误差)与projectPoints()方法结果一致【参见第三章节《3、标定结果评价》】。
在这里插入图片描述

  • objectPoints:向量的向量,每个向量包含特定图像的标定图案上的点得坐标。它是一个Nx3的矩阵,包含物体的每K个点在每M个图像上的物理坐标(即 N = K ∗ M N=K * M N=KM)。在使用棋盘格场合,定义坐标系使得所有棋盘上的点得 z z z坐标值为0,x和y坐标用其他单位度量。最简单的方式,定义棋盘的每个方块作为一个单位,假设 S w i d t h S_{width} Swidth S h e i g h t S_{height} Sheight分别为棋盘宽度和高度方向的方块个数;则
    ( x , y , z ) = ( 0 , 0 , 0 ) , ( 1 , 0 , 0 ) ( 2 , 0 , 0 ) , . . . ( 0 , 1 , 0 ) , ( 1 , 1 , 0 ) , . . . ( S w i d t h − 1 , S h e i g h t − 1 , 0 ) (x,y,z)=(0,0,0),(1,0,0)(2,0,0),...(0,1,0),(1,1,0),...(S_{width}-1,S_{height}-1,0) (x,y,z)=(0,0,0),(1,0,0)(2,0,0),...(0,1,0),(1,1,0),...(Swidth1,Sheight1,0)
    此为每个图像上的K个点得坐标。如果为M个图像,则继续push back即可。
  • imagePoints:向量的向量Nx2矩阵,包含每个图像中找到的每个点的位置。在棋盘格场合,此变量值由M次(即M个视图)调用findChessboardCorners()的返回值构成。push back(corners)
  • imageSize:原图像的大小
  • cameraMatrix:返回的相机内参矩阵
  • distCoeffs:返回畸变系数,可以是4,5或者8个元素。若长度为4,则畸变系数有 k 1 , k 2 , p 1 , p 2 k_1,k_2,p_1,p_2 k1,k2,p1,p2;若长度为5,则畸变系数比长度是4的多一个 k 3 k_3 k3(此通常仅适用于鱼眼透镜);同理,若长度为8,则畸变系数多 k 4 , k 5 , k 6 k_4,k_5,k_6 k4,k5,k6场景:非常高精度的特殊透镜校准;且设置CALIB_RATIONAL_MODEL)。
  • rvecs:每个棋盘的旋转矩阵
  • tvecs:每个棋盘的平移矩阵

2.3.5、solvePnP()计算外参数

某种情况下,我们只知道了相机内参,需要单独计算相机外参(正在观察的对象的位置);此工作可以通过PnP问题进行求解,opencv给出了答案:

CV_EXPORTS_W bool solvePnP( InputArray objectPoints, InputArray imagePoints,
                            InputArray cameraMatrix, InputArray distCoeffs,
                            OutputArray rvec, OutputArray tvec,
                            bool useExtrinsicGuess = false, int flags = SOLVEPNP_ITERATIVE );     
  • objectPoints
  • imagePoints
  • cameraMatrix
  • distCoeffs
  • rvec
  • tvec
  • useExtrinsicGuess
  • flags

3、标定结果评价

通过摄像机内外参数,对空间的三维点进行重新投影计算,得到空间三维点在图像上新的投影点的坐标,计算投影坐标和亚像素角点坐标之间的偏差,单位是像素。

CV_EXPORTS_W void projectPoints( InputArray objectPoints,
                                 InputArray rvec, InputArray tvec,
                                 InputArray cameraMatrix, InputArray distCoeffs,
                                 OutputArray imagePoints,
                                 OutputArray jacobian=noArray(),
                                 double aspectRatio=0 );
  • objectPoints:每个视图下标定图案上的点的坐标;即calibrateCamera()标定接口参数objectPoints的objectPoints[i];
  • rvec:标定接口calibrateCamera()计算出来的每张视图的旋转矩阵;
  • tvec:标定接口calibrateCamera()计算出来的每张视图的平移矩阵;
  • cameraMatrix:标定接口calibrateCamera()计算出来的内参矩阵;
  • distCoeffs:标定接口calibrateCamera()计算出来的畸变系数;
  • imagePoints:本投影接口计算得到的投影点坐标;
  • jacobian:(可选)jacobian matrix of derivatives of image points;
  • aspectRatio:(可选)“fixed aspect ratio” parameter. If the parameter is not 0, the function assumes that the aspect ratio f x / f y fx/fy fx/fy is fixed and correspondingly adjusts the jacobian matrix。

例子:

        vector<Point2f> imagePoints2;
		int i, totalPoints = 0;
		double totalErr = 0, err;
		for (int i ; i < (int)objectPointsList.size(); i++)
		{
			projectPoints(Mat(objectPointsList[i]), rvecs[i],  tvecs[i],
				cameraMatrix, distCoeffs, imagePoints2);
			err = norm(Mat(imagePointsList[i]), Mat(imagePoints2), NORM_L2);
			int n = (int)objectPointsList[i].size();
			totalErr += err * err;
			totalPoints += n;
		}
		double error = std::sqrt(totalErr / totalPoints);
		cout << "error: " << error << endl;

4、标定误差

4.1、介绍

误差是衡量标定效果的重要指标,一般指标定点在图像上的投影位置和实际位置之间的差距。误差越大,标定结果越不准确。
误差主要受到两个因素的影响:一是畸变,二是标定参数的准确度。畸变是相机镜头成像时的一种误差,会导致图像中物体的实际形状和大小与其在图像中的形状和大小不一致。而标定参数的准确度则决定了计算图像中物体真实坐标的准确度。

  • 常见值
    比较常见的误差在0.5到1像素之间。

4.2、影响误差的因素

常见的因素如下:

  1. 标定图像质量:标定图像质量越好,误差就越小。标定图像应该视角平直、光照均匀、分辨率高,标定点位置清晰明确。
  2. 标定板大小:标定板越大,误差也就越大。因为较大的标定板会使相机成像时出现更多的畸变,从而影响标定结果。一般来说,标定板大小应该根据相机视角和距离来进行选择。
  3. 相机镜头型号:不同品牌、型号的相机镜头误差范围也有所不同。因此,在进行标定前要了解相机的镜头型号和特点,并根据实际情况进行调整。
  4. 标定板和相机的相对位置:标定板和相机的相对位置也会影响标定结果。如果标定板和相机的距离太近或者太远,都会导致误差范围增大。

4.3、误差优化

  1. 提高标定图像质量:保证标定图像视角平直、光照均匀、分辨率高,标定点位置清晰明确。
  2. 选择合适的标定板大小:根据相机视角和距离选择标定板大小,并保证标定板与相机的相对位置合理。
  3. 根据相机镜头进行调整:了解相机镜头的型号和特点,进行调整。
  4. 重复标定:如果在第一次标定中误差范围较大,可以尝试多次标定,取平均值作为最终结果。
  5. 不同的视角和角度拍摄图像:这些角度之间的差异尽可能大(所有三个欧拉角都应该变化),但这样图案直径仍然适合相机的视野。你使用的视图越多,校准效果就越好。这是必要的,因为在校准过程中要检测焦距和畸变参数,因此通过最小二乘法获得它们需要不同的角度。如果你不移动相机,你就不会得到新的信息,校准是无用的。捕获正面平行图像视图和与板倾斜到+/- 45度在水平和垂直方向拍摄的图像。避免过度倾斜,因为它可能会影响特征定位的准确性。
  6. 适当的照明:强烈建议使用调节的摄影照明均匀地照亮校准目标。使用强烈的点光源会造成不规则的照明,导致检测失败和相机动态范围的不良利用。阴影也会产生同样的不良效果。
  7. 足够数量的不同角度视角的拍摄图像:理想情况下,应该使用至少六个校准目标的实例(观察(图像))。

总之,进行摄像机标定时,需要注意以上几个方面,通过合理的调整,可以使误差范围得到有效控制,获得更加准确的结果。

### 回答1: 《视觉SLAM十四》第三章主要介绍了视觉SLAM中的关键技术——特征提取和描述子。本章首先介绍了特征点的概念和特征点的选择原则。特征点即图像中具有鲁棒性和区分度的点,可以通过对其进行检测和描述来进行特征匹配和跟踪。在进行特征提取时,作者介绍了常见的特征检测算法,如Harris角点检测、SIFT和SURF算法等,并对其进行了比较和分析。 接着,本章详细阐述了特征描述子的概念和作用。特征描述子是对特征点周围区域的图像信息进行编码,以实现特征匹配和跟踪。常见的特征描述子包括SIFT、SURF和ORB等。作者从描述子的表示形式、计算方式和匹配方法等方面进行了介绍,并对它们进行了比较和评价。同时,还提到了基于二进制描述子的方法,如BRIEF、BRISK和FREAK等。 在特征匹配方面,本章介绍了特征描述子匹配的基本原理和流程。以基于特征点的视觉SLAM为例,作者详细解释了特征点的匹配过程,包括特征点的选择、特征点描述子匹配和筛选等步骤。并介绍了如何通过验证特征点的三角化和PnP求解来估计相机的位姿。 此外,本章还介绍了一些特定场景下的特征点选择和提取策略,如动态环境下的特征点追踪和关键帧选择等。 综上所述,《视觉SLAM十四》第三章主要介绍了特征提取和描述子在视觉SLAM中的重要性和应用。通过对特征点的检测和描述,可以实现特征匹配和跟踪,为后续的相机位姿估计和建图提供基础。该章内容详细且通俗易懂,对于学习和理解视觉SLAM有着重要的指导作用。 ### 回答2: 《视觉SLAM十四-Ch3》主要介绍了视觉SLAM(同时定位与建图)技术的基本原理和实现方法。本章主要涵盖了三维几何表示和变换、相机模型和相机姿态以及特征提取与匹配等内容。 首先,本章介绍了三维几何表示和变换的概念。通过介绍欧氏空间中的点、向量和坐标变换,深入解释了相机在三维空间中的位置和朝向的表示方式。同时,引入了齐次坐标和投影矩阵的概念,为后续的相机模型和姿态估计打下了基础。 其次,本章详细解了相机模型和相机姿态的原理与应用。其中,介绍了针孔相机模型,分析了图像坐标和相机坐标之间的映射关系。通过投影矩阵的推导,给出了透视投影和仿射投影的公式,并解释了相机焦距和主点的含义。此外,还介绍了如何通过计算相机的外参矩阵来估计相机的姿态,以及如何将图像坐标转换为相机坐标。 最后,本章介绍了特征提取与匹配的技术。首先,介绍了角点和边缘点的概念,以及如何利用差分和梯度计算来检测图像中的角点和边缘点。然后,介绍了如何通过特征描述符来表示图像中的特征点,并通过特征匹配算法找到两幅图像之间的对应关系。特征提取与匹配是视觉SLAM中非常重要的步骤,对于后续的相机定位和建图至关重要。 综上所述,《视觉SLAM十四-Ch3》通过系统地介绍了视觉SLAM技术的基本概念和实现方法,包括三维几何表示和变换、相机模型和相机姿态的原理与应用,以及特征提取与匹配的技术。这些内容为读者深入理解和掌握SLAM技术提供了很好的基础。 ### 回答3: 视觉SLAM(Simultaneous Localization and Mapping)是一种通过计算机视觉技术,实现机器智能的同时实时定位和地图构建的方法。在《视觉SLAM十四》第三中,主要介绍了视觉SLAM的基本概念和关键技术。 首先,解了视觉SLAM的理论基础,包括自我运动估计和地图构建两个部分。自我运动估计是通过相邻帧之间的视觉信息,计算相机在三维空间中的运动,从而实现机器的实时定位;地图构建是通过对场景中特征点的观测和跟踪,建立起一个三维空间中的地图。这两个过程相互影响,通过不断迭代优化,实现高精度的定位和地图构建。 接着,解了基于特征的视觉SLAM算法。特征提取与描述是建立视觉SLAM系统的关键步骤,通过提取场景中的特征点,并为其生成描述子,来实现特征点的匹配和跟踪。同时,还介绍了一些常用的特征点提取和匹配算法,如FAST、SIFT等。 在SLAM框架方面,本节还介绍了基于视觉的前端和后端优化。前端主要负责实时的特征跟踪和估计相机运动,后端则是通过优化技术,对前端输出的轨迹和地图进行优化求解,从而提高系统的精度和鲁棒性。 最后,本节提到了几个视觉SLAM的应用场景,如自主导航、增强现实等。这些应用对于实时高精度的定位和地图建立都有着很高的要求,因此,视觉SLAM的技术在这些领域有着广泛的应用前景。 总的来说,《视觉SLAM十四》第三对视觉SLAM的基本概念和关键技术进行了系统的介绍。理论基础、特征提取与描述、SLAM框架和应用场景等方面的内容都给出了详细的解释和案例,有助于读者更好地理解和应用视觉SLAM技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值