【第5话:相机模型1】针孔相机、鱼眼相机模型的介绍及其在自动驾驶中的作用及使用方法

相机模型介绍及相机模型在自动驾驶中的作用及使用方法

相机模型是计算机视觉中的核心概念,用于描述真实世界中的点如何投影到图像平面上。在自动驾驶系统中,相机模型用于环境感知,如物体检测和场景理解。下面我将详细介绍针孔相机模型和鱼眼相机模型,然后讨论它们在自动驾驶中的作用及使用方法。
在这里插入图片描述

1. 针孔相机模型

针孔相机模型是最基本的相机模型,基于小孔成像原理。它假设光线通过一个无限小的孔(针孔)投影到成像平面上,形成倒立的图像。这种模型忽略了镜头畸变,适用于理想化场景。

原理

  • 光线从场景中的点通过针孔投射到像平面。
  • 投影过程是线性的,使用透视投影方程描述。
  • 数学模型涉及齐次坐标和投影矩阵。

数学模型

  • 设世界坐标系中的点为 P=[X,Y,Z,1]⊤\mathbf{P} = [X, Y, Z, 1]^\topP=[X,Y,Z,1](齐次坐标),相机坐标系中的点为 p=[x,y,z]⊤\mathbf{p} = [x, y, z]^\topp=[x,y,z]
  • 透视投影方程:
    p=1ZKP \mathbf{p} = \frac{1}{Z} \mathbf{K} \mathbf{P} p=Z1KP
    其中 K\mathbf{K}K 是相机内参矩阵:
    K=[fx0cx0fycy001] \mathbf{K} = \begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix} K=fx000fy0cxcy1
    这里 fxf_xfxfyf_yfy 是焦距(以像素为单位),cxc_xcxcyc_ycy 是主点坐标(图像中心)。
  • 图像坐标 (u,v)(u, v)(u,v) 计算为:
    u=fxXZ+cx,v=fyYZ+cy u = \frac{f_x X}{Z} + c_x, \quad v = \frac{f_y Y}{Z} + c_y u=ZfxX+cx,v=ZfyY+cy
    这表示 uuuvvv 是归一化后的坐标。

优点和缺点

  • 优点:模型简单,计算高效,适用于大多数标准相机和算法。
  • 缺点:视野有限(通常小于90度),忽略镜头畸变,导致在广角场景中失真严重。
2. 鱼眼相机模型

鱼眼相机模型是一种广角相机模型,专为捕捉大视野(通常180度或更大)设计。它使用非线性投影来处理镜头畸变,常见于车载相机或监控系统。鱼眼镜头会产生桶形畸变,需要通过数学模型校正。

原理

  • 光线通过鱼眼镜头投射,产生径向畸变(图像边缘弯曲)。
  • 投影模型基于角度映射,如等距投影或等立体投影。
  • 数学模型包括畸变参数来校正图像。

数学模型

  • 设归一化图像坐标为 (x,y)(x, y)(x,y),实际畸变坐标为 (xd,yd)(x_d, y_d)(xd,yd)
  • 径向畸变模型:
    r=x2+y2 r = \sqrt{x^2 + y^2} r=x2+y2
    rd=r(1+k1r2+k2r4+k3r6+⋯ ) r_d = r (1 + k_1 r^2 + k_2 r^4 + k_3 r^6 + \cdots) rd=r(1+k1r2+k2r4+k3r6+)
    其中 k1,k2,k3k_1, k_2, k_3k1,k2,k3 是畸变系数。
  • 畸变坐标计算为:
    xd=xrdr,yd=yrdr x_d = x \frac{r_d}{r}, \quad y_d = y \frac{r_d}{r} xd=xrrd,yd=yrrd
  • 最终图像坐标 (ud,vd)(u_d, v_d)(ud,vd) 通过内参矩阵映射:
    [udvd1]=K[xdyd1] \begin{bmatrix} u_d \\ v_d \\ 1 \end{bmatrix} = \mathbf{K} \begin{bmatrix} x_d \\ y_d \\ 1 \end{bmatrix} udvd1=Kxdyd1
    这里 K\mathbf{K}K 与针孔模型相同。

