Colmap三維重建詳解與使用方法

圖片捕獲過程,請遵循以下指導方針以獲得最佳重建結果:

1 捕捉具有良好紋理的圖像。避免使用完全沒有質感的圖片(例如,白色的墻或空桌子)。如果場景本身沒有足夠的紋理,你可以放置額外的背景對象,如海報等。

2 在相似的照明條件下捕獲圖像。避免高動態范圍的場景(例如,背對太陽有陰影的照片或透過門/窗拍攝的照片)。避免在有光澤的表面上拍攝。

3 捕捉高視覺重疊的圖像。確保每個物體至少在3張圖片中看到,重疊圖片越多越好。

4 圍繞同一個物體進行不同的角度捕捉圖像,不要只旋轉相機從同一位置拍攝圖像。同時,盡量從一個相對相似的角度拍攝足夠多的圖片。注意,更多的圖像不一定更好,可能會導致緩慢的重建過程。如果你使用視頻作為輸入,考慮下采樣幀率。

概述

基于圖像的三維重建傳統上首先使用運動結構(Structure-from-Motion)恢復場景的稀疏表示和輸入圖像的姿態。這個輸出然后作為多視圖立體幾何(Multi-View Stereo的輸入,以恢復場景的密集表示。

SFM是通過一系列有重疊的且不同視角的圖片重建出物體的三維結構(稀疏點云),并且輸出相機的內外參數,內參指的是將真實空間的三維點通過內參矩陣轉換為相機圖片上的二維點,外參包含相機在切換不同視角時的平移和旋轉信息。

通常情況下,運動結構系統將這一過程分為三個階段:

1 特征檢測與提取

2 特征匹配和幾何驗證

3 結構與運動重建

多視圖立體幾何(MVS)采用SfM的輸出來計算圖像中每個像素的深度和法向信息。在3D點云中融合多幅圖像的深度圖和法向圖,然后生成場景的密集點云。利用融合點云的深度和法向信息,泊松曲面(Poisson),三角剖分(delaunay)重建等算法可以恢復場景的三維曲面幾何。

實施:

COLMAP創建一個新項目必須包含存儲數據庫的位置以及包含輸入圖像的文件夾。可以將整個項目設置保存到配置文件中,項目配置文件中保存存儲數據庫和圖像文件夾的絕對路徑信息。整個項目的目錄結構如下:

第一步:特征檢測/提取

特征檢測/提取在圖像中找到稀疏的特征點,并使用數值描述符(128維向量)描述特征點。主要使用SIFT特征提取方法。

jpge圖像的頭部保存了EXIF信息 里面包括拍攝時的光圈、快門、白平衡、ISO、焦距、日期時間等各種和拍攝條件以及相機品牌、型號、色彩編碼、拍攝時錄制的聲音以及GPS全球定位系統數據、縮略圖等,COLMAP可以從嵌入式EXIF信息中自動提取焦距信息。

提取到的特征信息如下:

NUM_FEATURES代表一張圖像提取到多少個特征點,x,y代表特征點的坐標, scale代表尺度(即相機距離物體遠近的比例),ORIENTATION代表特征點的梯度方向,?D_1…D_128代表特征描述符的128維向量,所有提取的數據都將存儲在數據庫文件中。

其中X, Y, SCALE, ORIENTATION為浮點數,D_1…D_128為0…255范圍內的值。

例如,一張圖片有4個特征:

第二步:特征匹配和幾何驗證。

特征匹配首先匹配圖像對,下面列出圖像匹配的幾種策略。其次再將匹配后的圖像上的特征點進行匹配,利用特征點的128維描述符向量的相似性度量進行特征點匹配。

圖像對匹配算法:

窮盡匹配(Exhaustive Matching):如果數據集中的圖像數量相對較低(最多數百個),那么這種匹配模式應該足夠快,并能獲得最佳的重構結果。在這里,每個圖像都與其他圖像進行匹配,而塊大小決定同時從磁盤加載到內存中的圖像數量。

序列匹配(Sequential Matching):由一個攝像機。在這種情況下,連續的幀具有視覺重疊,不需要用盡全力地匹配所有的圖像對。而是將連續捕獲的圖像相互匹配。

空間匹配(Spatial Matching):這種匹配模式將每個圖像與它的空間近鄰進行匹配。COLMAP還會從EXIF中提取GPS信息,并使用它進行空間最近鄰居搜索。

傳遞性匹配(Transitive Matching):這種匹配模式利用已有特征匹配的傳遞關系,生成更完整的匹配圖。如果一個圖像A匹配到一個圖像B,而B匹配到C,那么這個匹配器會嘗試直接將A匹配到C。

建立圖像對之后,在參考圖像中的一個特征點,如何從目標圖像中的所有特征點中找出與之相對應的特征點。如果使用暴力計算法,計算每一對特征點的相似距離,如果特征的描述符向量的維度和特征點的數量較多的話,暴力法是不可取的。需要使用KD樹算法建立一個搜索樹,基于KD樹最鄰近查找算法,方便特征點進行快速匹配。

由于sift提取的特征點和描述子在匹配過程中可能會存在誤匹配的情況,所以需要將錯誤的匹配點對剔除。幾何校驗是篩除一些誤匹配的特征點。幾何校驗是指利用對極幾何進行約束

對極幾何:空間中的一點與兩張圖片相機的光心,三者圍成一個極平面,極平面與兩張圖片相交形成兩條極線,對極幾何約束是指,空間點X在攝像機1的成像平面中的像素點x,與之相匹配的攝像機2的成像平面中的像素點 x' 一定落在極線上。

公式約束為:?x'的轉置 × F × x =0 ;F為基礎矩陣,F可以通過8對匹配的特征點聯立方程組求得 分解F矩陣可以求得相機的內參矩陣。?

幾何約束方法:隨機選取圖像對的8對匹配點,使用歸一化八點算法求解基礎矩陣F,然后統計滿足對極幾何關系的點對數量,在設定的次數內重復上述步驟,選取滿足條件的點對數量最多的匹配為精化匹配結果。

第三步:稀疏重構

首先初始化主要是指選取兩張匹配的圖像,設定其中一張圖像的位姿為單位陣,然后通過它們之間的匹配點對估計出E矩陣,將E矩陣分解獲得另一張圖像的位姿。在估計出兩張圖像的位姿后,就可以通過三角化(triangulation)來生成三維點。

然后進行增量式重建:

1 獲取下一最佳匹配圖像(匹配點對數量最多)

2 利用匹配的特征點估計出E矩陣(本質矩陣),估計圖像位姿

3 進行三角化生成三維空間點,三角化是利用兩個匹配的圖像坐標圖像位姿以及相機的內參矩陣,求得匹配點的三維點坐標。

4 對所有已生成的三維點和已估計出的位姿,使用ceres庫進行ba(bundle adjustment)優化。通過最小化重投影誤差實現剔除誤差過大的點

5 最后對所有數據進行ba優化 即全局優化

第四步:稠密重建

在重建場景的稀疏表示和輸入圖像的相機姿勢后,MVS現在可以恢復更密集的場景幾何。COLMAP有一個集成的密集重建管道,可以為所有的配準圖像生成深度和法向圖,將深度和法向圖融合到一個將稀疏點云融合成密集點云,最后使用泊松(Poisson)或三角剖分(Delaunay)重建方法從融合的點云中估計出一個密集曲面。

稠密重建分為:

1 是還原圖像,去除圖像的畸變

2 是計算深度圖和法向圖

3 將深度和法向圖融合成到點云里

4 點云網格劃分形成曲面

colmap命令行執行過程

初始數據為圖像文件和數據庫文件

圖像文件包含128張jpg圖像

1 特征提取 利用特征提取算法提取每一張圖片的特征點并獲得特征點的描述符

2 窮盡匹配 匹配每一張圖片與其他所有圖片的特征點,并進行幾何校驗。

3 稀疏重建

首先使用兩張圖片,將第一張圖片的位姿記為單位陣,通過匹配的特征點利用本質矩陣求得另一張圖像位姿,通過估計基礎矩陣得到相機的內參矩陣,利用兩個匹配的圖像坐標和圖像位姿以及相機的內參矩陣,進行三角化生成三維空間點。接著使用ba(bundle adjustment)優化生成的三維點,通過最小化重投影誤差實現剔除誤差過大的點。然后每增加一張圖片,重復進行估計圖像位姿、三角化、ba優化、全局ba優化等步驟。直至添加完所有圖片

稀疏重建效果

4 稠密重建

(1) 圖像去畸變,還原未失真的圖片

(2)計算深度和法向圖

立體匹配后生成的深度圖

立體匹配后生成的法向圖

(3)在稀疏點云中融合多幅圖像的深度圖和法向圖,然后生成場景的密集點云。

稠密點云效果如下:

(4)使用三角剖分算法進行曲面重建,重建效果如下:

參考網址:

https://www.ctyun.cn/developer/article/416012493463621

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/163822.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/163822.shtml
英文地址,請注明出處:http://en.pswp.cn/news/163822.shtml

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

相關文章

@Value和@Scheduled注解簡介

(1)SpringBoot讀取配置文件,使用Value注解獲取數據,中文亂碼問題解決辦法 new String(xxx.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8) (2)Scheduled注解 例如,Scheduled(…

前端處理返回數據為數組對象且對象嵌套數組并重名的數據,合并名稱并疊加數據

前端處理返回數據為數組對象且對象嵌套數組并重名的數據,合并名稱并疊加數據 var newList[]; var table{}; var dataObj{}; var finalList[]; var tableData[{brName:營業部,dateStr:2023-11-23,tacheArr:[{dealCnt:20,tacheName:奔馳}]},{brName:營業部,dateStr:2…

TypeError: Cannot read property ‘sendpost‘ of undefined

箭頭函數指向問題,定義let that this 解決

大寬帶服務器有什么優勢?

大寬帶服務器有什么優勢? 什么是大帶寬服務器?從屬性上看,大寬帶可以分為G口大帶寬、萬兆大帶寬等,從線路上看,可以分為電信、移動、聯通等,從地域屬性看,可以分為國內寬帶、國際寬帶。大寬帶是…

如何活躍谷歌開發者賬號,增加賬號的權重和真實性,從而延長應用在線時長?

眾所周知,每個谷歌開發者賬號都有一個初始權重,而權重的高低會影響到賬號的穩定性和真實性,從而影響應用上架的成功率和應用在線時長。 關于提高谷歌賬號權重、活躍度及穩定性,以下的方法和建議可供參考: 1、社區活動…

外設——CAN總線收發器TJA1043

目錄 1. 引腳 2. 工作模式 3. 5種模式和7種狀態標識的理解和使用 1. 引腳 2. 工作模式 該收發器相較于普通收發器,引腳多了幾個,就是功能等多了。TJA1043支持五種操作模式,就是通過控制引腳STB_N和EN來原則。五種模式: 正常模式…

OpenCV滑塊驗證碼圖像缺口位置識別

OpenCV圖像缺口位置識別 1、背景2、圖像缺口位置識別原理3、圖像缺口位置識別實現4、滑塊驗證碼HTTP圖像需要保存到本地嗎1、背景 在使用Selenium完成自動化爬蟲時,許多網站為了防止機器人爬取數據會使用驗證碼(例如滑塊驗證碼)。通過Selenium動作操作,爬蟲可以模擬用戶輸入…

前端工程、靜態代碼、Html頁面 打包成nginx 的 docker鏡像

1. 創建一個 mynginx的目錄 2. 將前端代碼文件夾(比如叫 front )復制到 mynginx 目錄下 3. 在mynginx 目錄下創建一個名為Dockerfile 的文件(文件名不要改),文件內容如下: # 使用官方的 Nginx 鏡像作為基…

神經網絡訓練技巧

1. 逐漸增加訓練數據規模,比如先在小數據集上訓練,之后再增大數據集繼續訓練。

網站權重是什么意思

網站權重是指搜索引擎對網站的評估指標,用以衡量網站的重要性 搜索引擎會根據網站權重來決定網站在搜索結果中的排名和位置,從而決定其在搜索中的可見度 網站權重是多方面因素的綜合評估,其中主要包括網站內容質量、外部鏈接量及質量、網站…

JS逆向之wasm逆向(二)

本文僅供技術交流和技術學習 不做其他用途 接著上一篇繼續講: 上篇地址: JS逆向之wasm逆向(二進制) 網址: aHR0cHM6Ly93d3cuN3E2Y3lqLmNvbTo5MDAxL3JlZ2lzdGVyNDY5Njg/aV9jb2RlPTQ0Mjc5OTU1 這個網站我們后面可以繼續講他的debugger 和滑塊…

[點云分割] Clustering of Pointclouds into Supervoxels

介紹 “Clustering of Pointclouds into Supervoxels” 是一種點云數據聚類的方法,用于將點云數據分割成具有相似特征的超體素(supervoxel)。 超體素是一種在點云數據中表示連續區域的方法,類似于像素在圖像中表示連續區域。超體…

C 語言 http通信

1,C語言本身不包含直接支持HTTP協議的功能,但你可以使用第三方庫來實現HTTP客戶端或服務器。 以下是一些常用的C語言HTTP庫: libcurl:一個支持多種協議的開源庫,包括HTTP、HTTPS、FTP等。它提供了一組簡單的API&…

因果發現31種高效經典方案匯總,附配套算法和代碼

因果發現(Causal Discovery)是一個復雜的過程,其目標是從大量的數據中確定變量之間的因果關系。這個過程通常涉及到的是如何從紛繁復雜的數據中發現其中隱含的因果關系。有時,研究者可以通過隨機實驗進行干預來發現因果關系&#…

解決PDF預覽時,電子簽章、日期等不顯示問題

文章目錄 問題描述問題排查問題解決 問題描述 在預覽PDF時,部分簽章或控件沒有顯示。如下圖: 正確應該要這樣: 問題排查 根據網上搜索,排查,我先看看,pdf.worker.js 里的這三行代碼,是否已經注…

JVM 類加載

① 類加載過程 從上面的圖片我們可以看出整個 JVM 執行的流程中,和程序員關系最密切的就是類加載的過程了,所以 接下來我們來看下類加載的執行流程。 對于一個類來說,它的生命周期是這樣的: 其中前 5 步是固定的順序并且也是類加載…

Android : Spinner(列表選項框) + BaseAdapter -簡單應用

??容器與適配器:????? http://t.csdnimg.cn/ZfAJ7 示例圖: 實體類 Demo.java package com.example.mygridviewadapter.entity;public class Demo {private String text;private int img;public Demo(String text, int img) {this.text…

虛擬機解決Linux中Uos和Deepin登錄密碼忘記的問題 標題Linux Uos Deepin

Uos是切換網絡模式解決的(之前有綁定過用戶) 因為之前用的是橋接模式登錄的時候一直無法聯網,改為Nat模式后可以和電腦共用一個網絡ip,可以重置密碼了,以此解決 ps: 特別說明rw single init/bin/bash 方法和systemd.debug-shell1方法已經失效,不要再做無謂的嘗試了Deepin23社區…

Vue + Element UI 實現復制當前行數據功能(復制到新增頁面組件值不能更新等問題解決)

1、需求 使用Vue Element UI 實現在列表的操作欄新增一個復制按鈕&#xff0c;復制當前行的數據可以打開新增彈窗后亦可以跳轉到新增頁面&#xff0c;本文實現為跳轉到新增頁面。 2、實現 1&#xff09;列表頁 index.vue <el-table> <!-- 其他列 --> <el-t…

JOSEF 漏電繼電器 LLJ-100FG φ45 50-500mA 卡軌安裝

系列型號&#xff1a; LLJ-10F(S)漏電繼電器LLJ-15F(S)漏電繼電器LLJ-16F(S)漏電繼電器 LLJ-25F(S)漏電繼電器LLJ-30F(S)漏電繼電器LLJ-32F(S)漏電繼電器 LLJ-60F(S)漏電繼電器LLJ-63F(S)漏電繼電器LLJ-80F(S)漏電繼電器 LLJ-100F(S)漏電繼電器LLJ-120F(S)漏電繼電器LLJ-125F(S…