使用幾何和線性代數從單個圖像進行 3D 重建

使用幾何和線性代數從單個圖像進行 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 的方法

圖.13

由上圖可知,求K和R的第一步是

  • 找到歐米茄(w)。
  • 然后,找到 K 和 R。

如何從 3 個正交消失對中獲取 Omega:

如果存在 3 個正交消失點,就可以輕松找到 Omega。請檢查下圖。

圖.14

????????任何直線都可以與圓錐體/日食相交于 1 或 2 個點。因此消失線最多與圓錐體相交于 2 個點。

????????這里詳細解釋了錐體到歐米伽方程是如何推導的。

????????????????????????????????????????????????????????????????圖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.pswp.cn/news/35485.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/35485.shtml
英文地址,請注明出處:http://en.pswp.cn/news/35485.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

nlohmann json:通過at讀取及設置object和array

讀取及設置: #include <iostream> #include <nlohmann/json.hpp> using namespace std; using json = nlohmann::json;int main() {json data = R"({"name": "xiaoming","age": 10, "parent": [{"father&qu…

RTT(RT-Thread)IO設備模型

目錄 IO設備模型 模型框架原理 IO設備類型 創建和注冊IO設備 RTT設備管理程序實現原理 訪問IO設備 查找設備 初始化設備 打開設備 關閉設備 控制設備 讀寫設備 數據收發回調 數據接收回調 數據發送回調 設備模型實例 IO設備模型 RT-Thread 提供了一套簡單的 I/O …

網絡編程(TFTP協議實驗)

#include <stdio.h> #include <string.h> #include <stdlib.h> #include <head.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <netinet/in.h>#define PORT 69 //端口號&#xf…

網絡安全威脅與防御策略

第一章&#xff1a;引言 隨著數字化時代的快速發展&#xff0c;網絡已經成為人們生活和工作中不可或缺的一部分。然而&#xff0c;網絡的廣泛應用也引發了一系列嚴峻的網絡安全威脅。惡意軟件、網絡攻擊、數據泄露等問題層出不窮&#xff0c;給個人和企業帶來了巨大的風險。本文…

mysql基礎之觸發器的簡單使用

1.建立學生信息表 -- 觸發器 -- 建立學生信息表 create table s1(id int unsigned auto_increment,name varchar(30),score tinyint unsigned,dept varchar(50),primary key(id) );2.建立學生補考信息表 -- 建立學生補考信息表 create table s2 like s1;3.建立觸發器&#xf…

java 自定義xss校驗注解實現

自定義一個注解Xss。名字隨意 import javax.validation.Constraint; import javax.validation.Payload; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Targe…

深入理解與運用Android Jetpack ViewModel

在Android開發中&#xff0c;數據與界面的分離一直是一項重要的挑戰。為了解決這個問題&#xff0c;Google推出了Android Jetpack組件之一的ViewModel。ViewModel是一種用于管理UI相關數據的架構組件&#xff0c;它能夠幫助開發者實現優雅的數據驅動和生命周期管理。本文將深入…

C字符串練習題(6.3.1)

編寫一個程序&#xff0c;從鍵盤上讀入一個小于1000的正整數&#xff0c;然后創建并輸出一個字符串&#xff0c;說明該整數的值。例如&#xff0c;輸入941&#xff0c;程序產生的字符串是“Nine hundred and forty one”。 #include<stdlib.h> #include<string.h>…

前端HTML入門基礎

階段目標&#xff1a;掌握HTML、CSS常用布局技巧&#xff0c;能夠獨立制作網頁。 day01&#xff1a;HTML 基礎 目標&#xff1a;掌握標簽基本語法&#xff0c;能夠獨立布局文章頁。 01-今日課程介紹 今日目標&#xff1a;掌握標簽基本語法&#xff0c;能夠獨立布局文章頁。 核心…

SQL中CONVERT函數格式:CONVERT(data_type,expression[,style])

sqlserver convert()函數的使用方法_convert sqlserver_qq_37528515的博客-CSDN博客 SQL中CONVERT函數格式:CONVERT(data_type,expression[,style]) 說明&#xff1a; data_type:目標系統所提供的數據類型&#xff0c;如果轉換時沒有指定數據類型的長度&#xff0c;則 SQL Serv…

