相机参数与图像处理技术解析

01. 相机内参和外参的含义?如果将图像放大两倍,内外参如何变化?

  • 相机有两个最基础的数据:内参(Instrinsics)和外参(Extrinsics),内参主要描述的是相机的CCD/CMOS感光片尺寸/分辨率以及光学镜头的系数,外参主要描述的是相机在世界坐标系下的摆放位置和朝向角度。

  • 参考:https://zhuanlan.zhihu.com/p/646310465

  • 相机的内参和外参是用于描述相机如何捕捉三维世界并将其投影到二维图像平面上的参数。

    1. 内参(Intrinsic Parameters):

      • 内参是相机自身的属性,与场景无关。它包括焦距(focal length)、主点(principal point,图像中心的坐标)、畸变系数(distortion coefficients,描述镜头畸变如径向和切向畸变)等。

      • 焦距和图像传感器的尺寸共同决定了视场角(Field of View, FOV)。

      • 主点通常接近图像中心。

      • 内参矩阵一般形式为:
        [
        K = [ f x 0 c x 0 f y c y 0 0 1 ] K = \begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix} K= fx000fy0cxcy1
        ]
        其中 KaTeX parse error: Can't use function '\(' in math mode at position 1: \̲(̲f_x, f_y) 是焦距在图像平面上的x轴和y轴的比例,( c x , c y c_x, c_y cx,cy) 是主点的坐标。

    2. 外参(Extrinsic Parameters):

      • 外参描述的是相机相对于世界坐标系的位置和方向。它由旋转矩阵(Rotation matrix)和平移向量(Translation vector)组成,这些参数定义了从世界坐标系到相机坐标系的转换。

      • 外参矩阵通常表示为:
        KaTeX parse error: Undefined control sequence: \[ at position 2: \̲[̲ \begin{bmatrix…
        其中 ( R R R) 是一个3x3的旋转矩阵,( t t t) 是一个3x1的平移向量。

    如果将图像放大两倍,内外参的变化如下:

    • 内参变化:

      • 焦距 ( f x , f y f_x, f_y fx,fy) 通常不会改变,因为它是基于相机的物理属性。但是,图像坐标系的比例变化了,因此主点 KaTeX parse error: Can't use function '\(' in math mode at position 1: \̲(̲c_x, c_y) 需要调整以反映新的图像中心。如果原图中 KaTeX parse error: Can't use function '\(' in math mode at position 1: \̲(̲c_x, c_y) 是原点,放大后它们将变为原来的两倍。

      • 新的内参矩阵将是:
        [
        K ′ = [ f x 0 2 c x 0 f y 2 c y 0 0 1 ] K' = \begin{bmatrix} f_x & 0 & 2c_x \\ 0 & f_y & 2c_y \\ 0 & 0 & 1 \end{bmatrix} K= fx000fy02cx2cy1
        ]

    • 外参变化:

      • 外参(旋转矩阵和平移向量)不会因为图像尺寸的改变而改变,因为它们描述的是相机与世界坐标系之间的物理关系,与图像的尺寸无关。

    LSS(Lift, Splat, Shoot)

    https://github.com/nv-tlabs/lift-splat-shoot

    是一个用于三维环境感知和环境表示的视觉感知系统,主要应用于自动驾驶领域。这个方法是一种用于从二维图像直接构建三维环境表示的深度学习算法。它主要通过以下三个步骤来实现:

    1. Lift(提升):

      • 这一步涉及到将二维像素“提升”到三维空间中。算法使用从图像中提取的深度信息将每个像素点映射到一个三维点上。这种映射通常依赖于相机的内参和外参,通过这些参数,可以将二维图像坐标转换为三维世界坐标。
    2. Splat(喷洒):

      • 在“喷洒”步骤中,所提升的三维点被映射到一个离散的三维空间(通常是体素网格)中。这一步是一种数据结构转换,它把连续的三维点云转换为离散的体素表示,这种表示更适合用于随后的处理步骤如卷积神经网络。
    3. Shoot(射击):

      • 最后一步是“射击”,这里利用三维卷积神经网络处理提升和喷洒后的数据,从而提取用于任务的特征。例如,自动驾驶车辆可能需要识别和分类不同的道路用户(如行人、车辆)、道路标记和其他关键的环境特征。

    LSS方法的一个主要优势是它能够直接从图像数据中构建出三维场景的表示,这有助于自动驾驶系统更好地理解和导航其周围的环境。此外,它通过利用卷积神经网络,可以在保持高度准确性的同时实现高效的处理速度。这种方法在自动驾驶技术中具有重要的应用前景,尤其是在需要精确和实时的三维环境感知和决策支持的情况下。

02. 坐标系的变换

  • BEV训练数据集的世界坐标系, 比如nuScenes地图,它的世界坐标系是图片坐标系,原点在图片左下角,单位是米。数据集中会根据时间序列给出车辆的瞬时位置,也就是在这个图片上的XY。

  • BEV里,这个Ego是特指车辆本身,它是用来描述摄像机/激光雷达(Lidar,light detection and ranging)/毫米波雷达(一般代码里就简称为Radar)/IMU在车身上的安装位置(单位默认都是米)和朝向角度,坐标原点一般是车身中间,外参(Extrinsics Matrix)主要就是描述这个坐标系的。

  • 相机坐标系,坐标原点在CCD/CMOS感光片的中央,单位是像素,内参(Intrinsics Matrix)主要就是描述这个坐标系的。

  • 照片坐标系,坐标原点在图片的左上角,单位是像素,横纵坐标轴一般不写成XY,而是uv。

  • 照片中的像素位置转换到世界坐标系时,要经历:Image_to_Camera, Camera_to_Ego, Ego_to_World;Camera_to_Image通常就是Intrinsics参数矩阵,Ego_to_Camera就是Extrinsics参数矩阵。

03. 放射变换与逆投影变换分别是什么

  • 仿射变换: 仿射变换是一种线性变换,保持了直线的平行性和比例关系。它可以用于将一个二维平面上的点映射到另一个二维平面上。仿射变换可以通过一个矩阵乘法和一个平移向量来表示。它包括平移、旋转、缩放和剪切等操作。在计算机视觉领域,仿射变换常用于图像的平移、旋转、缩放和仿射校正等操作。

  • 逆投影变换: 逆投影变换是指通过相机内参和外参,将图像上的点投影到三维空间中的过程。它是相机成像过程的逆过程。逆投影变换可以用于将图像上的点转换为三维空间中的点坐标。逆投影变换的计算需要相机的内参矩阵、外参矩阵和图像上的点坐标。在计算机视觉和计算机图形学中,逆投影变换常用于三维重建、相机姿态估计和虚拟现实等应用。

import numpy as np
import cv2# 定义相机内参矩阵 K
K = np.array([[1000, 0, 500], [0, 1000, 300], [0, 0, 1]], dtype=np.float32)# 定义相机外参的旋转矩阵 R(在此为单位矩阵)
R = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]], dtype=np.float32)# 定义相机外参的平移向量 T
T = np.array([1, 2, 3], dtype=np.float32)# 定义图像上的点坐标 uv(二维点)
uv = np.array([[200, 300], [400, 500]], dtype=np.float32)# 计算 Rc2w * K 的逆矩阵
Rc2w_invK = np.linalg.inv(np.dot(R, K))# 将 uv 点扩展成齐次坐标,并进行逆投影变换
H = np.dot(Rc2w_invK, np.append(uv, np.ones((uv.shape[0], 1)), axis=1).T)# 计算世界坐标 Pxyz(假设深度为 T[2])
Pxyz = H * (T[2] / H[2]) - T[:2]# 定义仿射变换矩阵 M
M = np.array([[1, 0, 100], [0, 1, 50]], dtype=np.float32)# 加载图像(假设 image 是事先加载的图像)
# image = cv2.imread('path_to_your_image.jpg')  # 替换为实际图像路径# 进行仿射变换
# output = cv2.warpAffine(image, M, (image.shape[1], image.shape[0]))  # 假设 image 是加载的图像# 将每一步结果打印出来以进行验证(可选)
print("相机内参矩阵 K:\n", K)
print("旋转矩阵 R:\n", R)
print("平移向量 T:\n", T)
print("图像点坐标 uv:\n", uv)
print("逆 Rc2w * K:\n", Rc2w_invK)
print("齐次坐标 H:\n", H)
print("世界坐标 Pxyz:\n", Pxyz)
print("仿射变换矩阵 M:\n", M)

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

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

相关文章

每日两题 / 20. 有效的括号 155. 最小栈(LeetCode热题100)

20. 有效的括号 - 力扣(LeetCode) 遇到左括号入栈 遇到右括号判断栈顶是否为匹配的左括号 最后判断栈是否为空 func isValid(s string) bool {var stk []runefor _, value : range s {if value ( || value { || value [ {stk append(stk, value)}…

阿里巴巴图标库iconfont的使用方式

文章目录 什么是 iconfong创建一个自己的项目如何使用Unicode 使用方法Font class 使用方式Symbol 使用方式还有一种使用方式 在线链接(不推荐,但可用于测试) 什么是 iconfong Iconfont 是一种图标字体服务。它将各种图标设计转换为字体格式…

数据库的约束与索引

数据库的约束与索引 文章目录 数据库的约束与索引一、约束1、定义2、主键索引3、唯一约束4、非空约束5、外键约束 二、索引1、定义2、主键索引3、唯一索引4、普通索引5、全文索引 三、深入索引面试题(一)面试题(二)面试题&#xf…

【设计模式】行为型-状态模式

在变幻的时光中,状态如诗篇般细腻流转。 文章目录 一、可调节的灯光二、状态模式三、状态模式的核心组件四、运用状态模式五、状态模式的应用场景六、小结推荐阅读 一、可调节的灯光 场景假设:我们有一个电灯,它可以被打开和关闭。用户可以…

snap和apt的区别简单了解

Linux中没有tree命令的时候提示安装的时候出现了两个命令,简单看了看两者有何区别(一般用apt就可以了): sudo snap install tree 和 sudo apt install tree 这两个命令都是用来安装 tree 命令行工具的,但它们使用的是不…

在线教育平台,easyexcel使用案例

控制器 因为如何想要在读数据的时候操作数据库,就必须使用构造方法传dao 或者service,因为这个不归spring管理,不能自动注入,所以参数里需要传递service 或者 dao AutowiredIEduSubjectService subjectService;添加课程分类的方法…

Anaconda学习常见问题汇总

问题1:Fatal error in launcher: Unable to create process using ‘“d:\anaconda\isntall\envs\learn1\python.exe 在进行anaconda学习时,在控制台输入:pip list想要查看环境里的内容时发生错误: Fatal error in launcher: Un…

个人博客|PHP源码|支持多国语言切换

一. 前言 今天小编给大家带来了一款可学习,可商用的,支持多国语言的个人博客网站源码,支持二开,无加密。此博客相当简洁,也适合海外。详细界面和功能见下面视频演示。 如果您正好有此需求源码,请联系小编…

软件资产管理系统:提升企业软件资产透明度与合规性的终极解决方案!

在当今数字化转型浪潮中,企业软件资产管理的重要性日益凸显。然而,传统的手工管理方式往往效率低下,难以应对快速变化的软件环境。SmartLic软件资产管理系统应运而生,它以先进的技术手段,为企业提供全面的软件资产管理…

开源自动化热键映射工具autohotkey十大用法及精选脚本

AutoHotkey(AHK)是一款功能强大的热键脚本语言工具,它允许用户通过编写脚本来自动化键盘、鼠标等设备的操作,从而极大地提高工作效率。以下是AutoHotkey的十大经典用法,这些用法不仅解放了用户的双手,还展示…

程序化交易广告及其应用

什么是程序化交易广告? 程序化交易广告是以实时竞价技术即RTB(real-time bidding)为核心的广告交易方式。说到这里,你可能会有疑问:像百度搜索关键词广告还有百度网盟的广告,不也是CPC实时竞价的吗&#x…

MDX的魔法:探索SQL Server中的多维表达式

📊 MDX的魔法:探索SQL Server中的多维表达式 在商业智能和数据分析领域,SQL Server提供了一种强大的工具来处理多维数据集,这就是多维表达式(Multidimensional Expressions,简称MDX)。MDX是一种…

论文学习_UVSCAN: Detecting Third-Party Component Usage Violations in IoT Firmware

论文名称发表时间发表期刊期刊等级研究单位 Understanding the Security Risks Introduced by Third-Party Components in IoT Firmware 2024年IEEE TDSCCCF A佐治亚理工学院 1. 引言 研究背景:物联网(IoT)已经无处不在,为我们…

HQChart报价列表高级应用教程7-走势列数据对接

HQChart报价列表高级应用教程7-走势列数据对接 走势列小程序效果图PC效果图HQChart代码地址走势列类型配置走势列数据格式示例走势列 单独使用一列显示每个股票的走势图 小程序效果图 PC效果图 HQChart代码地址 地址:github.com/jones2000/HQChart 走势列类型 REPORT_COL…

[工业网络] 模型建立

普渡大学ICS参考模型 普渡企业参考架构(PERA)是由西奥多J威廉姆斯(Theodore J. Williams)和普渡大学计算机集成制造工业大学联盟的成员在1990年代开发的企业架构参考模型。该模型被ISA-99(现为ISA/IEC 62443&#xff…

使用EndNote在Word中插入参考文献,并编辑参考文献样式方法

一、背景 在准备中期报告时,学校给的是Word模板,习惯了Latex排版和添加参考文献的便利后,真不想用word写东西。 之前投《机器人》期刊(被拒了)和准备开题的时候也是用word写的,当时为方便添加参考文献和定…

MyBatis 分页插件 PageHelper 简介

引言 PageHelper 是一款优秀的开源免费 MyBatis 分页插件,它极大地简化了分页查询的复杂性,支持多种主流数据库如 MySQL、Oracle、MariaDB、DB2 等。本文将详细介绍 PageHelper 的基本使用、配置参数、实现原理以及实际项目中的应用。 一、PageHelper …

Memcached中的CAS操作:确保数据一致性的原子武器

Memcached中的CAS操作:确保数据一致性的原子武器 在分布式缓存系统中,保持数据的一致性是一个重要而复杂的任务。Memcached作为一种高性能的分布式内存缓存系统,提供了一种称为Compare-And-Swap(CAS)的操作&#xff0…

解决fastjson自动过滤null值

解决fastjson自动过滤null值 使用 SerializerFeature.WriteNullStringAsEmpty 解决 List<HistoryVector> historyVectors new ArrayList<>();HistoryVector historyVector new HistoryVector();historyVector.setInput("1");historyVector.setReason(&q…

不锈钢酸退作业区2#冷线氧化锆分析仪信号传输系统的优化

不锈钢酸退作业区2#冷线氧化锆分析仪信号传输系统的优化 一、项目提出前状况: (一)不锈钢酸退作业区2#冷线退火炉烟气监测系统所使用的设备为横河氧化锆分析仪,此设备主要用于检测退火炉内天然气燃烧后烟气成分中的氧含量值,此设备的检测准确性直接影响产品质量,而且决定…