射影变换的一种解法

news2024/10/7 12:29:19

1、欧式变换

参考《计算机视觉中的多视图几何》1.4节定义。
欧式变换也叫等距变换,是刚体运动模型,可以表示为:在这里插入图片描述
其中的ε=±1,更简洁的形式是:
在这里插入图片描述

2、相似变换

相似变换是一个等距变换和一个均匀缩放的复合,表示为:
在这里插入图片描述
也可以写为:
在这里插入图片描述
其中的s表示均匀缩放。

不变量 直线的夹角、线段长度的比例、面积的比例。

3、仿射变换

仿射变换是一个非奇异线性变换与一个平移变换的复合,它的矩阵表示:
在这里插入图片描述
平面仿射变换有6个自由度,可以由3组点来解决。

不变量 平行的线依旧平行,平行线段的长度比不变,面积比不变。

4、射影变换(单应homography)

射影映射是把平面的点映射到另一个平面的点,它也把直线映射到直线。射影映射又称为射影变换或单应变换。——《计算机视觉中的多视图几何》P8

2D平面射影变换是关于齐次3维矢量的一种线性变换,可用一个非奇异的3*3矩阵H表示为:
[ x ′ y ′ t ] \begin{bmatrix} x^{'} \\ y^{'} \\ t \end{bmatrix} xyt = [ h 11 h 12 h 13 h 21 h 22 h 23 h 31 h 32 h 33 ] \begin{bmatrix} h11 & h12 & h13\\ h21 & h22 & h23\\ h31 & h32 & h33 \end{bmatrix} h11h21h31h12h22h32h13h23h33 [ x y 1 ] \begin{bmatrix} x \\ y \\ 1 \end{bmatrix} xy1

