opencv的相机校准和3D建模的理论知识

news2024/11/28 10:50:26

一、相机标定的四个坐标系

1、世界坐标系(Xw,Yw,Zw):也称真实或现实世界坐标系,或全局坐标系。它是客观世界的绝对坐标,由用户任意定义的三维空间坐标系。一般的3D场景都用这个坐标系来表示。

世界坐标系的作用:标定时确定标定物的位置;作为双目视觉参考系,给出两个相机相对世界坐标系的关系,从而求出两个相机之间的关系;作为重建得到三维坐标的容器,盛放重建后的物体的三维坐标。

2、摄像机坐标系(Zc,Xc,Yc):摄像坐标系的原点在摄像机的光心上,z轴与摄像机光轴平行,x,y 一般与图像物理坐标系的X,Y平行。

摄像机坐标系的作用:世界坐标系的物体需要先进行刚体变化转变到摄像机坐标系(旋转平移),然后再跟图像坐标系发生关系。

3、图像坐标系:分为图像物理坐标系和图像像素坐标系,以摄像机拍摄的二维图片为基准建立的坐标系,指物体在图片的位置。

图像物理坐标系(x,y):其原点为透镜光轴与成像平面的交点,X 与Y 轴分别平行于摄像机坐标系的x与y 轴,是平面直角坐标系,单位为毫米。(X,Y)代表物体从摄像机坐标系到图像坐标系透视投影关系。

图像像素坐标系(u,v):固定在图像上的以像素为单位的平面直角坐标系,其原点位于图像左上角, Xf,Yf平行于图像物理坐标系的X 和Y轴。对于数字图像,分别为行列方向。(u,v)则是实实在在的,我们能从摄像机得到的真实信息。

图像如下:

 

立体图:

 

二、四大坐标系的坐标转换:

1、世界坐标转摄像机坐标:通过外参矩阵:旋转+平移(只要世界坐标和摄像机坐标相对位置关系发生改变,外参也会发生改变)

T是世界坐标系原点在摄像机坐标系中的坐标,矩阵R是正交旋转矩阵

2、摄像机坐标转像素坐标:先进行摄像机转图像物理坐标,再转为图像像素坐标,总结为内参矩阵(只与相机有关)

 

 以上转换流程图如下:

三、畸形模式

一、径向畸变

对于某些透镜,光线再远离透镜中心的地方比靠近中心的地方更加弯曲,产生'筒型'或者'鱼眼'现象,称为径向畸变。

一般来说,成像仪中心的径向畸变为0,越向近边缘移动,畸形越严重,径向畸变可以通过泰勒级数展示式来校正:

x,y是畸变点在成像仪上的原始位置,r为该点距离成像仪中心的距离,xcorreted,ycorreted是校正后的新位置。(对于一般的摄像机校正,通常使用泰勒级数中的前两项k1和k2就够了,畸变很打的摄像机,比如鱼眼透镜可以使用第三径向畸变项K3)

2、切向畸变 

当成像仪被粘贴在摄像机的时候,会存在一定的误差,是平面和透镜不完全平行,从而产生切向畸变,也就是说,如果一个矩形被投影到成像仪上时,可以会变成一个梯形,切向畸变可以通过如下公式校正,x,y,r,xcorreted,ycorreted参数跟以上意义一样

注意:x,y时图像物理坐标,不是图像像素坐标

图像描述如下:

径向畸变:桶形畸变,枕形畸变 (桶形x,y比实际要大,枕形刚好相反)

切向畸变: 

 

畸变系数:Distortioncoefficients=(k1k2p1p2k3)

要进行畸变矫正,必须知道畸变系数(求内参的目的,就是校正畸变和求外参 ),然后做畸变相反的操作,消除畸变 。

相机标定的最终目的:根据一组已知三维图像的世界坐标,以及不同角度拍摄获取的像素坐标,来计算出内存矩阵和外参矩阵,畸变参数。

标定之后就是消除畸变:由于每个镜头的畸变程度各不相同,通过相机标定可以校正镜头畸变矫正畸变,生成矫正后的图片;另一个是根据获得的图片进行重构三维场景。

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

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

相关文章

SSM框架使用多数据源(druid连接池)

最近有个数据归集的需求用到了多数据源,在业务库保存后同时向归集库插入或数据。之前好像还没做过这块的东西,简单记录下防止下次又忘记了~ 踩过的几个坑都是某些知识点不熟悉导致的,而且都是框架配置相关的.. 先上代码,再扯淡 …

PyQt5 拖拽与剪贴板

拖拽与剪切板拖拽剪贴板拖拽 基于MIME类型的拖拽数据传输时基于QDrag类的QMimeData对象管理的数据与其对应的MIME类型相关联。 MimeData类函数允许检测和使用方法的MIME类型 判断函数设置函数获取函数MIME类型hasText()text()setText()text/plainhasHtml()html()setHtml()tex…

【Java八股文总结】之SpringBoot

文章目录SpringBoot1、Spring Boot的优点?2、Spring Boot自动配置原理3、如何定义一个SpringBoot Starter?4、SpringBoot启动原理?5、SpringBoot的常用注解Spring Cache1、Spring Cache介绍2、Spring Cache注解Sharding-JDBCSpringBoot 1、S…

关于vector的迭代器失效