优点和缺点

  • 优点:视野广阔(可达180度以上),适合捕捉大范围场景。
  • 缺点:畸变严重,需要复杂的校正算法,计算开销较大。
相机模型在自动驾驶中的作用

在自动驾驶系统中,相机模型是环境感知的关键组件,主要用于:

  • 环境感知:检测车辆、行人、交通标志和车道线。例如,使用针孔模型进行精确对象定位,鱼眼模型提供全景视野以覆盖盲区。
  • 场景理解:结合深度学习模型(如YOLO或SSD)进行语义分割,识别道路结构和障碍物。
  • 传感器融合:与激光雷达、雷达和IMU数据融合,提高感知鲁棒性。相机提供丰富的纹理信息,而其他传感器补充深度和运动数据。
  • 定位与导航:基于视觉的SLAM(Simultaneous Localization and Mapping)使用相机模型构建环境地图并估计车辆位置。

总体作用:提升自动驾驶的安全性和可靠性,通过实时图像处理实现决策支持。

相机模型在自动驾驶中的使用方法

在自动驾驶应用中,相机模型的使用涉及以下步骤:

  1. 相机标定

    • 目的:确定相机内参(如焦距 fx,fyf_x, f_yfx,fy、主点 cx,cyc_x, c_ycx,cy)和畸变系数(如 k1,k2k_1, k_2k1,k2)。
    • 方法:使用标定板(如棋盘格)采集多张图像,通过优化算法(如OpenCV的 calibrateCamera 函数)求解参数。例如,针孔模型标定最小化重投影误差,鱼眼模型额外优化畸变系数。
    • 工具:常用OpenCV库实现。代码示例(Python):
      import cv2
      import numpy as np# 加载标定图像
      images = [cv2.imread(f'image_{i}.jpg') for i in range(10)]
      obj_points = []  # 3D点
      img_points = []  # 2D点# 定义棋盘格尺寸
      pattern_size = (9, 6)
      obj_p = np.zeros((pattern_size[0]*pattern_size[1], 3), np.float32)
      obj_p[:, :2] = np.mgrid[0:pattern_size[0], 0:pattern_size[1]].T.reshape(-1, 2)for img in images:gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)ret, corners = cv2.findChessboardCorners(gray, pattern_size, None)if ret:obj_points.append(obj_p)img_points.append(corners)# 标定相机(针孔模型)
      ret, K, dist, rvecs, tvecs = cv2.calibrateCamera(obj_points, img_points, gray.shape[::-1], None, None)
      # 对于鱼眼模型,使用 cv2.fisheye.calibrate
      
  2. 畸变校正

    • 目的:消除鱼眼畸变,使图像符合针孔模型,便于后续处理。
    • 方法:应用标定得到的参数进行图像变换。针孔模型通常不需要校正,鱼眼模型使用逆畸变映射。
    • 工具:OpenCV的 undistort 函数。代码示例:
      # 针孔模型校正(可选)
      undistorted_img = cv2.undistort(img, K, dist)
      # 鱼眼模型校正
      map1, map2 = cv2.fisheye.initUndistortRectifyMap(K, dist, np.eye(3), K, img.shape[:2], cv2.CV_16SC2)
      undistorted_img = cv2.remap(img, map1, map2, cv2.INTER_LINEAR)
      
  3. 图像处理与感知任务

    • 物体检测:使用校正后的图像输入到神经网络(如CNN)中。例如,YOLO模型检测车辆和行人。
    • 特征提取:提取车道线或边缘特征,结合相机模型计算真实世界坐标。例如,从图像坐标 (u,v)(u, v)(u,v) 反投影到3D空间:
      [XYZ]=ZK−1[uv1] \begin{bmatrix} X \\ Y \\ Z \end{bmatrix} = Z \mathbf{K}^{-1} \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} XYZ=ZK1uv1
      其中 ZZZ 是估计的深度(来自其他传感器或立体视觉)。
    • 实时应用:在自动驾驶系统中,相机模型集成到感知模块,每秒处理多帧图像,输出给规划和控制模块。
  4. 系统集成

    • 多相机系统:自动驾驶车辆通常使用多个相机(如前视针孔相机、侧视鱼眼相机),覆盖360度视野。通过标定和融合,构建统一的环境模型。
    • 挑战与优化:处理动态光照、运动模糊和实时性要求。使用GPU加速和算法优化(如稀疏特征匹配)提高效率。