或者可以写为 x ′ = H x x^{'}=Hx x=Hx

最终结果:

x ′ = h 11 x + h 12 y + h 13 h 31 x + h 32 y + h 33 x^{'}=\frac{h11x+h12y+h13}{h31x+h32y+h33} x=h31x+h32y+h33h11x+h12y+h13

y ′ = h 21 x + h 22 y + h 23 h 31 x + h 32 y + h 33 y^{'}=\frac{h21x+h22y+h23}{h31x+h32y+h33} y=h31x+h32y+h33h21x+h22y+h23

在H的9个元素中,有8个自由度,如何理解由9个变8个呢?给H的元素乘上同一个数a,得到的aH和H作用相同,因为新的H无非把齐次点x变成了齐次点ax,在最终计算时会约掉。因此我们可以把a换成1/h22,那么H就变成了只有8个自由元素的矩阵。

上面的H可以通过构建4组点(三个点不共线)求解这8个未知量,因为每个点对应了两个方程,4个点就对应8个方程。

不变量,四共线点的交比是不变的。

那么射影映射和透视映射的关系是什么呢?结论是透视映射是射影映射的一种。

5、总结

在这里插入图片描述

6、透视投影

按照《计算机视觉中的多视图几何》P430的解释,透视变换是射影映射的一种特殊情况,它最终要的一个性质是:

连接对应点的直线,共点

直线的透视变换:
在这里插入图片描述
平面的透视变换:
在这里插入图片描述
两个透视变换的合成,不是透视变换,因为pqr三个点不共点,但是射影变换:
在这里插入图片描述

7、摄像机旋转

参考多视图几何7.4.2章节
摄像机在不改变内参时进行旋转,假定世界点X在旋转前的图像坐标x,旋转后的图像坐标x^{'},旋转矩阵R:

x = K X x = KX x=KX
x ′ = K R X = K R K − 1 K X = K R K − 1 X x^{'} = KRX = KRK^{-1}KX = KRK^{-1}X x=KRX=KRK1KX=KRK1X
这里K表示相机内参矩阵。

这个性质常用在图像拼接上,构建全景视图。

8、一种透视投影的解法

这里记录的是一种透视投影下平面点的转换算法,参考steger2017的论文。

【问题描述】
如下图所示,坐标系 ( x u , y u , z u ) (x_{u},y_{u},z_{u}) (xu,yu,zu)是水平面, ( x t , y t , z t ) (x_{t},y_{t},z_{t}) (xt,yt,zt)是倾斜面,透视点距离水平面距离为d,两个平面倾斜角为 τ τ τ,已知 P u P_{u} Pu,求 P u P_{u} Pu经过透视后在 P t P_{t} Pt中的坐标(已知 P t P_{t} Pt P u P_{u} Pu也可以)。
在这里插入图片描述

  1. ( x u , y u , z u ) (x_{u},y_{u},z_{u}) (xu,yu,zu) ( x s , y s , z s ) (x_{s},y_{s},z_{s}) (xs,ys,zs)
    套用上面的摄像机旋转, P s P_{s} Ps = u s T ∗ P u _{u}^{s}\textrm{T}*P_{u} usTPu
    u s T _{u}^{s}\textrm{T} usT = K s R K u − 1 K_{s}RK_{u}^{-1} KsRKu1
  2. ( x s , y s , z s ) (x_{s},y_{s},z_{s}) (xs,ys,zs) ( x t , y t , z t ) (x_{t},y_{t},z_{t}) (xt,yt,zt)
    是一个平移操作, s t T _{s}^{t}\textrm{T} stT
  3. ( x u , y u , z u ) (x_{u},y_{u},z_{u}) (xu,yu,zu) ( x t , y t , z t ) (x_{t},y_{t},z_{t}) (xt,yt,zt)
    最终的转换矩阵H: H H H = s t T ∗ K s R K u − 1 _{s}^{t}\textrm{T}*K_{s}RK_{u}^{-1} stTKsRKu1

具体参数解释:

K u K_{u} Ku相机内参矩阵,只需要考虑焦距 d d d即可。
K u K_{u} Ku = ( d 0 0 0 d 0 0 0 1 ) \begin{pmatrix} d & 0 & 0\\ 0 & d & 0\\ 0 & 0 & 1 \end{pmatrix} d000d0001

K s K_{s} Ks也是相机内参矩阵,此时焦距变为了 d s d_{s} ds d s d_{s} ds= c o s τ cosτ cosτ
K s K_{s} Ks = ( d s 0 0 0 d s 0 0 0 1 ) \begin{pmatrix} d_{s} & 0 & 0\\ 0 & d_{s} & 0\\ 0 & 0 & 1 \end{pmatrix} ds000ds0001

R R R旋转矩阵,(参考《机器人建模及控制》2.5.3)即两个平面的旋转矩阵,这里假定平面 ( x u , y u , z u ) (x_{u},y_{u},z_{u}) (xu,yu,zu) n n n轴旋转角度 τ τ τ ( x t , y t , z t ) (x_{t},y_{t},z_{t}) (xt,yt,zt) n n n轴和x轴夹角为 ρ ρ ρ,则:
n n n = ( c o s ρ s i n ρ 0 ) \begin{pmatrix} cosρ\\ sinρ\\ 0 \end{pmatrix} cosρsinρ0
在这里插入图片描述

s t T _{s}^{t}\textrm{T} stT
在这里插入图片描述

最终结果:
在这里插入图片描述

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

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

相关文章

【学习心得】浏览器开发者工具中出现的VM开头的JS文件是什么?

一、现象描述 在Chrome的开发者工具中,你可能会看到一些以“VM”开头的JavaScript文件(如“VM111.js”)。 二、VM文件到底是什么? “VM”表示的是Virtual Machine(虚拟机),这些文件通常表示由浏…

数据结构之树结构(上)

存储方式 数组存储方式的分析 优点:通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找提高检索速度。 缺点:如果要检索具体某个值,或者插入值(按一定顺序)会整体移动,效…

实时抓取SKU商品属性详细信息API数据接口(淘宝,某音)

item_sku-获取sku详细信息 taobao.item_sku详细信息 API公共参数 请求地址: https://api-gw.onebound.cn/taobao/item_sku 名称类型必须描述keyString是调用key(演示示例)secretString是调用密钥api_nameString是API接口名称(包括在请求地…

千帆杯——对话第一期最强挑战者

千帆杯——对话第一期最强挑战者 ​ 在2月22日晚,百度开展直播,邀请了千帆杯第一期最强挑战者杨之正、百度主任研发架构师董大祥老师、以及Datawhale成员司玉鑫为大家带来直播分享。我听了直播后,感觉受益匪浅,于是选择记录一下直…

基于springboot+vue的新冠病毒密接者跟踪系统(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

【Android】属性动画

在属性动画出现之前,Android 系统提供的动画只有帧动画和 View 动画。View 动画我们都了解,它提供了 AlphaAnimation、RotateAnimation、TranslateAnimation、ScaleAnimation 这4种动画方式,并提供了 AnimationSet 动画集合来混合使用多种动画…

实用指南:SOLIDWORKS数据失真问题的解决之道

在数据处理和模拟计算的过程中,数据失真是一个常见的挑战。数据失真指的是由于计算机或人为操作导致的原始数据与计算结果或实际情况之间的偏差。特别是在使用SOLIDWORKS这类工程设计软件时,数据失真可能由多种因素引起,如软件版本老旧、设置…

AI Word Helper (Chorme Extentions) AI单词助手(谷歌浏览器插件)

AI Word Helper (Chorme Extentions) AI单词助手(谷歌浏览器插件) 英文网站,划词查单词,还是看不懂?因为单词意思那么多,词性搞不清,上下文搞不清,出来的意思就没法用,G…

【Java】查看class文件的jdk编译版本的两种方式

一、使用文本编辑工具EditPlus 使用EditPlus打开该class文件,字符集选择16进制(Hex viewer)。 仅看第一行数据,前面8个字节CA FE BA BE是固定的。 之后4个字节00 00 是次版本。 次版本后面的4个字节00 34 就是jdk版本。 jdk版本…

OpenAPI工具、生成器

文章目录 一、OpenAPI工具二、OpenAPI文档四、OpenAPI Generator五、API规范(契约)参考 一、OpenAPI工具 OpenAPI.Tools OpenApi 文档编辑器,推荐使用:Stoplight StudioMock服务器,推荐使用Prism代码生成工具:OpenAPI Generator…

不可多得的干货,网易的朋友给我这份339页的Android面经

这里先放上目录 一 性能优化 1.如何对 Android 应用进行性能分析 android 性能主要之响应速度 和UI刷新速度。 首先从函数的耗时来说,有一个工具TraceView 这是androidsdk自带的工作,用于测量函数耗时的。 UI布局的分析,可以有2块&#x…

Kubernetes工作负载重点总结

文章目录 1、容器2、Pod3、工作负载4、Deployment5、StatefulSet5、DaemonSet6、Job7、CronJob 1、容器 容器: 容器是容器镜像的运行态,通过基于标准的容器运行时运行,将应用程序从底层的主机设施中解耦。 容器镜像: 容器镜像是一…

网友对阿里爸爸家的商标们说了一句话,惊呆了

只是没想到 没有什么是买不到的 今天科技界依然没有大事发生~ 嗯,世界和平世界和平。 。 。 然而,当我浏览微博时,我发现很多网友对阿里巴巴的商标非常感兴趣: 阿栗的爸爸、妈妈、兄弟、姐妹、祖父母、叔叔、阿姨,…

数据可视化基础与应用-02-基于powerbi实现医院数据集的指标体系的仪表盘制作

总结 本系列是数据可视化基础与应用的第02篇,主要介绍基于powerbi实现医院数据集的指标体系的仪表盘制作。 数据集描述 医生数据集doctor 医生编号是唯一的,名称会存在重复 医疗项目数据projects 病例编号是唯一的,注意这个日期编号不是真…

智慧灌区项目案例(甘肃省兰州市某重点灌区)

​甘肃省兰州市某重点灌区自上个世纪80年代建成后,灌溉面积达到30万亩,对推动当地农业发展发挥了重要作用。但长期以来,该灌区的水利管理仍主要依靠人工统计记录,缺乏实时监测和精细化管理。为实现灌区管理的现代化升级,甘肃水利局委托星创易联公司设计实施水利信息化项目。 项…

STM32自学☞AD单通道

程序的最终运行成果: 当转动电位器时,数值和电压值发生变化 ad.c文件 #include "stm32f10x.h" #include "stm32f10x_adc.h" #include "ad.h" #include "stdint.h" void ad_Init(void) { /* 初始化步骤:…

pause、alarm、kill——进程——day13

今天主要讲线程中信号的三个函数 1.pause 1.pauseint pause(void); 功能:让进程睡眠,直到接收到信号(捕捉)才能继续向下执行eg: #include "head.h"void handler(int signo) {return; }int main(void) {signal(SIGINT,handler);printf("pause up!\…

uniapp基于Android学生课程签到成绩管理系统_ilzd 微信小程序

通过前面的功能分析可以将教师事务管理系统的功能分为管理员和学生、教师三个部分,系统的主要功能包括课程信息、学生签到、学生成绩等内容。任何用户只要进入网站不需登录也可浏览到的信息,后台管理是针对已登录的用户看到满意的教师事务管理系统而设计…

文心一言 VS 讯飞星火 VS chatgpt (205)-- 算法导论15.4 1题

一、求〈1,0,0,1,0,1,0,1〉和〈0,1,0,1,1,0,1,1,0〉的一个LCS。需要写代码的时候,请用…

C++ //练习 10.7 下面的程序是否有错误?如果有,请改正。

C Primer&#xff08;第5版&#xff09; 练习 10.7 练习 10.7 下面的程序是否有错误&#xff1f;如果有&#xff0c;请改正。 (a) vector<int>vec; list<int> lst; int i;while(cin>>i)lst.push_back(i);copy(lst.cbegin(), lst.cend(), vec.begin());(b) …