从像素坐标到相机坐标_【视觉知识】机器视觉几何坐标概论

45ddcfb099d1fef7c84587d75eb2b6f4.png

作者:林青春

来源:知乎

一、机器视觉几何坐标概论

机器视觉系统有三大坐标系,分别是:1、世界坐标系,2、摄像机坐标系,3、图像(像素)坐标系。

1、世界坐标系

世界坐标系(Xw,Yw,Zw)是目标物体位置的参考系,根据运算方便自由设置圆点位置,可以位于机器手底座或者机器手前端执行器上。

其主要作用有

(1)盛放物体的三维坐标;

(2)标定的时候根据原点确定标定物的位置;

(3)给定出两个摄像机相对于世界坐标系的位置,从而求出两个或多个相机之间的坐标关系;

2、摄像机坐标系

摄像机坐标系(Xc,Yc,Zc)是摄像机在自己角度上的坐标系,原点在摄像机的光心上,Z轴与摄像机光轴平行,即摄像机的镜头拍摄方向。

3、图像(像素)坐标系

3.1、图像坐标系

图像坐标系(x,y)单位米或毫米,是连续图像坐标或者空间坐标,以图片对角线交点作为基准原点建立的坐标系。

3.2、像素坐标系

像素坐标系(u,v)单位尺度为一个pixel,是离散图像坐标或像素坐标,原点在图片的左上角。

4、坐标系之间的关系

当我们在图片中确定了某个物体的位置,如何让机器手去到空间中的实际位置进行抓取呢?这就需要对坐标进行转换。而从像素点到空间点的转换与空间点到像素点的转换是相反的,我们先将后者的推导过程。

4.1、图像坐标系与像素坐标系

图像坐标系与像素坐标系的关系为:

61b6a33ed18506779cca2cbd0bdf1edd.png

dx代表一个像素的宽度(x方向),与x同单位,x/dx表示x轴上有多少个像素,同理y/dy表示y轴上的像素个数,(u0,v0)是图像平面中心。

630fc5b1de5d0c01db6ca9c3caefc119.png

将上述关系转换为矩阵形式:

5eaf6b872d77d03bfacf71e22a835631.png

4.2、相机坐标系与图像坐标系

从相机坐标系到图像坐标系是一个三维坐标到二维坐标(3D->2D)的过程,称之为透视投影变换。为了求解它们之间的关系,将普通图像坐标(x,y)拓展为齐次坐标(x,y,1)。空间中的某点,投影到图像平面上的点与相机的光心在一条直线上。以光心为原点建立相机坐标系:

b00957e12ec2fcd734d32ed67a321ba1.png

根据相似三角形关系可以得到以下:

09cf2052419f6cc2c3a7de436490bcae.png

f为相机焦距(相机光心到成像平面的距离)
用矩阵形式表示为:

28885b028c2d11679adeba2870d52aba.png

统一将成像平面上的点用(u,v)表示:

01fd321277bafa8e5cc0f1d7de88f8f4.png

得图像点与空间点的关系为:

be3aba39597501716ceb082700dad88c.png

4.3、世界坐标系与相机坐标系

世界坐标(Xw,Yw,Zw)与相机坐标(Xc,Yc,Zc)同为三维坐标(右手系,三轴互相垂直),两个坐标系的关系为刚体变换(刚体变换:当物体不发生形变时,对一个几何物体作旋转,平移的运动)。可以先凭空想象下,有两个坐标系A与B,如何将A坐标系下的坐标转换到B坐标系表示,首先将A坐标系以原点为基准任意旋转,使其x轴,y轴,z轴与B坐标轴平行且同方向,接着平移AB坐标系原点的直线距离,就可以将A坐标系下的坐标转换到B坐标系,这个旋转Rotation与平移Transport就是需要求得的两个三维坐标之间的关系。

用以下等式表示两个坐标系之间的关系:

66e3dc6deff956f22b3630e638c876bc.png

其中旋转矩阵R可以看成空间坐标分别沿着X,Y,Z轴的三个旋转矩阵点乘得到的结果。

当绕Z轴旋转θ角度,新旧坐标的关系为:

74a557674b3ab9d79b62263d3f68411e.png

用矩阵表示为:

2d6c1193a881eea4eeee5e87442dc98f.png

同理,绕X轴,Y轴旋转φ和ω角度,可以得到:

12ac2e9f237e9f38a42466db3882bfba.png

于是,得到旋转矩阵R = R1*R2*R3,维度为3X3,T为平移矩阵,维度为3X1。

拓展为其次坐标:

bd821c9b012390b506094eebccdcfa4c.png

4.4、从世界坐标到像素坐标

综合上面推导的过程,世界坐标(Xw,Yw,Zw)—>相机坐标(Xc,Yc,Zc)—>图像坐标(x,y)—>像素坐标(u,v),以上顺序用矩阵表示为不断左乘下一步,即:

5278ae8f51ef390a8529b429c29e3cbb.png

等式右边的前两个矩阵称的乘积为相机内参,第三个矩阵称为相机外参,后面的单目相机标定,就是为了求解相机的内外参数。

声明:部分图片及内容来源于网络。仅供读者学习交流之目的,如有不妥,请联系删除。

0183708d6ed97a842f9a2d5b24dee53c.png