总结

针孔相机模型简单高效,适合标准视野场景;鱼眼相机模型提供广角覆盖,但需畸变校正。在自动驾驶中,它们通过标定、校正和感知任务实现环境理解。使用方法包括标定参数、校正图像和集成到感知系统。这些模型是自动驾驶视觉感知的基石,结合其他传感器可显著提升系统性能。未来发展方向包括更高效的畸变模型和深度学习融合技术。

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

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

相关文章

推荐一款优质的开源博客与内容管理系统

Halo是一款由Java Spring Boot打造的开源博客与内容管理系统(CMS),在 GitHub上拥有超过36K Start的活跃开发者社区。它使用GPL‑3.0授权开源,稳定性与可维护性极高。 Halo的设计简洁、注重性能,同时保持高度灵活性&a…

【GPT入门】第43课 使用LlamaFactory微调Llama3

【GPT入门】第43课 使用LlamaFactory微调Llama31.环境准备2. 下载基座模型3.LLaMA-Factory部署与启动4. 重新训练![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/e7aa869f8e2c4951a0983f0918e1b638.png)1.环境准备 采购autodl服务器,24G,GPU,型号3090&am…

计算机网络:如何理解目的网络不再是一个完整的分类网络

这一理解主要源于无分类域间路由(CIDR)技术的广泛应用,它打破了传统的基于类的IP地址分配方式。具体可从以下方面理解: 传统分类网络的局限性:在早期互联网中,IP地址被分为A、B、C等固定类别,每…

小米开源大模型 MiDashengLM-7B:不仅是“听懂”,更能“理解”声音

目录 前言 一、一枚“重磅炸弹”:开源,意味着一扇大门的敞开 二、揭秘MiDashengLM-7B:它究竟“神”在哪里? 2.1 “超级耳朵” 与 “智慧大脑” 的协作 2.2 突破:从 “听见文字” 到 “理解世界” 2.3 创新训练&a…

mysql出现大量redolog、undolog排查以及解决方案

排查步骤 监控日志增长情况 -- 查看InnoDB状态 SHOW ENGINE INNODB STATUS;-- 查看redo log配置和使用情况 SHOW VARIABLES LIKE innodb_log_file%; SHOW VARIABLES LIKE innodb_log_buffer_size;-- 查看undo log信息 SHOW VARIABLES LIKE innodb_undo%;检查长时间运行的事务 -…

华为网路设备学习-28(BGP协议 三)路由策略

目录: 一、BGP路由汇总1、注:使用network命令注入的BGP不会被自动汇总2、主类网络号计算过程如下:3.示例 开启BGP路由自动汇总bgp100 开启BGP路由自动汇总import-route 直连路由 11.1.1.0 /24对端 为 10.1.12.2 AS 2004.手动配置BGP路…

微信小程序中实现表单数据实时验证的方法

一、实时验证的基本实现思路表单实时时验证通过监听表单元素的输入事件,在用户输入过程中即时对数据进行校验,并并即时反馈验证结果,主要实现步骤包括:为每个表单字段绑定输入事件在事件处理函数中获取当前输入值应用验证规则进行…

openpnp - 顶部相机如果超过6.5米影响通讯质量,可以加USB3.0信号放大器延长线

文章目录openpnp - 顶部相机如果超过6.5米影响通讯质量,可以加USB3.0信号放大器延长线概述备注ENDopenpnp - 顶部相机如果超过6.5米影响通讯质量,可以加USB3.0信号放大器延长线 概述 手头有1080x720x60FPS的摄像头模组备件,换上后&#xff…

【驱动】RK3576-Debian系统使用ping报错:socket operation not permitted

1、问题描述 在RK3576-Debian系统中,连接了Wifi后,测试网络通断时,报错: ping www.csdn.net ping: socktype: SOCK_RAW ping: socket: Operation not permitted ping: => missing cap_net_raw+p capability or setuid?2、原因分析 2.1 分析打印日志 socktype: SOCK…

opencv:图像轮廓检测与轮廓近似(附代码)