Maven基礎總結

前言 Maven 是一個項目管理工具&#xff0c;可以對 Java 項目進行構建、依賴管理。 基本要求掌握 配置Maven環境直接查。 得會在IDEA創建Maven的java項目吧、會創建Maven的web項目吧、會創建多模塊項目吧。 得會配置插件pligin、依賴dependency吧 一、Maven四大特性 1、…

CSS:服務器字體 與 響應式布局(用法 + 例子 + 效果)

文章目錄 服務器字體定義 服務器字體使用例子 響應式布局設備類型設備特性例子 服務器字體 解決字體不一致而產生的。 首先&#xff0c;在網上把字體下載好。 定義 服務器字體 font-face{font-family:字體名稱;src:url(字體資源路徑); }使用 在需要使用的選擇器里加上 font…

數學建模(一)前繼概念

課程推薦&#xff1a;數學建模老哥_嗶哩嗶哩_bilibili 目錄 一、什么是數學建模&#xff1f; 二、數學建模的一般步驟 三、數學建模賽題類型 1.預測型 2. 評價類 3.機理分析類 4. 優化類 一、什么是數學建模&#xff1f; 數學建模是利用數學方法解決實際問題的一種實踐。…

什么是多線程?進程和線程的區別是什么?如何使用Java實現多線程?

文章目錄 前言我們為什么要使用線程而不是進程來實現并發編程什么是線程進程和線程的區別如何使用Java實現多線程創建線程1.創建一個繼承 Thread 類的線程類2.實現 Runnable 接口匿名內部類方式實現 Runnable 接口lambda 表達式實現 Runnable 接口 Thread 類的常見構造方法Thre…

T113-S3-RTL8211網口phy芯片調試

目錄 前言 一、RTL8211介紹 二、硬件連接 三、設備樹配置 四、內核配置 五、phy芯片配置 六、調試問題 總結 前言 在嵌入式系統開發中&#xff0c;網絡連接是至關重要的一部分。T113-S3開發板搭載了RTL8211系列的網口PHY芯片&#xff0c;用于實現以太網連接。在開發過程…

C++ QT(二)

目錄 Qt 控件按鈕QPushButton控件簡介用法示例運行效果 QToolButton控件簡介用法示例運行效果 QRadioButton控件簡介用法示例運行效果 QCheckBox控件簡介用法示例運行效果 QCommandLinkButton控件簡介用法示例運行效果 QDialogButtonBox控件簡介用法示例運行效果 輸入窗口部件Q…

用 React+ts 實現無縫滾動的走馬燈

一、走馬燈的作用 走馬燈是一種常見的網頁交互組件&#xff0c;可以展示多張圖片或者內容&#xff0c;通過自動播放或者手動切換的方式&#xff0c;讓用戶能夠方便地瀏覽多張圖片或者內容。 本次實現的不是輪播圖而是像傳送帶一樣的無限滾動的形式。 二、需求梳理 走馬燈可設…

Go Gin 中使用 JWT

一、JWT JWT全稱JSON Web Token是一種跨域認證解決方案&#xff0c;屬于一個開放的標準&#xff0c;它規定了一種Token實現方式&#xff0c;目前多用于前后端分離項目和OAuth2.0業務場景下。 二、為什么要用在你的Gin中使用JWT 傳統的Cookie-Sesson模式占用服務器內存, 拓展性…

uniapp實現自定義導航內容高度居中(兼容APP端以及小程序端與膠囊對齊)

①效果圖如下 1.小程序端與膠囊對齊 2.APP端內容區域居中 注意&#xff1a;上面使用的是colorui里面的自定義導航樣式。 ②思路&#xff1a; 1.APP端和小程序端走不同的方法&#xff0c;因為小程序端要計算不同屏幕下右側膠囊的高度。 2.其次最重要的要清晰App端和小程序端…

【數學建模】清風數模更新5 灰色關聯分析

灰色關聯分析綜述 諸如經濟系統、生態系統、社會系統等抽象系統都包含許多因素&#xff0c;系統整體的發展受各個因素共同影響。 為了更好地推動系統發展&#xff0c;我們需要清楚哪些因素是主要的&#xff0c;哪些是次要的&#xff0c;哪些是積極的&#xff0c;哪些是消極的…