首页 > 其他分享 >相机标定(世界坐标系-->相机坐标系,相机坐标系-->图像坐标系,图像坐标系-->像素坐标系,完成世界坐标系-->像素坐标系)

相机标定(世界坐标系-->相机坐标系,相机坐标系-->图像坐标系,图像坐标系-->像素坐标系,完成世界坐标系-->像素坐标系)

时间:2023-08-09 21:37:09浏览次数:34  
标签:10 -- 像素 相机 图像 坐标系

本篇文章主要介绍如何使用相机标定,实现世界坐标系-->相机坐标系,相机坐标系-->图像坐标系,图像坐标系-->像素坐标系,完成世界坐标系-->像素坐标系。

 相机标定内参/畸变系数求解与外参求解代码:  (添加:2022-0926)

原理介绍如下:

 一、世界坐标系转换为相机坐标系

相机标定概念:即求解外参旋转矩阵R与平移向量t

相机标定(世界坐标系-->相机坐标系,相机坐标系-->图像坐标系,图像坐标系-->像素坐标系,完成世界坐标系-->像素坐标系)_世界坐标系

 世界坐标系概念(一般摄像机为坐标原点):

相机标定(世界坐标系-->相机坐标系,相机坐标系-->图像坐标系,图像坐标系-->像素坐标系,完成世界坐标系-->像素坐标系)_旋转矩阵_02

 相机坐标系:

相机标定(世界坐标系-->相机坐标系,相机坐标系-->图像坐标系,图像坐标系-->像素坐标系,完成世界坐标系-->像素坐标系)_世界坐标系_03

 

世界坐标系到相机坐标系方法,通常使用旋转和平移方法实现:

旋转方法种类:旋转矩阵,欧拉角,四元数,轴角,李群和李代数

旋转应用场景:惯性导航,机器人学(机械臂运动学,无人机姿态估计,slam等)

旋转矩阵图解推导方法:

本图说明:红点假设为物体p(物体未发生变化,只是坐标系建立方法不同而已),黑色为原坐标系,蓝色为绕X轴旋转坐标系,旋转角为seta。

求解新坐标系(Xc,Yc,Zc),其中绕X轴旋转,则新Xc=X将不发生变化。

Yc=oa+ab=ec+pd=oc*sin(seta)+cp*cos(seta)=Z*sin(seta)+Y*cos(seta)

Yc=ac-cd=oe-cd=oc*cos(seta)-cp*sin(seta)= Z*cos(seta)-Y*sin(seta)

相机标定(世界坐标系-->相机坐标系,相机坐标系-->图像坐标系,图像坐标系-->像素坐标系,完成世界坐标系-->像素坐标系)_旋转矩阵_04

 

 最终表现为矩阵如下:

相机标定(世界坐标系-->相机坐标系,相机坐标系-->图像坐标系,图像坐标系-->像素坐标系,完成世界坐标系-->像素坐标系)_旋转矩阵_05

 

验证旋转是否正确(因到原点距离不变),采用欧式距离验证:

相机标定(世界坐标系-->相机坐标系,相机坐标系-->图像坐标系,图像坐标系-->像素坐标系,完成世界坐标系-->像素坐标系)_旋转矩阵_06

 

通过以上方法类推绕Y轴,Z轴旋转,得到以下矩阵,将其相乘可得到绕X/Y/Z轴旋转的坐标转换。 

如下为旋转角矩阵变换:

相机标定(世界坐标系-->相机坐标系,相机坐标系-->图像坐标系,图像坐标系-->像素坐标系,完成世界坐标系-->像素坐标系)_旋转矩阵_07

添加(2022-0930):以上绕x轴公式的正负号偏差为角度问题,若-seta可将上面角度转为下面公式:

相机标定(世界坐标系-->相机坐标系,相机坐标系-->图像坐标系,图像坐标系-->像素坐标系,完成世界坐标系-->像素坐标系)_旋转矩阵_08

 

 

 

补充关于绕Y轴旋转的矩阵:

以下利用几何变换推导绕Y轴变换不同的2个矩阵,若读者发现不同文章不一样,可以不用慌张,仅仅思考角度不一样,可理解seta角正负的影响,

详情推导请看下面的变换。

 