目录 图像轮廓 cv2.findContours(img, mode, method) 绘制轮廓 轮廓特征与近似 轮廓特征 轮廓近似 轮廓近似原理 opencv 实现轮廓近似 轮廓外接矩形 轮廓外接圆 图像轮廓 cv2.findContours(img, mode, method) mode:轮廓检索模式(通常使用第四个模式&am…

mtrace定位内存泄漏问题(仅限 GNU glibc 的 Linux)

一、mtrace原理 函数拦截机制:mtrace 利用 glibc 的内部机制,对 malloc() / calloc() / realloc() / free() 等内存函数进行 hook,记录每一次分配和释放行为。日志记录:记录会写入 MALLOC_TRACE 环境变量指定的日志文件中&#xf…

高校合作 | 世冠科技联合普华、北邮项目入选教育部第二批工程案例

近日,教育部学位与研究生教育发展中心正式公布第二批工程案例立项名单。由北京世冠金洋科技发展有限公司牵头,联合普华基础软件、北京邮电大学共同申报的"基于国产软件栈的汽车嵌入式软件开发工程案例"成功入选。该项目由北京邮电大学修佳鹏副…

TOMCAT笔记

一、前置知识:Web 技术演进 C/S vs B/S – C/S:Socket 编程,QQ、迅雷等,通信层 TCP/UDP,协议私有。 – B/S:浏览器 HTTP,文本协议跨网络。 动态网页诞生 早期静态 HTML → 1990 年 HTTP 浏览…

上海一家机器人IPO核心零部件依赖外购, 募投计划频繁修改引疑

作者:Eric来源:IPO魔女8月8日,节卡机器人股份有限公司(简称“节卡股份”)将接受上交所科创板IPO上会审核。公司保荐机构为国泰海通证券股份有限公司,拟募集资金为6.76亿元。报告期内,节卡股份营…

Linux810 shell 条件判断 文件工具 ifelse

变量 条件判断 -ne 不等 $(id -u) -eq [codesamba ~]$ [ $(id -u) -ne 0 ] && echo "the user is not admin" the user is not admin [codesamba ~]$ [ $(id -u) -eq 0] && echo "yes admin" || echo "no not " -bash: [: 缺少 …

ChatGPT 5的编程能力宣传言过其实

2025年的8月7日,OpenAI 正式向全球揭开了GPT-5的神秘面纱,瞬间在 AI 领域乃至整个科技圈引发了轩然大波。OpenAI对GPT-5的宣传可谓不遗余力,将其描绘成一款具有颠覆性变革的 AI 产品,尤其在编程能力方面,给出了诸多令人…

从MySQL到大数据平台:基于Spark的离线分析实战指南

引言在当今数据驱动的商业环境中,企业业务数据通常存储在MySQL等关系型数据库中,但当数据量增长到千万级甚至更高时,直接在MySQL中进行复杂分析会导致性能瓶颈。本文将详细介绍如何将MySQL业务数据迁移到大数据平台,并通过Spark等…

Mysql笔记-存储过程与存储函数

1. 存储过程(Stored Procedure) 1.1 概述 1.1.1 定义: 存储过程是一组预编译的 SQL 语句和控制流语句(如条件判断、循环)的集合,​无返回值​(但可通过 OUT/INOUT 参数或结果集返回数据)。它支持参数传递、…

[论文阅读] 人工智能 + 软件工程 | LLM协作新突破:用多智能体强化学习实现高效协同——解析MAGRPO算法

LLM协作新突破:用多智能体强化学习实现高效协同——解析MAGRPO算法 论文:LLM Collaboration With Multi-Agent Reinforcement LearningarXiv:2508.04652 (cross-list from cs.AI) LLM Collaboration With Multi-Agent Reinforcement Learning Shuo Liu, …

使用OAK相机实现智能物料检测与ABB机械臂抓取

大家好!今天我们很高兴能与大家分享来自OAK的国外用户——Vention 的这段精彩视频,展示了他们的AI操作系统在现实中的应用——在演示中,进行实时的自动物料拣选。 OAK相机实时自动AI物料拣选视频中明显可以看到我们的OAK-D Pro PoE 3D边缘AI相…