目录 关于迭代器失效的判定 1 迭代器指向的位置是野指针(全部迭代器失效) 原因: 解决 2 erase或者insert之后迭代器被更改了(部分迭代器失效) 原因 迭代器失效的场景: 改进之后 部分迭代器失效之越…

十年前的AlexNet,今天的NeurIPS 2022时间检验奖

目录:十年前的AlexNet,今天的NeurIPS 2022时间检验奖一、前言二、时间检验奖一、前言 作为当前全球最负盛名的 AI 学术会议之一,NeurIPS 是每年学界的重要事件,通常在每年 12 月举办。大会讨论的内容包含深度学习、计算机视觉、大…

三款“非主流”日志查询分析产品初探

前言 近些年在开源领域,用于构建日志系统的软件有两类典型: Elasticsearch:基于 Lucene 构建倒排索引提供搜索功能,DocValue 存储支持了其统计分析能力。Clickhouse:列式存储是其优秀 OLAP 性能的保障。 这里把上述系…

Windows安装MySQL

目录 1、确认本地是否安装了mysql 2、下载安装包 3、安装mysql 4、修改mysql密码 5、配置环境变量 1、确认本地是否安装了mysql (1)按【winr】快捷键打开运行,输入services.msc,点击【确定】; (2&…

大数据开发和软件开发哪个前景好?

大数据开发和软件开发哪个前景好?大数据开发学习有难度,零基础入门要先学习Java语言打基础,然后进入大数据技术体系的学习,学习Hadoop、Spark、Storm等知识。软件开发工程师根据不同的学科从事的岗位也千差万别。 先说说大数据开…

关于激光雷达传感器分类及简介

关于激光雷达传感器(根据特性进行分类介绍)0一些激光雷达的厂商总结1 基本介绍2 基本分类及组成2.1 激光雷达的相关分类2.1.1 机械式激光雷达:2.1.2 混合固态激光雷达:2.1.3 固态激光雷达:OPA和Flash固态激光雷达2.2 机…

Linux shell 脚本学习

目录 1.shell编程的基本格式 开头 注释 加可执行权限 执行脚本的三种方法 2.变量 定义变量和清除变量 从键盘获取值(read) 读取多个值 只读变量(readonly) 位置变量 变量运算 3.条件测试 文件测试 字符串测试 数值测试 逻辑操作符 4. if条件语句 if条件语句语法 单…

SPARKSQL3.0-源码剖析全流程导读

SPARKSQL-源码剖析全流程导读 一、处理流程 spark从一条sql语句一步一步转换成物理执行结果,这中间需要经历几个阶段,如下图: 二、各阶段概述 1、Unresolved-未解析阶段 此阶段主要做了两件事: 1、将sql字符串通过antrl4转化…

元数据管理系统

数据治理工具–元数据系统数据服务基础能力之元数据管理元数据管理系统设计 1.元数据概述 1.1 介绍 如果想建设好元数据系统,需要理解元数据系统的相关概念,如数据、数据模型、元数据、元模型、ETL、数据血缘等等。 首先,要清楚数据的定义…

python_函数

一、函数介绍组织好的,可重复使用的,用来实现特定功能的代码段例如:len() 函数--Python内置函数# 已组织好的、可重复使用,针对特定功能 def my_len(data):count 0for i in data:count 1print(f"字符串{data}的长度是{coun…

WebRTC实现一个网页在线录制视频

电脑录制视频几乎不会用到,当有需要的时候就各种找软件找工具,并且都会找免费的。现在市场上肯定有很多符合需求,只是那么偶尔的情况下,而且使用场景不是那么多要求的情况下,一个网页在线直接录屏是不是非常nice。 很…

40Java Runtime类

目录 Runtime类 1.概述 2.常见方法 (1).getRuntime返回环境对象 (2).exit停止虚拟机 (3).availableProcessors返回线程数 (4). maxMemory返回获得最大内存 (5).totalMemory返回已经获得内存 (6).freeMemory返回剩余内存 (7).exec运行cmd命令 Runtime类 1.概述 ​ Run…

双亲委派模型机制

文章目录类加载器findClassloadClassJDK双亲委派的破坏第一次破坏第二次破坏tomcat热部署JDK9最新改动双亲委派机制是当类加载器需要加载某一个.class字节码文件时,则首先会把这个任务委托给他的上级类加载器,递归这个操作,如果上级没有加载该…

卷积神经网络<二>keras实现多分支输入VGG

VGG的模型图 VGG使用Keras实现 这里的代码借鉴了VGG实现Keras,但是这段代码不支持多通道,并且vgg函数的扩展性不好。下面修改一下,方便进行多分支图片输入的建立,以及更见方便的调参。 # from keras.models import from keras.l…

MyBatis介绍

MyBatis介绍 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordi…

PMP考试自学可以吗?(含PMP备考资料)

当然是可以的,只要解决了“报考的35学时”这个问题,就只剩怎么备考的问题了。 在一般情况下,建议备考一到三个月,别给自己太长或太短的备考时间,前者坚持不下来,后者备考时间太少,来不及备考充…

戴尔大步进军经典量子计算混合模型

​ (图片来源:网络) 戴尔正将量子计算机融入传统IT的基础架构中,并向新型加速计算机开放了数据中心。这家服务器制造商为传统服务器基础设施创建了一个蓝图,以满足量子系统的独特需求,量子系统速度要比经典…