当前位置: 首页 > news >正文

激光雷达点云投影到图像平面

在这里插入图片描述

将激光雷达点云投影到图像平面涉及几何变换和相机模型的应用。以下是该过程的基本原理:

1. 坐标系转换

激光雷达生成的点云通常位于激光雷达的坐标系中,而图像则在相机坐标系中。为了将点云投影到图像上,首先需要将点云从激光雷达坐标系转换到相机坐标系。
假设激光雷达坐标系中的一个点表示为
[ X lidar , Y lidar , Z lidar ] [X_{\text{lidar}}, Y_{\text{lidar}}, Z_{\text{lidar}}] [Xlidar,Ylidar,Zlidar]
,我们使用一个外参矩阵 (T)(通常是一个4x4的齐次变换矩阵),将其转换到相机坐标系:
[ X cam Y cam Z cam 1 ] = T ⋅ [ X lidar Y lidar Z lidar 1 ] \begin{bmatrix} X_{\text{cam}} \\ Y_{\text{cam}} \\ Z_{\text{cam}} \\ 1 \end{bmatrix} =T \cdot \begin{bmatrix} X_{\text{lidar}} \\ Y_{\text{lidar}} \\ Z_{\text{lidar}} \\ 1 \end{bmatrix} XcamYcamZcam1 =T XlidarYlidarZlidar1
其中,(T) 包含了旋转和平移的信息。

2. 相机投影模型

在得到相机坐标系下的点云坐标 [ X cam , Y cam , Z cam ] [X_{\text{cam}}, Y_{\text{cam}}, Z_{\text{cam}}] [Xcam,Ycam,Zcam]后,下一步是将这些三维坐标投影到二维图像平面。相机投影通常使用针孔相机模型,其基本公式如下:
[ u v ] = 1 Z cam [ f x 0 c x 0 f y c y ] ⋅ [ X cam Y cam Z cam ] \begin{bmatrix} u \\ v \end{bmatrix} =\frac{1}{Z_{\text{cam}}} \begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \end{bmatrix} \cdot \begin{bmatrix} X_{\text{cam}} \\ Y_{\text{cam}} \\ Z_{\text{cam}} \end{bmatrix} [uv]=Zcam1[fx00fycxcy] XcamYcamZcam
其中:

  • (u) 和 (v) 是图像平面上的像素坐标。
  • (f_x) 和 (f_y) 是相机的焦距(在像素单位下)。
  • (c_x) 和 (c_y) 是图像中心的坐标(主点)。
    相机针孔模型

3. 应用畸变校正(如果有)

相机镜头的畸变会导致投影后的点出现偏差,因此通常会应用畸变校正。常见的畸变包括径向畸变和切向畸变,可以通过预先计算的畸变系数来校正。

4. 点云到图像的映射

通过上述步骤,每个激光雷达点都可以在图像平面上找到一个对应的像素坐标 ((u, v))。这些像素坐标表示激光雷达点在图像中的投影位置。

在相机模型中, ( c_x ) 和 ( c_y ) 通常表示图像平面上的主点(principal point)的坐标。主点是相机光学中心在图像平面上的投影点,它通常接近图像的几何中心,但在实际相机中可能会有一些偏移。

详细解释:

  • 主点 ( c_x, c_y ):这是图像平面上光轴与平面的交点的坐标,也称为光学中心。它通常由相机的内参矩阵(Intrinsic Matrix)中的两个参数表示。

  • 相机内参矩阵:在相机标定过程中,我们可以得到一个 3x3 的内参矩阵,它的形式如下:
    K = ( f x 0 c x 0 f y c y 0 0 1 ) K = \begin{pmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{pmatrix} K= fx000fy0cxcy1
    其中:

    • f_x, f_y 是相机在 x 和 y 方向的焦距,通常与相机的焦距和像素大小相关。
    • c_x, c_y 是主点的坐标。
http://www.lryc.cn/news/427233.html

相关文章:

  • [python]将anaconda默认创建环境python版本设置为32位的
  • Jmeter+Influxdb+Grafana平台监控性能测试过程(三种方式)
  • [创业之路-135] :ERP、PDM、EDM、Git各种的用途和区别,硬件型初创公司需要哪些管理工具?
  • 通过剪枝与知识蒸馏优化大型语言模型:NVIDIA在Llama 3.1模型上的实践与创新
  • DOM型xss靶场实验
  • 华为---端口隔离简介和示例配置
  • Android 架构模式之 MVC
  • 节点使用简介:comfyui-photoshop
  • 使用Go语言将PDF文件转换为Base64编码
  • XSS Game
  • ???牛客周赛55:虫洞操纵者
  • Unity3D开发之OnCollisionXXX触发条件
  • spfa()算法(求最短路)
  • 聊聊国产数据库的生态系统建设
  • JDK源码解析:LinkedList
  • drawio的问题
  • 零基础学习Redis(3) -- Redis常用命令
  • 响应式Web设计:纯HTML和CSS的实现技巧-1
  • FrereRTOS事件组
  • 【经典算法】BFS_最短路问题
  • 【题目/训练】:双指针
  • LLVM - 编译器后端-指令选择
  • ES+FileBeat+Kibana日志采集搭建体验
  • Dockerfile常用指令详解
  • 【vue】浏览器兼容相关
  • 【区块链+金融服务】基于区块链的区域股权金融综合服务平台 | FISCO BCOS应用案例
  • string字符串和json对象相互转换问题
  • 【生成式人工智能-十一一个不修改模型就能加速语言模型生成的方法】
  • Rust 错误处理
  • 程序与进程 linux系统