使用几何和线性代数从单个图像进行 3D 重建

news2024/11/25 22:43:10

使用几何和线性代数从单个图像进行 3D 重建

萨蒂亚

萨蒂亚

一、说明

        3D重构是一个挑战性题目,而且这个新颖的题目正处于启发和膨胀阶段;因此,各种各样的尝试层出不穷,本篇说明尝试的一种,至于其它更多的尝试,我们在陆续的跟踪中。

二、介绍

图1

        以上这3张图片有什么共同点?如果你的猜测是平行线,那么你是对的。这种几何属性是艺术家用来在其艺术中呈现 3D 视图的主要工具。此属性也是从单眼摄像头或单个图像构建 3D 视图的主要支柱。让我们在本文中讨论这个问题。

        我通过将图 3 中存在的第 3 张图像作为输入来重建 1D 场景。此实现存在一些缩放和指标校正问题。我会在某个时候解决这个问题。

图2–从单个图像进行3D重建

请观看视频。

这里的主要思想是如何利用几何和线性代数从单眼相机或单个图像重建 3D 视图。

三、概述

        从单个图像进行3D重建主要取决于您如何使用几何结构从单个图像或单眼相机获得K和R值。

相机校准(K)值主要负责将2D点从图像平面反向投影到3D空间,旋转(R)值捕获所有结构之间的旋转

图3

单图像或单眼相机的3D重建过程通常涉及2步过程

  1. 找到 K 和 R
    1.1。使用前向投影。

    1.2. 使用几何结构。
  2. 背投
    这涉及将 2D 图像点投影到 3D 空间。

四、线性代数

        让我们讨论一些关于线性代数的基础知识以及如何使用它们。我想到的基本问题是为什么需要线性代数?简短的回答是:

几何结构根据一些线性方程给出了场景中存在的不同点/线/圆锥之间的关系,这就是为什么需要线性代数来求解方程并找到未知数的原因。

        以下是线性代数的概述。请参考。

当您设计线性方程组时,它属于以下类别之一:

  • 方形系统(m = n)
  • 矩形系统 (m !=n)- 在确定系统(n > m)- 在确定系统(m > n)
     

当您使用直接线性变换(DLT)时,非常需要上述理解。

我认为有了上述理解,我们可以进入下一阶段。

五. 找到 K 和 R :

5.1. 使用前向投影

图5

在前向投影中,已知的 3D 点(假设 X)首先将其转换为相机坐标系,然后转换为图像坐标系,从而投影到图像平面(假设 x)上。整个过程表示为:

x = PX — -等式(1)

其中 P 是 4x3 投影矩阵。P可以分解为KR[I | -C],其中K=相机校准,R=旋转,C=相机中心。

如果已知 3D 点和 2D 点,则只需要从方程 (1) 中找到 P。所以我们需要了解P的自由度。

P 具有 11 个自由度(不包括比例因子)。

K = 5,R = 3, C= 3

图6

如果 P 有 11 个自由度,这意味着它需要 5 个零 1/2 个点来求解线性方程。这是不可能的,所以我们需要拿6分。

图7

根据上述计算,n = 11 和 m=12。因此,据说该系统是过度确定的,可以有多个解决方案并且需要近似。参见图4。

如何使用直接线性变换(DLT)获得K和R:

DLT基本上形成了方程PX=0的线性系统,并从中找到K和R。它被归类为

  • 基本 DLT。
  • 标准化的 DLT。
    此版本与相机中心的原点不变。因此,它是比基本DLT更受欢迎的一种。
  • 具有成本函数的DLT。
    在超定解的情况下,线性系统可以有许多解。因此,我们需要用一些成本函数(例如代数成本)近似解。

在这里,我们只讨论基本的DLT。

图8

请检查 GitHub - satya15july/2d_3d_corespondence 的实现。

5.2. 使用几何结构:

以下是针孔相机型号中使用的不同几何形状的简短摘要

图10

上述所有几何形状均用于针孔相机模型,用于3D图像重建。

图11

这是射影几何、仿射几何和欧几里得几何之间关系的简化视图。

图12

如何从单视图几何中获取 K 和 R

首先,您需要了解仿射几何、射影几何和欧几里得几何中存在的一些属性。

  1. 角度属性不保留在射影几何或仿射几何中,但它保留在欧几里得几何中。
  2. 圆锥和圆在欧几里得几何中可以唯一标识,但射影几何只能识别点,线和圆锥(圆作为圆锥)。
  3. 如果要在射影几何中找到射线或平面或直线之间的角度,则必须识别圆锥或绝对圆锥(IAC)的图像。原因是
    - 圆锥由欧几里得几何和射影几何确定。
    - 消失线在 2 个圆形点处与锥相交。