我知道你在看

b87cb39e379043ea6e178542e4d625aa.png

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

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

相关文章

php 对象 数量,php – Symfony2 / Doctrine如何在实体中存储相关对象的数量

我已经设置了一个包含测试对象的包,该对象包含许多testQuestion对象,每个对象都是一个问题和给定的答案(如果没有答案则为0).从树枝上我希望能够从测试对象中获取信息,说明有多少问题以及已经回答了多少问题.我创建了一个查询来将其从数据库中拉出来,在测试实体中我创建了2个新…

GNU make manual 翻译( 一百六十)

继续翻译 The only restriction on this sort of use of nested variablereferences is that they cannot specify part of the name of a functionto be called. This is because the test for a recognized function nameis done before the expansion of nested references.…

vb如何嵌套chrome_译丨如何为开源软件做出贡献

原文:How to Contribute to Open Source Software作者:Matt Eland译者:博轩为保证文章的可读性,本文采用意译,转载请保留原文链接前段时间参加了2020年1月11日Node party线下分享,justjavac 大佬分享的主题…

反转一个单链表,分别以迭代和递归的形式来实现

迭代法&#xff1a; 1 // 反转单链表.cpp : 定义控制台应用程序的入口点。2 3 #include "stdafx.h"4 #include <stdlib.h>5 6 typedef struct node7 {8 int data;9 struct node *next; 10 }linknode,*linklist; 11 12 linknode *reverse(linknode *he…

codesys中打开linux端的串口_CODESYS版本3.5 SP14 Patch 3发布

此版本有以下内容更新主要功能概述&#xff1a;CODESYS Engineering改进了智能输入辅助、监视列表、监视、 CPU负载、编译调试等;新的数据类型&#xff1a;LREAL或REAL中的__VECTOR [3];用于同步任务特别是多核架构的的原子操作符;一般改进&#xff1a;在源代码中的设备树、全局…

java解析md文件,mavon-editor 存储md文件以及md文件解析成html文件

1、md文件的存储javascript由于是vue-cli项目&#xff0c;因此使用的是mavonEditor.css使用方法&#xff1a;vue首先安装&#xff1a;javanpm install mavon-editor --save而后在相应的组件里引用&#xff1a;git//引入import {mavonEditor} from mavon-editorimport mavon-edi…

合并果子(Vijos P1097)

刚刚做出这道题&#xff0c;感觉很兴奋啊&#xff0c;对于我这种弱菜来说能完美的AC这道题真是令人振奋不已啊&#xff01; &#xff08;情不自禁的将AC记录发上来了&#xff0c;勿怪勿怪&#xff01;&#xff09; 这道题是我们向总点名要做的&#xff0c;这几天学了很多新内容…

vim 删除行_【收藏】138条 Vim 命令、操作、快捷键全

关注我&#xff0c;你的眼睛会怀孕命令历史以:和/开头的命令都有历史纪录&#xff0c;可以首先键入:或/然后按上下箭头来选择某个历史命令。启动vim在命令行窗口中输入以下命令即可vim 直接启动vimvim filename 打开vim并创建名为filename的文件文件命令打开单个文件vim file同…

matlab 按钮组设置,MATLAB中的单选按钮和按钮组

MATLAB GUI中的单选按钮和按钮组matlabGUI界面中的单选(radiobutton)按钮不提供互斥功能&#xff0c;要通过程序实现。方法一&#xff1a;假设有3个radiobutton&#xff0c;分别为radiobutton1、radiobutton2、radiobutton3。radiobutton1的回调函数&#xff1a;functionradiob…

十年只为一个摧残的梦(转载)

第一篇《十年只为一个摧残的梦》 一&#xff1a; 这10年&#xff0c;一定要有自己的方向 1.没有方向感&#xff0c;是最要命的 2.不管起点有多低&#xff0c;都要坦然接受  3.围绕自己的兴趣爱好选择职业 4.做自己最擅长的事 5.从最容易实现的目标开始做起 二&#xff1a; 这…

mysql的join算法,Mysql Join 连接算法

Join 语句的两种算法&#xff0c;分别是 Index Nested-Loop Join(NLJ) 和 Block Nested-Loop Join(BNL)。直接使用join mysql 优化器自动选择 驱动表。从驱动表读入数据&#xff0c;然后根据连接字段&#xff0c;根据条件匹配被驱动表&#xff0c;然后返回结果集&#xff0c;重…

vlookup练习_那个vlookup,我总是学不会啊

在Excel函数中&#xff0c;有那么的一个万金油Excel函数&#xff0c;它既可以正向查找&#xff0c;逆向查找&#xff0c;还可以多条件查找&#xff0c;它就是Vlookup。Vlookup与IF、sumifs/countifs誉为四大必学Excel函数。以下内容节选自【快速入门Excel基础教程】中的第4-2章…

php 数组课件,php学习 数组课件

下标&#xff1a;数组中的识别名称 也就是字符串或整数在数组中的代号数组中有几个索引值就被称为几维数组。索引值&#xff1a;索引是对数据库表中一列或多列的值进行排序的一种结构。数组分类在PHP数组被分为两种&#xff1a;索引数组&#xff1a;索引(indexed)索引值是整数&…