三维重建-单目相机标定

本文详细介绍了单目相机的标定过程,包括SingleCamera类的解析,如compose()、svdP()、workIntrinsicAndExtrinsic()等函数的功能。文章通过理论与代码相结合的方式,阐述了如何构建P矩阵、求解相机姿态、推导相机内参和外参,并进行了参数自检。此外,还提供了CMake配置和运行指南。
摘要由CSDN通过智能技术生成

文章目录

文章目录

前言

一、代码讲解

1、SingleCamera

2、SingleCamera::compose()

3、SingleCamera::svdP()

4、SingleCamera::workIntrinsicAndExtrinsic()

5、SingleCamera::selfcheck

二、完整代码

三、 Cmake配置

总结


前言

        理论知识可以看北邮鲁鹏老师的课程,哔哩哔哩上有。


一、代码讲解

1、SingleCamera

class SingleCamera {
public:
    // 构造函数,初始化成员变量
    SingleCamera(Eigen::MatrixXf world_coor, Eigen::MatrixXf pixel_coor, int n)
            : world_coor(world_coor), pixel_coor(pixel_coor), point_num(n),
              P(Eigen::MatrixXf::Zero(2 * n, 12)), M(Eigen::MatrixXf::Zero(3, 4)),
              A(Eigen::MatrixXf::Zero(3, 3)), b(Eigen::MatrixXf::Zero(3, 1)),
              K(Eigen::MatrixXf::Zer
MATLAB 和 Python 都是广泛用于计算机视觉和图像处理的工具,其中相机标定是一个关键步骤,用于确定相机内参数(如焦距、像素大小等)和外参数(如相机中心和旋转矩阵),以便于后期进行三维重建或目标检测。 在 MATLAB 中,你可以使用 `cameraCalibrate` 函数来进行单目相机标定。这个函数会利用一组已知特征点(比如棋盘格)从图像中提取出来,然后计算相机参数。步骤大致包括: 1. **创建样本数据**:拍摄包含棋盘格图案的照片作为校准样本。 2. **特征检测**:在每个图像上运行特征检测算法,例如 Shi-Tomasi 或 SURF。 3. **匹配对应点**:基于特征点找到不同照片中的对应点。 4. **调用 calibration 函数**:输入对应的二维和三维点对,计算并保存相机参数。 在 Python 中,常用的库如 OpenCV 提供了丰富的相机标定功能。一个常见的做法是使用 `cv2.calibrateCamera` 函数,结合 `findChessboardCorners` 和 `goodFeaturesToTrack` 来完成: 1. **读取图像**:使用 `cv2.imread` 获取含有棋盘格的图片。 2. **角点检测**:`findChessboardCorners` 查找并标记棋盘格的角点。 3. **特征跟踪**:确认角点是否在不同帧间稳定。 4. **执行标定**:将所有帧的信息传递给 `calibrateCamera`,得到相机参数。 下面是简的步骤总结: - **导入所需库**:`import cv2, numpy as np` - **初始化参数**:`criteria`, `objpoints`, `imgpoints` - **遍历图像序列**:寻找棋盘格并记录其坐标 - **标定相机**:`ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, frame_size, None, None)` - **保存参数**:`np.savez('camera_params.npz', mtx=mtx, dist=dist)`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

点云兔子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值