相机标定(世界坐标系-->相机坐标系,相机坐标系-->图像坐标系,图像坐标系-->像素坐标系,完成世界坐标系-->像素坐标系)_世界坐标系_09

 

 

额外注意点:

相机标定(世界坐标系-->相机坐标系,相机坐标系-->图像坐标系,图像坐标系-->像素坐标系,完成世界坐标系-->像素坐标系)_相机标定_10

 

 

平移向量可表示为:

相机标定(世界坐标系-->相机坐标系,相机坐标系-->图像坐标系,图像坐标系-->像素坐标系,完成世界坐标系-->像素坐标系)_旋转矩阵_11

 

相机的外参R、t:

 

相机标定(世界坐标系-->相机坐标系,相机坐标系-->图像坐标系,图像坐标系-->像素坐标系,完成世界坐标系-->像素坐标系)_世界坐标系_12

 二、相机坐标系转换为图像坐标系

相机坐标系->图像坐标系这个转换过程,实际将三维转换我二维平面,其原理复符合小孔成像,可采用相似三角形求解转换公式。

小孔成像示意图:

相机标定(世界坐标系-->相机坐标系,相机坐标系-->图像坐标系,图像坐标系-->像素坐标系,完成世界坐标系-->像素坐标系)_相机标定_13

 

 

从下图上,如果相机坐标系到图像坐标系的转化,我们可以理解为,如何将相机坐标系下的3D点 

- 映射到 

- 上,通过蓝色虚线部分,我们可以得到两个相似三角形 

- 和 

- ,其中相机坐标系的原点 

- 到图像坐标系的原点 

- 的距离,我们称之为焦距 

- 。

相机标定(世界坐标系-->相机坐标系,相机坐标系-->图像坐标系,图像坐标系-->像素坐标系,完成世界坐标系-->像素坐标系)_世界坐标系_14

                        

相机标定(世界坐标系-->相机坐标系,相机坐标系-->图像坐标系,图像坐标系-->像素坐标系,完成世界坐标系-->像素坐标系)_相机标定_15

 

 

 

 

利用相似三角形可得:

相机标定(世界坐标系-->相机坐标系,相机坐标系-->图像坐标系,图像坐标系-->像素坐标系,完成世界坐标系-->像素坐标系)_旋转矩阵_16

 

最终可转换如下:

 

相机标定(世界坐标系-->相机坐标系,相机坐标系-->图像坐标系,图像坐标系-->像素坐标系,完成世界坐标系-->像素坐标系)_旋转矩阵_17

 说明:Zc实际为相机坐标系Z轴的值,可通过如下形式得到:(添加:2022-0926)

相机标定(世界坐标系-->相机坐标系,相机坐标系-->图像坐标系,图像坐标系-->像素坐标系,完成世界坐标系-->像素坐标系)_相机标定_18

相机标定(世界坐标系-->相机坐标系,相机坐标系-->图像坐标系,图像坐标系-->像素坐标系,完成世界坐标系-->像素坐标系)_相机标定_19

 

 

 

 

 三、图像坐标系转换像素坐标系 

图像坐标系转像素坐标系实际是比列尺(属于缩放问题)与移动问题,首先是 

 这个我们可以理解为,从图像坐标系中心点到像素坐标系中心点的一个偏移量。属于相机内参的一部分。另外,如果我们已知图像坐标系的一个点 

 ,我们还应该知道,横坐标的每一个mm对应像素是多少。即有如下公式:

相机标定(世界坐标系-->相机坐标系,相机坐标系-->图像坐标系,图像坐标系-->像素坐标系,完成世界坐标系-->像素坐标系)_旋转矩阵_20

 

 

相机标定(世界坐标系-->相机坐标系,相机坐标系-->图像坐标系,图像坐标系-->像素坐标系,完成世界坐标系-->像素坐标系)_旋转矩阵_21

 其中dx与dy表示x轴与y轴物理像素尺寸,即1个像素是dx毫米。

可使用以下公式表示:

 

相机标定(世界坐标系-->相机坐标系,相机坐标系-->图像坐标系,图像坐标系-->像素坐标系,完成世界坐标系-->像素坐标系)_旋转矩阵_22

 

 

最终实现世界坐标系到像素坐标系的转换:

相机标定(世界坐标系-->相机坐标系,相机坐标系-->图像坐标系,图像坐标系-->像素坐标系,完成世界坐标系-->像素坐标系)_旋转矩阵_23

 上图可知M2为相机外参,M1为相机内参

