搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
笔触狂放9
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
sora是什么?sora openai介绍
2
API是什么?API的基础知识你知道多少
3
GitLab 创建项目,clone地址由Localhost的方法_gitlab clone http是localhost
4
记录Ubuntu20.04安装、NVIDIA显卡驱动安装和cuda安装_nvidia ubuntu ai 20.04
5
Linux内核源码list.h解读_config_debug_list
6
国考怎么搜题答案?七个不限次的公众号和软件分享啦! #职场发展#媒体_国考推理在那搜题
7
Insight量子位智库 ✪ AIGC/Al生成内容产业展望报告_insight和量子位
8
【Unity动画】状态机中层的融合原理与用法详解_设置层的权重
9
Leetcode详细题解-JAVA版_letcodejava题解
10
Unity3D - 使用UnityWebRequest加载AssetBundle和Texture,进行缓存的方法_unitywebrequestassetbundle 会自动做缓存吗
当前位置:
article
> 正文
点云三维重建--基于两视图的射影重构,仿射重构以及度量重构_两张图进行点云三维模型的搭建
作者:笔触狂放9 | 2024-02-21 10:02:59
赞
踩
两张图进行点云三维模型的搭建
一段时间以来一直对三维重建中的分层重建概念理解的比较模糊,这两天特地梳理了一下,用博文记录下来,也希望给各位观众朋友们带来帮助。
NO0.两视图重建
基于图片序列的三维重建不管在科研还是实际应用中都有了比较成功的实现,Bundler就是一个很不错的例子,随后的VisualSFM也已经得到了很好的应用,近两年发展较快的还有SLAM等,而基于两视图实现空间点的三维重建便是构造完整图片序列三维重建的第一步。本文侧重于简单归纳实现两视图重建的理论基础,由于我们通过
摄像机
采集的照片中往往存在不同程度的误差或者噪声,因此如果只是简单的采用下面涉及的几何原理进行重建,得到的结果会和我们的预期有较大的差别,在实际的算法实现中还需要引入更多的技巧和方法,这里为了让重建原理更加简洁清晰,所以没有深入到算法实现的细枝末节。
根据重建结果的精确程度,可以将两视图重建分成三层,分别是:射影重构,仿射重构,度量重构(和相似重构以及大部分书里讲的欧式重构其实就是一个概念)。图2-图4显示了利用图1中两张图像在不同方法下获得的重建结果。
图1.用于重建的两张图像
图2. 通过射影重构方法获得的重建效果
图3.利用仿射重构的方法获得的重建效果
图4.利用度量重构的方法获得的重建效果
从重建的结果我们可以直观的看出,射影重建的结果只反映出了真实场景中直线之间的相交性;仿射重建结果则进一步反映出了真实场景中存在的直线平行关系;度量重构又进一步反映出了直线之间的夹角关系,实际场景中两条直线之间的夹角为多少度,重建结果中就为多少度。由此我们可以知道,射影重构,仿射重构和度量重构组成了进行三维重构由低到高的三个层次。度量重构的结果是和场景的实际三维情况最为接近的,假如我们将场景的实际三维情况称为真实的
欧式
重构,那么度量重构和真实的欧式重构之间其实还相差一个相似变换(所以度量重构又被称之为相似重构),但是除了不能从模型中测量出场景真实尺寸以外,度量重构的结果已经能够满足我们的大部分需求。
有了对两视图重建三个层次的初步了解,下面我就来梳理一下要实现这三个层次的重建需要的条件有哪些,涉及到的重要概念和结论有哪些,以及重建的过程是怎样的。
**********************\0o. 华丽丽的分割线 .o0/***********************
在上述假设的基础上,下面分别对射影重构,仿射重构和度量重构进行分析。
NO1.射影重构
图5.进行射影重构的反向推导图
在实际的求解过程中,首先需要利用特征点提取和匹配算法获得两个视图的匹配点对,然后基于这些匹配点对求得和这两个视图相关的基本
矩阵
F,根据已有的结论,在获得基本矩阵F的情况下,摄像机矩阵可以选择为
,其中
是满足
的对极点。然后结合前面两个视图中的匹配点对求得他们对应的空间点三维坐标,这样就完成了三维点云的射影重构。
那么根据两个视图中的信息我们获得的重建结果是否就是唯一的呢?通过进行理论推导我们可以证实,这样的重建结果并不唯一。下面就分两种情况对这种重构的多义性进行分析:
上述理论推导对重建来说有两个重要的意义:
1.仅仅根据图像的对应便可以求出摄影重构,如果我们知道了一个摄影重构
2.如果进一步求出能够实现摄影重构和真正的欧式重构之间的非奇异
矩阵
H,那么我们便可以根据射影重构定理得到真实的欧式重构了!!!Perfect^O^.
摄影
重构的内容现在知道的大概就这些了,以后还会补充。下面进入到更高一层的重构----仿射重构。
NO2.仿射重构
因为该方法获得的重建结果再经过一个仿射变换便可以得到真实的欧式重建结果,所以我们称这种方法为仿射重建。从本文开始的实例中我们知道,仿射重建能够得到比射影重建更加符合实际场景三维信息的重建结果。仿射重建本身就是在摄影重建的基础上通过添加更多的约束条件实现的。这里添加的约束条件就是对无穷远平面的定位。因此我们可以认为仿射重建的本质就是采用某些方法定位无穷远平面。要定位一个平面,我们只要知道该平面上的三个点即可,而具体如何找到这样的三个点就是仿射重建的主要任务,方法有很多,下面会进一步解析。如果不出意外的话经过求解我们可以得到一个在射影空间中表示无穷远平面的四维矢量,这里用
来表示,而在真实的重构下
的坐标是
。所以只要找到使
映射到
的射影变换
,我们便大功告成,得到了真实的
欧式
重构,等等,情况好像并不是那么简单的,先驱们已经发现:一个固定无穷远平面的射影变换其实充其量就是一个仿射变换,因此这个重构和真实的重构还相差一个仿射变换,这种重构方法也就被称为仿射重构了。同时他们也揭开了这个
的神秘面纱,它就是:
,
接下来我们将变换
作用到所有点和两个
摄像机
上,那么便得到了仿射重建的结果。
现在思路已经很清晰了,接下来我们只要找到无穷远平面上3个点,进而求出了这个无穷远平面的方程,那么仿射重建也就水到渠成了,下面就重点记录下这些方法:
M1.采用平移运动实现仿射重构
根据常识,当一个人沿一条直线运动时,距离很远的物体(比如月亮)好像是固定不动的,图6就是一个很好的例子,两幅图像中的对极点在两幅图像中的像素点位置是一样的。因此从一对视角中我们可以很容易的找出这样的三个以上的点对(当然有些图像还是不行的),并且可以确定:投影形成这些点对的原始三维点肯定处于无穷远平面上,所以我们就确定了无穷远平面的方程。这个方法也可以不通过求解无穷远平面方程来进行重建的,因为我们将运动限制在了纯平移运动的范围内,所以两个视角之间的基本
矩阵
F就是一个反对称矩阵,这样就大大简化了我们的求解过程。在这种情形下有这样一个结论:
假设摄像机的运动是没有旋转且内参保持不变的一个纯平移运动,那么他的基本矩阵F就是一个反对称矩阵,
,并且作为仿射重构的两个摄像机矩阵可以是
。然后我们将这对摄像机
矩阵
作用到原来的点对上也就得到了三维点的坐标。但是这个方法在实际的数值计算中并不好实现,往往用的较多的是下面一种基于平行直线的方法。
图6.左右两张图像只包含了一个平移运动,两张图中的对极点在两张图像中的像素坐标是完全相同的
M2.利用场景中的平行直线
3D场景中平行直线的交点就是是位于无穷远平面上的,而这些直线被映射到图像上之后并往往不能保持平行,我们可以通过一些方法定位出他们的交点,这个点就是无穷远平面上一点在图像中投影形成的像。反过来将这个点用摄像机
矩阵
投影回去,便得到了一条和无穷远平面存在交点的射线。两个视角下的射线相交便得到了一个交点,且这个交点一定位于无穷远平面上。在图片上找到三组以上实际3D场景中的平行线,也就确定了三个无穷远点,无穷远平面也就确定下来了。
这个方法的重点就是找到消影点对,当我们找到图像A中的一组平行线的消影点以后,为了简化计算在B图像中只要找到这一组平行线中的一条,然后A图中的消影点在B图中对应的极线,求这两条直线的交点就好了。然后根据摄像机
矩阵
进行投影求交点,问题便迎刃而解了。:)这种方法也是最为常用的。
M3直线上的距离比
略
M4通过无穷单应矩阵求解
上述内容已经包括了进行射影重构的主要框架,但是在仿射重建中我们还发现了一个十分有用的无穷单应矩阵,下面主要讲述该矩阵的获取和用处。
无穷单应的作用就是将图像A中的一个点通过无穷远平面转移到两一张图像B上,代数表达就是:
,如果两个摄像机的
矩阵
分别是
,那么
,因此我们有了如下结论:如果一个仿射重构已经得到并且其中的摄像机矩阵是
,那么无穷单应
矩阵
就是
。无穷单应矩阵的关键作用在于:当已知无穷单应为H的时候,仿射重构的摄像机可以取为
。而H则可以通过三个消影点和F来计算(或者通过一条消影线与消影点对应和F来计算),具体计算方法还在学习中。。。
M5其中一个摄像机是仿射摄像机条件下的重建方法
仿射摄像机:是指摄像机矩阵的最后一行为(0,0,0,1)形式的摄像机,因为它将无穷远点映射为无穷远点(就是图像中找不到的意思吗?),所以把它叫做仿射摄像机。
如果一个摄像机是仿射摄像机,那么他的主平面就无穷远平面,而他的主平面就是仿射重构下相应摄像机
矩阵
的第三行,因此只要将摄像机矩阵第三行表示的平面映射到
,就可以得到仿射重构了。为了完成这个至关重要的平面映射我们需要做什么呢?其实我们要做的非常简单,保证一个前提,做到两个步骤。前提就是:两个摄像机矩阵形式必须是
,且P是一个仿射摄像机(其实任何一对规范的摄像机
都可以变换成P是仿射的摄像机对,具体怎么变换的还在研究中。。。)。步骤就是:1.交换两个
矩阵
的最后两列。2.交换每一个
的最后两个坐标,这样便得到了一个仿射重建。
事实上,真实的仿射
摄像机
是不存在的,我们只是为了方便而进行了一种近似,这种近似是有效的前提条件是:图像上看到的点的深度变化相对于它到摄像机的距离比较小。仿射重构的内容终于O-V-E-R了,下面进入到巅峰重建----度量重构,先喝口水。。。
NO3.度量重构
仿射重构的重点是找到无穷远平面,而度量重建则是在仿射重建的基础上找到绝对二次曲线,利用绝对二次曲线在仿射重构和真实的欧式重构之间的变换关系,将整个仿射重建的结果过提升为度量重构。绝对二次曲线在多个重构结果之间的方程是不变的(这里也说明了度量重构结果不是唯一的),因此它被称为绝对二次曲线。我们本来的目标是在仿射重构的基础上通过找到合适的
矩阵
,使得该绝对二次曲线映射为真实欧式空间中的绝对二次曲线。但是我们发现经过努力之后,得到的重建结果仍旧和真实的欧式重建有一定的差距,这个差距可以用一个相似变换来描述,但是这已经达到了度量重构的目的,重建结果也能够满足大部分的需求了。在这一步才开始用到了摄像机的标定矩阵。
现在问题再次归结为找到使仿射重建结果变换到度量重建结果的单应矩阵上来了,这个单应矩阵到底是怎样的,该怎么求得。已有的研究成果告诉我们,这个单应矩阵其实早就已经被发现了,所以我们就不用再做无用功了。我们有这样的结论:如果已知绝对二次曲线在某一幅图像中的像是
,且和这幅图像对应的仿射重构中的摄像机
矩阵
是
,那么就有这样一个
,他实现了由仿射重建到度量重建的一个飞跃。。。,形式如下:
,
其中的A由方程
经过Cholesky分解得到(是否意味着使用一对图像中的另一摄像机
矩阵
就会得到不一样的度量重构结果?因为两一张图像的摄像机矩阵肯定不同)。纵观上述式子我们发现只有其中的
是未知量,因此求取
的问题归结为求取
的问题,下面就来说说求取这个
有哪些方法:
M1.已知内参条件下的求解方法
如果相机的标定
矩阵
(也就是内参)K是已知的,那么绝对二次曲线在这张图像上的投影曲线方程为
,由此也可以看出一旦摄像机的内参确定了,那么绝对二次曲线在他所拍摄的图像中的方程也就确定了,不管外参怎么变化,这个方程式永远不变的。特殊情况1:当K的扭曲因子为0时(即s=0,对大多数标准摄像机来说,扭曲因子都是0,不是0的情况只发生在CCD阵列的像素元素产生扭曲使得x和y轴不垂直的情况下),
。特殊情况2:在1的基础上如果像素还是正方形的(即
),那么
。看起来这种方法是最实用的,而且特殊情况基本都符合实际情况,所以优先考虑这条思路。
M2.根据景物正交性约束的求解方法
景物正交直线的一对消影点(如图7所示)V1和V2就形成了对绝对二次曲线在这张图像中
投影
的一个约束
。类似的,来自一个方向的消影点V和与之垂直的平面消影直线l对
提供了另外的约束
(一个常用的例子就是垂直方向的消影点和水平地面平面的消影直线)。
图7.图中横的和竖的两组直线各有一个消影点
M3.同一
摄像机
在多幅图像中的约束
在多张图像中,因为摄像机没有变,所以绝对二次曲线的投影
在任何一个视图中都不会发生改变,再利用仿射重建中的无穷单应将其中一张图像中的
转换到另外一张图像上,
,这个方程会得到关于
的4个约束,而
有5个自由度,因此还需要额外的信息加入才能获得解。
M4.如果
已知,直接利用它求得度量重构
一条思路是根据
计算出两个摄像机的内参,然后利用本质
矩阵
和基本矩阵,内参之间的关系求得本质矩阵,然后利用本质矩阵恢复这相机矩阵,接着进行三维重建。
NO4.终极巅峰重构
这一部分所讲的是由射影重构结果直接升级为度量重构。
两种方法:下面分别介绍:
M1:在射影重构下空间点的集合为{
},这些点的对应坐标在射影重构下很容易通过计算获得。射影重构结果和实际的欧式重建结果可以通过一个单应
矩阵
联系起来:
(其中i=1,2,3......n)
每一组点对提供三个独立的线性方程,而H有15个自由度,因此需要5对以上(且没有四个控制点是共面的)的对应点就可以求出这个H。
M2:另一种方法是不经过计算
,而利用对真实的欧式空间中的点进行
投影
变换和图像中的点对应关系得到方程,从而得到解,方程形式如下:
一个对应点对产生两个方程,所以总共需要7对以上的对应点才能接出H,同时要注意如果是两张图像的一对对应点,则这一组点由于共面的关系,得到的4个方程中只有3个是线性无关的。这种方法和上一种方法相比的优势在于不需要欧式空间点
在两张图像中的对应点都被找到,而上一种方法则要求,不然没法求出射影重建下
的三维坐标。图8展示的是在射影重建下利用5个世界点坐标进行度量重建的实例。
图7.在射影重建下利用空间点的
欧式
物理坐标进行度量重建的步骤和结果
以上就是两视角重建相关的内容学习小结,各位亲爱的观众朋友们,如果你能够看到这句话才停下来,那你一定是一个非常伟大的人,感谢你宽广的胸怀接纳了我拙劣,对,就是拙劣的文笔和混论逻辑下的重建原理,我一定要向你表示敬意!!!如果发现文中有错误,请在下面直接回复给我,一定要毫不犹豫的做到^o^,我会尽快回复的。
NO5.俩视图重建方法小结
给定两幅未标定的图像,计算
摄像机
和景物结构的一个度量重构
可以通过以下的方法实现:
(1)计算射影重构
;
(a)由两幅图像之间的点对
计算基本
矩阵
(b)由基本矩阵计算摄像机矩阵
(c)根据匹配点对
,利用摄像机
矩阵
进行反投影得到空间点
坐标。
(2)有射影重构提升到度量重构
这一步有两种方法,要么根据在欧式空间中已知位置的5个点直接计算满足
的单应矩阵H,再将H作用到射影重构下的摄像机矩阵和空间点坐标上便得到了度量重构。要么再用分层的方法进行由两个步骤实现的重构:
(a)首先进行仿射重构,计算出无穷远平面
,然后用单应
矩阵
把射影重构提升到仿射重构。
(b)在进行度量重构,按照前面所述的方法找到绝对二次曲线的像
,然后用单应
对仿射重建结果进行提升。其中A由
经过
Cholesky分解得到,M是仿射重建中摄像机
矩阵
左边的3*3子矩阵。
Reference:
1.计算机视觉中的多视图几何,中文版第一版
2.Mastering OpenCV with practical Computer Vision Projects
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/笔触狂放9/article/detail/122827
推荐阅读
article
2023秋招
--
腾讯
天美
--
游戏
客户端
--
二面
面经
_
天美
游戏
客户端
面经
...
2023秋招
--
腾讯
天美
--
游戏
客户端
--
二面
面经
_
天美
游戏
客户端
面经
天美
游戏
客户端
面经
...
赞
踩
article
mysql
怎么查看
undo
文件大小
_
MySQL
中的
undo
日志
...
概念介绍:我们知道,
MySQL
中的redo
日志
记录了事务的行为,在服务器宕机的时候,可以通过重做事务来达到恢复数据的目的...
赞
踩
article
HarmonyOS鸿蒙
开发
指南:基于
ArkTS
开发
设备
管理
位置
开发
_
设备
位置
信息怎么获取 前端 ...
移动终端
设备
已经深入人们日常生活的方方面面,如查看所在城市的天气、新闻轶事、出行打车、旅行导航、运动记录。这些习以为常的...
赞
踩
article
yolov8
实例
分割
,一步一步带你操作,手把手教学_
yolo8
图像
分割
标注
工具...
然后,把classes下面的目录删掉,只留一行(需要说明的是,因为我们这个是单个
实例
分割
,即只需要
分割
出图片中的穿山甲即...
赞
踩
article
(附源码)
springboot
高校学生
健康
打卡
系统
的
设计
与实现 毕业
设计
021009_个人
健康
打卡
...
系统
采用了Java技术,将所有业务模块采用以浏览器交互的模式,选择MySQL作为
系统
的数据库,开发工具选择My ecli...
赞
踩
article
Unity
使用
JsonUtility
、
ListJson
、
Newtonsoft
解析
JSON
数据附带每种...
Unity
解析
JSON
的几种方式使用
JsonUtility
(
Unity
自带)
解析
数据使用
ListJson
解析
JSON
数据...
赞
踩
article
微信
小
程序
开发学习笔记《8》
tabBar
_
微信
小
程序
tabbar
...
tabBar
是移动端应用常见的页面效果,用于实现多页面的快速切换。底部
tabBar
顶部
tabBar
注意: tabBa...
赞
踩
article
Stable
Diffusion
提示词备忘录_
stable
diffusion
提示词大全...
【代码】
Stable
Diffusion
提示词备忘录。_
stable
diffusion
提示词大全
stable
dif...
赞
踩
article
mysql
-
锁
_
mysql
锁
...
一、基础概念
锁
是数据库系统区分与文件系统的一个关键特性。为了保证数据一致性,必须有
锁
的介入。数据库系统使用
锁
是为了支持对...
赞
踩
article
使用
AIDL
实现两个
APP
之间跨
进程
通信
...
昨天我们主管说准备把项目拆分一下,因为现在项目依赖了好几个负责串口通讯Library,准备把这些Library变成独立的...
赞
踩
article
Unity
AR
应用
(
人脸识别
)手把手教程_
unity
人脸识别
...
Unity
官方有个教程,照着一步一步操作,就能做出一个典型的
AR
应用
:
人脸识别
+虚拟穿戴。真是难以置信:整个制作过程不需...
赞
踩
article
终于把
AI
换脸
的
原理搞清
了
...
近日一段
AI
换脸
视频火爆网络,一个网名叫
换脸
哥
的
Geek,将朱茵在94版射雕中
的
黄蓉换成
了
杨幂。后来甚至有
的
主播利用类似...
赞
踩
article
控制
并发
线程
数的
Semaphore
_
semphone
...
控制
并发
线程
数的
Semaphore
Semphone是信号量
控制
同时访问某一个资源的
线程
数量,以上厕所为例,假如10个人去...
赞
踩
article
认真学习
MySQL
的
事务
日志
-Undo
日志
_
mysql
10
分钟的
事务
,
undolog
会变化吗?...
redo log是
事务
持久性的保证,undo log是
事务
原子性的保证。在
事务
中更新数据的前置操作时要先写入一个undo...
赞
踩
article
python
刷题
第一天
打卡
index
()
,
range
()等_
range
index
python
...
1.
index
()方法str.
index
(str
,
beg=0
,
end=len(string))str——指定检索的字...
赞
踩
article
mysql
ibata
文件
_【
MySQL
】
ibdata
文件
增大
的原因...
背景早上和一个同事讨论技术问题,谈到
ibdata
文件
会随着
ibdata
1 存放哪些数据?表数据/索引 (inno什么原因...
赞
踩
article
Python
进阶05
循环
设计_
python
中
for
i
i
n
len...
在“
循环
”一节,我们已经讨论了
Python
基本的
循环
语法。这一节,我们将接触更加灵活的
循环
方式。 range() 在...
赞
踩
article
DBProxy
sh
bootstrap
.sh失败...
增加MYSQL_CONFIG=/usr/local/mysql,指定mysql安装目录。记录
DBProxy
安装问题。修改...
赞
踩
article
TensorFlow
中
读取
图像
数据
的三种方式_
tensorflow
读取
pil
pngimagef...
Update on 2019.06.18从tesorflow1.11之后,(大概是这个版本号),谷歌推出了tf.data...
赞
踩
article
点云
(刚性)
配准
--
icp
_
点云
刚性
配准
...
icp
前言一、
icp
原理与步骤二、使用步骤1.引入库2.读入数据总结前言提到
配准
算法,
icp
认第二,没哪种算法敢认第一,...
赞
踩
相关标签
游戏
unity
游戏引擎
面经
mysql怎么查看undo文件大小
harmonyos
华为
分布式
设备管理
位置
鸿蒙开发
ArkTS
yolov8
java
spring boot
html
python
php
unity3d
微信小程序
学习
笔记
stable diffusion
mysql
数据库