以下是从 IAC 获得 K 和 R 的方法

Fig.13

As from the above figure,the first step to find K and R is

  • Find Omega(w).
  • Then, find K and R.

How to Get Omega from 3 orthogonal vanishing pairs:

Omega can be found easily if 3 orthogonal vanishing points are present.Please check the below diagram.

Fig.14

Any line can intersect a cone/eclipse in 1 or 2 points.So vanishing line intersect a cone at max in 2 points.

Here is the detailed explanation of how cone to omega equation is derived.

图15

如果我们可以施加一些额外的约束,例如,

  • 如果使用方形像素,则 w1==w3 。
  • 如果没有使用比例因子,则 w2=0

然后欧米茄基质变成

请检查 GitHub - satya15july/find_K_from_orthogonal_planes 的实现。

从几何结构中找到欧米茄后,您可以轻松地从中获得K和R。请参考图 13。

六、 背投

图16

让我们在其他文章中讨论这个问题,因为我不想让这篇文章变得大。

七、结论

        校准相机意味着K是已知的,我们需要知道R,因为我们需要了解场景中存在的2个结构之间所需的旋转。在这里,我们了解如何使用不同的方法从单个图像中找到它们。

现在的问题是,在了解了这种技术之后,我们如何从单个图像或单眼相机重建3D场景。

检查下面的图像或任何随机的街景,我们如何通过使用上述技术重建它?我们可能需要哪些其他技术。这是一个有趣的问题。解决方案在某个时候再见。

        让我们在这里暂停一下,我希望这篇文章能让您清楚地了解 3D 重建的工作原理。感谢您的阅读。

        具体的实现在

  • GitHub - satya15july/2d_3d_corespondence。
  • GitHub - satya15july/find_K_from_orthogonal_planes。
  • GitHub - satya15july/find_K_from_non_othogonal_planes。
  • GitHub - satya15july/3dreconstruction_single_image。

        如果您喜欢这些内容,欢迎拍手,并关注我以获取有关计算机视觉,3D重建和深度学习的更多信息内容。

引用

  • 计算机视觉中的多视图几何,作者:Richard Hartley 和 Andrew Zisserman。

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

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

相关文章

uniapp+vue3项目中使用vant-weapp

创建项目 通过vue-cli命令行创建项目 Vue3/Vite版要求 node 版本^14.18.0 || >16.0.0 uni-app官网 (dcloud.net.cn) npx degit dcloudio/uni-preset-vue#vite my-vue3-project打开项目 点击顶部菜单栏终端/新建终端 执行安装依赖指令 yarn install 或 npm install 安装vant…

AI语音工牌在通讯行业营业大厅场景应用

在运营商营业大厅中,每天都有大量的客户来访咨询、办理业务。同时也会经常产生大量的客诉纠纷和服务差评。但因为缺乏有效的管理工具,加上线下沟通场景的数据采集难度高,数字化程度低,管理一直处于盲区。如何有效的管控营业厅人员…

从三个主要需求市场分析,VR全景创业的潜力发展

VR全景,5G时代朝阳产业,其实拍摄制作很简单,就是利用一套专业的相机设备去给商家拍摄,结合后期专业的3DVR全景展示拍摄制作平台,打造3D立体环绕的效果,将线下商家真实环境1:1还原到线上&#xf…

从C语言到C++_31(unordered_set和unordered_map介绍+哈希桶封装)

目录 1. unordered_set和unordered_map 1.1 unordered_map 1.2 unordered_set 1.3 unordered系列写OJ题 961. 在长度 2N 的数组中找出重复 N 次的元素 - 力扣(LeetCode) 349. 两个数组的交集 - 力扣(LeetCode) 217. 存在重…

NIO 非阻塞式IO

NIO Java NIO 基本介绍 Java NIO 全称 Java non-blocking IO,是指 JDK 提供的新 API。从 JDK1.4 开始,Java 提供了一系列改进的输入/输出的新特性,被统称为 NIO(即 NewIO),是同步非阻塞的。NIO 相关类都被…

AIGC 浪潮下,鹅厂新一代前端人的真实工作感受

点击链接了解详情 原创作者:张波 腾小云导读 AIGC 这一时代潮流已然不可阻挡,我们要做的不是慌乱,而是把握住这个时代的机会。本文就和大家一起来探索在 AIGC 下,前端工程师即将面临的挑战和机遇。聊聊从以前到现在,A…