相机标定目的:

相机标定(世界坐标系-->相机坐标系,相机坐标系-->图像坐标系,图像坐标系-->像素坐标系,完成世界坐标系-->像素坐标系)_相机标定_24

 




标签:10,--,像素,相机,图像,坐标系
From: https://blog.51cto.com/u_16162011/7025458

相关文章

  • maskrcnn详细注解说明(超详细)
     此代码是我对maskrcnn的一些修改,基本还原所有内容,但更加简洁,使代码更易解读。里面有很多注释,非常详细,可自己慢慢品味。若有一些问题,欢迎指正与交流。      此代码为训练文件.py """MASKRCNNalgrithmforobjectdetectionandinstancesegmentationWrittenandmodifi......
  • web三大组件之一Listener
    什么是Listener监听器?1、Listener监听器它是JavaWeb的三大组件之一。JavaWeb的三大组件分别是:Servlet程序、Filter过滤器、Listener监听器。2、Listener它是JavaEE的规范,就是接口3、监听器的作用是,监听某种事物的变化。然后通过回调函数,反馈给客户(程序)去做一些相应的......
  • LSTM结构原理与代码实践
    近日学习LSTM结构,已有很多博客对LSTM结构进行说明,但某些细节仍然存在模糊情况,为此本文将进行补充与说明,可分以下内容:一.RNN原理简介与LSTM原理阐释。一般来说,RNN的输入和输出都是一个序列,分别记为有关(序列中的第t个元素我们叫做序列在time_step=t时的取值)。注:seqin={x1,x2,.........
  • idea 快速激活
     下载地址: https://files.cnblogs.com/files/lccsdncnblogs/%E6%BF%80%E6%B4%BB%E7%A0%81-Win%E7%B3%BB%E7%BB%9F.zip?t=1691586479&download=true   源地址......
  • nginx降低爬虫的效率
    环境nginx1.20理由不说了,就是通过Nginx一些策略来帮助防止爬虫或恶意访问配置User-Agent检测爬虫通常会使用特定的User-Agent来标识自己,Nginx可以通过检测User-Agent字符串并拒绝使用非法的User-Agent的请求。if($http_user_agent~*"badcrawler"){return403;//......
  • 目标检测mAP计算方法-简单易懂
    本次将整理一份map计算方法,主要分为三部分,第一部分简单了解原理,第二部分理解如何调用coco等相关库得到map,第三部分教会读者如何结合模型(任何可计算map的网络模型)调用而生成map,而本博客希望读者能掌握使用模型预测map,其重点也为第三部分: 第一部分介绍map原理,主要引用部分他人结......
  • 残差网络ResNet(超详细代码解析) :你必须要知道backbone模块成员之一
      本文主要贡献代码模块(文末),在本文中对resnet进行了复现,是一份原始版本模块,里面集成了权重文件pth的载入模块(如函数:init_weights(self,pretrained=None)),layers的冻结模块(如函数:_freeze_stages(self)),更是将其改写成可读性高的代码,若你需要执行该模块,可直接将其代码模块粘......
  • 【转载】The City Mouse and the Country Mouse
    ArticleFormatSourceChatGPTMainContentSourceTitle:TheCityMouseandtheCountryMouseSource:https://www.zhihu.com/question/263840407/answer/1108124796Author:苏焉儿MainContentOncethereweretwomice.Theywerefriends.Onemouselivedintheco......
  • Python基础day63 Django分页和cookie、session
    推导分页的原理分页:当我们要展示的数据特别多的时候,一页展示不完,这个时候我们需要把要展示的数据分成多页展示分页中需要的几个参数:1.总数据有多少条2.每页展示多少条数据(自己规定的20)3.一共展示多少页4.总页数=总数据量/每页展示多少条数据5.当前第几页(前端传过去......
  • MYSQL数据库 学习大全
    MYSQL数据库目前广泛的应用在各种个人、商务系统中,各种技术都比较成熟。把自己学习的一些过程总结一下,该文章设计到的内容都没有做太具体的阐述,只是一个简单的入门手册,假如想看更多内容可以参看MYSQL的联机手册。1MYSQL安装先下载安装包:mysql-5.0.27-win32.zipmysq......