透视变换原理、相机成像、灭点
相机成像
设世界坐标为(Xw,Yw,Zw)(X_w,Y_w,Z_w)(Xw,Yw,Zw),相机坐标为(Xc,Yc,Zc)(X_c,Y_c,Z_c)(Xc,Yc,Zc),则世界坐标系和相机坐标系需要一个矩阵变换R以及一个位移矩阵T,公式如下:
[XcYcZc1]=[RT01][XwYwZw1]\begin{bmatrix} X_c\\Y_c\\Z_c\\1 \end{bmatrix} = \begin{bmatrix} R & T\\0 & 1 \end{bmatrix} \begin{bmatrix} X_w\\Y_w\\Z_w\\1 \end{bmatrix} ⎣⎢⎢⎡XcYcZc1⎦⎥⎥⎤=[R0T1]⎣⎢⎢⎡XwYwZw1⎦⎥⎥⎤
相机坐标和平面坐标系根据三角形相似原理:
Zc[xy1]=[f000f0001][XcYcZc]Z_c \begin{bmatrix} x\\ y \\ 1 \end{bmatrix} = \begin{bmatrix} f & 0 & 0\\ 0 & f & 0 \\0 & 0 & 1 \end{bmatrix} \begin{bmatrix} X_c\\Y_c\\Z_c\\ \end{bmatrix} Zc⎣⎡xy1⎦⎤=⎣⎡f000f0001⎦⎤⎣⎡XcYcZc⎦⎤
、
从平面坐标系到图像坐标系:
设(u,v)代表图像坐标系坐标,设每一个像素的物理尺寸为dx、dy,则有:
u=x/dx+u0v=y/dy+v0u0和v0图像长宽的一半u= x/dx + u_0 \\ v= y/dy + v_0 \\ u_0和v_0 图像长宽的一半 u=x/dx+u0v=y/dy+v0u0和v0图像长宽的一半
所有等式综合起来得到图像上点坐标(u,v)与世界坐标系的关系
[uv1]=1ZcAR[XwYwZw]\begin{bmatrix} u\\v \\1 \end{bmatrix} = \frac{1}{Z_c}AR \begin{bmatrix} X_w\\Y_w\\Z_w \end{bmatrix} ⎣⎡uv1⎦⎤=Zc1AR⎣⎡XwYwZw⎦⎤
将前面三个数表示为一个9x9矩阵,然后化简:
u=m0,0Xw+m0,1Yw+m0,2Zwm2,0Xw+m2,1Yw+m2,2Zwv=m1,0Xw+m1,1Yw+m1,2Zwm2,0Xw+m2,1Yw+m2,2Zwu = \frac{m_{0,0}X_w + m_{0,1}Y_w + m_{0,2}Z_w}{m_{2,0}X_w + m_{2,1}Y_w + m_{2,2}Z_w} \\ v = \frac{m_{1,0}X_w + m_{1,1}Y_w + m_{1,2}Z_w}{m_{2,0}X_w + m_{2,1}Y_w + m_{2,2}Z_w} \\ u=m2,0Xw+m2,1Yw+m2,2Zwm0,0Xw+m0,1Yw+m0,2Zwv=m2,0Xw+m2,1Yw+m2,2Zwm1,0Xw+m1,1Yw+m1,2Zw
对于世界坐标系下平行的两条直线,设方向为D{dx,dy,dy}D\{d_{x},d_{y},d_{y}\}D{dx,dy,dy}则给定直线上一点A(ax,ay,az)A(a_x,a_y,a_z)A(ax,ay,az),该直线上任意一点表示为X(λ)=A+λDX(\lambda)= A + \lambda DX(λ)=A+λD,带入上式得:
u=m0,0(ax+λdx)+m0,1(ay+λdy)+m0,2(az+λdz)m2,0(ax+λdx)+m2,1(ay+λdy)+m2,2(az+λdz)v=m1,0(ax+λdx)+m1,1(ay+λdy)+m1,2(az+λdz)m2,0(ax+λdx)+m2,1(ay+λdy)+m2,2(az+λdz)u = \frac{m_{0,0}(a_x+\lambda d_x) + m_{0,1}(a_y+\lambda d_y) + m_{0,2}(a_z+\lambda d_z)}{m_{2,0}(a_x+\lambda d_x) + m_{2,1}(a_y+\lambda d_y) + m_{2,2}(a_z+\lambda d_z)} \\ v = \frac{m_{1,0}(a_x+\lambda d_x) + m_{1,1}(a_y+\lambda d_y) + m_{1,2}(a_z+\lambda d_z)}{m_{2,0}(a_x+\lambda d_x) + m_{2,1}(a_y+\lambda d_y) + m_{2,2}(a_z+\lambda d_z)}\\ u=m2,0(ax+λdx)+m2,1(ay+λdy)+m2,2(az+λdz)m0,0(ax+λdx)+m0,1(ay+λdy)+m0,2(az+λdz)v=m2,0(ax+λdx)+m2,1(ay+λdy)+m2,2(az+λdz)m1,0(ax+λdx)+m1,1(ay+λdy)+m1,2(az+λdz)
当世界坐标系下X(λ)中λX(\lambda)中\lambdaX(λ)中λ趋于无穷大时,可以得到极限:
u=m0,0dx+m0,1dy+m0,2dzm2,0dx+m2,1dy+m2,2dzv=m1,0dx+m1,1dy+m1,2dzm2,0dx+m2,1dy+m2,2dzu = \frac{m_{0,0}d_x + m_{0,1}d_y + m_{0,2}d_z}{m_{2,0}d_x + m_{2,1}d_y + m_{2,2} d_z} \\ v = \frac{m_{1,0}d_x + m_{1,1}d_y + m_{1,2}d_z}{m_{2,0}d_x + m_{2,1}d_y + m_{2,2} d_z}\\ u=m2,0dx+m2,1dy+m2,2dzm0,0dx+m0,1dy+m0,2dzv=m2,0dx+m2,1dy+m2,2dzm1,0dx+m1,1dy+m1,2dz
所以对于三维世界平行线上无穷远的点来说,通过相机映射后,两条平行线最终会相交于一点,该点为图像的灭点。
参考博客
透视变换原理、相机成像、灭点相关推荐
- 计算机视觉:相机成像原理:世界坐标系、相机坐标系、图像坐标系、像素坐标系之间的转换(转载)
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/chentravelling/article/details/53558096 0.前言 最近整理了& ...
- ORB-SLAM2从理论到代码实现(四):相机成像原理、基本矩阵、本质矩阵、单应矩阵、三角测量详解
由于ORBmatcher.cc中有三角化和重投影等内容,所有我先写相机成像等多视图几何内容. 1. 相机的成像原理 假设空间中有一点P,它在世界坐标系中的坐标为,在相机坐标系中的坐标为,在图片中的像素 ...
- 相机成像与校正原理:将外部世界进行降维
简 介: 本文根据 相机标定(三)-相机成像模型 中的内容整理而成,初步介绍了相机的成像模型.最后介绍了利用OpenCV中的 calibrateCamera函数进行相机参数校正的过程. 关键词: 相机 ...
- 【自动驾驶】16.计算机视觉:相机成像原理:世界坐标系、相机坐标系、图像坐标系、像素坐标系之间的转换
本篇博客为转载,我对其中的细节添加了一些说明. 原文链接:https://blog.csdn.net/chentravelling/article/details/53558096 0.前言 最近整理 ...
- 相机成像原理_【科研进展】动态虚拟相机:探索三维视觉成像新方法
由于微信公众号试行乱序推送,您可能没办法准时收到"爱光学"的文章.为了让您第一时间看到"爱光学"的新鲜推送, 请您: 1. 将"爱光学"点亮 ...
- 【图像处理】相机成像原理
这里对于相机成像原理做一个简单的介绍. 如下图所示,在最左端的顶点为相机,它的镜头正对着地面上的点O,横向视场角为a,纵向视场角为θ,它所看到的区域就是就是如下所示的四边形,存在一定的投影变换. 而地 ...
- 相机成像原理_照相机、摄影机的成像原理
电影让不同时空下的你我相遇 写在开头 后面将要学习的焦距.景深以及镜头的运动相比影像中的画框.构图.景别.角度这几个概念理解起来更有难度,为了更好地理解它们的含义,也为了"知其然,知其所以然 ...
- 【自动驾驶】23.相机成像究竟是成在像平面还是成在焦平面
建议观看这个视频之后,你就全明白了:针孔相机和透镜. 光心是透镜主轴与透镜平面的交点,相机镜头的主轴很明显,就是沿镜头中每个镜片中心穿过的直线. 而透镜平面就很难确定了,相机镜头是通过复杂的镜片组来模 ...
- 相机成像模型、相机内参、外参、以及相机标定
看了一圈各个平台讲解相机模型.相机标定的文章,很多只是简单罗列几个公式,其中的细节都没说明,本着学习的出发点写下这篇文章,希望能给初学者解惑.本文主要讲解相机模型,一步步推导从世界坐标系到图像坐标系的 ...
最新文章
- 15万人调查发现:做博后越久,一辈子挣的钱越少
- linux下的apache、mysql自启动
- 完美脱壳组装PE的一般步骤(Obsidium1.3.6.4 DEMO 主程序)
- Entity Framework 4.1(转)
- vue.js的一些小语法v-bind,v-if,v-show,v-else
- android 7.0 禁止 imei,Android一些适配
- Spring Boot 学习笔记(三)Spring boot 中的SSM
- .idea文件夹是做什么的_33 个 IDEA 最牛配置,写代码太爽了!
- PiFlow大数据流水线系统v0.9源码
- 在ASP.NET中防止注入攻击
- ActiveMq工作笔记002---Centos7.3安装ActiveMq
- 第27章 正则表达式
- 阿里云windows 2012服务器部署java web程序教程
- java代码计算两个时间相差的天数:
- uniapp 小程序支付功能
- 打造自己的游戏修改器和内存补丁
- 过程计算机系统 pcs,过程控制系统(PCS)
- Python基础——继承、多态
- 我是漂移王-说明介绍
- CF633C Spy Syndrome 2(字典树+dp)
热门文章
- 《MobileNetV2: Inverted Residuals and Linear Bottlenecks》
- cadence电阻在哪个库_cadence元件库介绍
- Hive的学习心得-个人理解什么是hive
- 维基百科著名程序员列表大全
- python中abs和fabs的区别_Python - abs vs fabs
- iOS 查看Realm数据库表
- ajax hapi上传文件,在hapi框架里使用ajax提交表单数据,但是服务端接收到的数据是空对象。怎么办啊?...
- NodeJS-框架express-Koa-Hapi的区别
- IDEA 中如何完成 Git 版本回退?
- Hexo | NexT打造一个炫酷博客