诸神之战:数字时代的低代码服务商与代理商究竟谁更强?

随着数字化转型浪潮的推进,企业对数字化应用开发的需求迅速增长。低代码作为一种新的软件开发范式,以其可视化和快速构建应用的能力,被广泛应用于成千上万家企业中。当低代码行业的逐渐发展成熟,越来越多的人看到了低代码的商业价…

使用乐观锁解决超卖问题

目录 什么是超卖? 乐观锁和悲观锁的定义 悲观锁: 乐观锁: 乐观锁的实现方式 1.版本号 2.CAS法 什么是超卖? 举个例子:订单系统中,用户在执行下单操作时,可能同一时间有无数个用户同时下单&…

平替版Airtag

Airtag是什么? AirTag是苹果公司设计的一款定位神奇,它通过一款纽扣电池进行供电,即可实现长达1-2年的关键物品的定位、查找的功能。 按照苹果公司自己的话说—— 您“丢三落四这门绝技,要‍失‍传‍了”。 AirTag 可帮你轻松追…

USB(二):Type-C

一、引脚定义 Type-C口有 4对TX/RX差分线,2对USB D/D-,1对SBU,2个CC,4个VBUS和4个地线Type-C母座视图: Type-C公头视图: 二、关键名词 DFP(Downstream Facing Port): 下行端口&#xff0c…

【云原生】Pod的进阶

目录 一、资源限制二、重启策略三、健康检查 ,又称为探针(Probe)3.1示例1:exec方式3.2示例2:httpGet方式3.3示例3:tcpSocket方式3.4示例4:就绪检测3.5示例5:就绪检测2 四、启动、退出…

设置VsCode 将打开的多个文件分行(栏)排列,实现全部显示

目录 1. 前言 2. 设置VsCode 多文件分行(栏)排列显示 1. 前言 主流编程IDE几乎都有排列切换选择所要查看的文件功能,如下为Visual Studio 2022的该功能界面: 图 1 图 2 当在Visual Studio 2022打开很多文件时,可以按照图1、图2所示找到自…

价格监测与数据分析的关系

所谓的价格监测,其实可以理解为是低价数据的监测,当监测价格时,其他页面上的商品数据也会被同时采集监测,如标题、库存、销量、评价等内容,所以品牌在做电商价格监测时,其实也可以对数据进行分析。 力维网络…

【React学习】—jsx语法规则(三)

【React学习】—jsx语法规则(三) 一、jsx语法规则: 1、定义虚拟DOM,不要写引号, 2、标签中混入JS表达式要用{} 3、样式的类名指定不要用class,要用className 4、内联样式,要用style{{key:value}…

linux环形缓冲区kfifo实践2:配合等待队列使用

基础 struct __wait_queue_head {spinlock_t lock;struct list_head task_list; }; typedef struct __wait_queue_head wait_queue_head_t; 初始化等待队列:init_waitqueue_head 深挖init_waitqueue_head宏的定义可知,传递给它的参数q是一个wait_queu…

pytest 编写规范

一、pytest 编写规范 1、介绍 pytest是一个非常成熟的全功能的Python测试框架,主要特点有以下几点: 1、简单灵活,容易上手,文档丰富;2、支持参数化,可以细粒度地控制要测试的测试用例;3、能够…

分享之python 协程

线程和进程的操作是由程序触发系统接口,最后的执行者是系统;协程的操作则是程序员。 协程存在的意义:对于多线程应用,CPU通过切片的方式来切换线程间的执行,线程切换时需要耗时(保存状态,下次继…

Redux中reducer 中为什么每次都要返回新的state!!!

Redux中reducer 中为什么每次都要返回新的state!!! 最近在学习react相关的知识,学习redux的时候遇到看到一个面试题: 如果Redux没返回新的数据会怎样? 这就是要去纠结为什么编写reducer得时候为什么不允许直…

LT8711HE 是一款高性能的Type-C/DP1.2到HDMI2.0转换器

LT8711HE 1.描述 LT8711HE是一种高性能的Type-C/DP1.2到HDMI2.0转换器,设计用于连接USB Type-C源或DP1.2源到HDMI2.0接收器。LT8711HE集成了一个DP1.2兼容的接收器,和一个HDMI2.0兼容的发射机。此外,还包括两个CC控制器,用于CC通…

Linux Maven 安装与配置

目录 Maven 下载 解压缩下载的文件 移动Maven文件夹 配置环境变量 验证安装 注意 Maven 下载 官方地址 Maven – Download Apache Maven,下载完成后,解压到合适的位置即可; 解压缩下载的文件 解压缩下载的文件: 使用以下命…