OpenCV用C++語言編寫,它的主要接口也是C++語言,但是依然保留了大量的C語言接口。該庫也有大量的Python, Java and MATLAB/OCTAVE (版本2.5)的接口。這些語言的API接口函數(shù)可以通過在線文檔獲得。如今也提供對于C#,Ch, Ruby的支持。
所有新的開發(fā)和算法都是用C++接口。
基于OpenCV的三維重建算法。該算法充分發(fā)揮了OpenCV的函數(shù)庫功能,提高了計算的精度效率,具有良好的跨平臺移植性,可以滿足各種計算機(jī)視覺系統(tǒng)的需要。
OpenCV三維重建的實(shí)現(xiàn)
引言
三維重建技術(shù)是計算機(jī)視覺、人工智能、虛擬現(xiàn)實(shí)等前沿領(lǐng)域的熱點(diǎn)和難點(diǎn),也是人類在基礎(chǔ)研究和應(yīng)用研究中面臨的重大挑戰(zhàn)之一?;趫D像的三維重建是圖像處理的一個重要研究分支,作為當(dāng)今熱門的虛擬現(xiàn)實(shí)和科學(xué)可視化的基礎(chǔ),它被廣泛應(yīng)用于檢測和觀察中。一個完整的三維重建系統(tǒng)通??煞譃閳D像獲取、攝像機(jī)標(biāo)定、特征點(diǎn)提取、立體匹配、深度確定和后處理等6大部分[1] [3]。
其中精確標(biāo)定攝像機(jī)內(nèi)外參數(shù)和立體匹配是三維重建中最重要也是最困難的問題。 開放源代碼的計算機(jī)視覺類庫OpenCV(Open Source Computer Vision Library)由英特爾公司位于俄羅斯的研究實(shí)驗(yàn)室所開發(fā),它是一套可免費(fèi)獲得的由一些C函數(shù)和C 類所組成的庫,用來實(shí)現(xiàn)一些常用的圖像處理及計算機(jī)視覺算法[2]。
OpenCV與英特爾公司所開發(fā)的另一圖像處理庫IPL(Image Processing Library)兼容, IPL用于實(shí)現(xiàn)對數(shù)字圖像的一些低級處理,而OpenCV則主要用于對圖像進(jìn)行一些高級處理,比如說特征檢測與跟蹤、運(yùn)動分析、目標(biāo)分割與識別以及3D重建等。由于OpenCV的源代碼是完全開放的,而且源代碼的編寫簡潔而又高效,特別是其中大部分的函數(shù)都已經(jīng)過匯編最優(yōu)化,以使之能高效而充分地利用英特爾系列處理芯片的設(shè)計體系,
對于Pentium MMX, Pentium, Pentium Ⅲ及Pentium Ⅳ這些處理器而言,OpenCV的代碼執(zhí)行效率是非常高的,所以近年來在國外的圖像處理相關(guān)領(lǐng)域中被廣泛地使用,成為一種流行的圖像處理軟件。OpenCV中的攝像機(jī)標(biāo)定模塊為用戶提供了良好的接口,同時支持Windows、Linux 平臺,有效地提高了開發(fā)效率,并且執(zhí)行速度快,具有良好的跨平臺移植性,因此可以很好地應(yīng)用于工程實(shí)際當(dāng)中。
2 三維重建的基本原理
2.1 圖像獲取
立體圖像的獲取是立體視覺的基礎(chǔ),圖像獲取的方式很多,主要取決于應(yīng)用的場合和目的,還要考慮視點(diǎn)差異、光照條件、攝像機(jī)性能以及景物特點(diǎn)等因素的影響,以利于立體計算。
2.2 攝像機(jī)標(biāo)定
攝像機(jī)標(biāo)定是為了建立成像模型、確定攝像機(jī)的位置和屬性參數(shù),以確定空間坐標(biāo)系中物體點(diǎn)同它的像點(diǎn)之間的對應(yīng)關(guān)系。兩個攝像機(jī)都要標(biāo)定,如果攝像機(jī)是固定的,當(dāng)從2-D計算機(jī)圖像坐標(biāo)推導(dǎo)3-D信息時,只需一次標(biāo)定。 攝像機(jī)的標(biāo)定方法可分為兩大類:第一類是直接估計攝像機(jī)的位置、光軸方向、焦距等參數(shù);第二類是通過最小二乘法擬合,確定三維空間點(diǎn)映射為二維圖像點(diǎn)的變換矩陣。一個有效的攝像機(jī)模型,除了能夠精確地恢復(fù)出空間景物的三維信息外,還有利于解決立體匹配問題。
2.3 特征提取
由多視點(diǎn)的視差確定3-D信息,關(guān)鍵是確定場景中同一物點(diǎn)在不同圖像中的對應(yīng)關(guān)系,解決該問題的方法之一是選擇合適的圖像特征并進(jìn)行匹配。特征是像素或像素集合或它們的抽象表達(dá),常用的匹配特征主要有點(diǎn)狀特征、線狀特征和區(qū)域特征等。一般來講,大尺度特征含有較豐富的信息,本身數(shù)目較少,易于得到快速匹配,但對它們的提取與描述相對復(fù)雜,定位精度也差;而小尺度特征本身的定位精度高,表達(dá)描述簡單,但數(shù)目較多,所含信息量卻較少,因而在匹配時需要采用較強(qiáng)的約束準(zhǔn)則和匹配策略。
合理的選擇匹配特征對立體匹配工作有十分重要的意義,應(yīng)綜合考慮各種因素,根據(jù)不同的景物特點(diǎn)和應(yīng)用要求選擇。一般的,對于包含有大量非規(guī)則形狀和高度突變的場景,比較適合提取點(diǎn)狀特征,因?yàn)樘崛【€段、區(qū)域等特征既困難又會引入誤差:對于具有規(guī)則結(jié)構(gòu)的場景,若線段和區(qū)域特征的提取和描述比較容易且誤差較小,應(yīng)提取線段特征以實(shí)現(xiàn)快速匹配。
2.4 立體匹配
立體匹配是根據(jù)對所選特征的計算,建立特征間的對應(yīng)關(guān)系,將同一個空間點(diǎn)在不同圖像中的映像點(diǎn)對應(yīng)起來,并由此得到相應(yīng)的視差圖像,立體匹配是雙目視覺中最重要也是最困難的問題。當(dāng)空間三維場景被投影為二維圖像時,同一景物在不同視點(diǎn)下的圖像會有很大不同,而且場景中的諸多因素,如光照條件、景物幾何形狀和物理特性、噪聲干擾和畸變以及攝像機(jī)特性等,都被綜合成單一的圖像灰度值。
因此,要準(zhǔn)確的對包含了如此之多不利因素的圖像進(jìn)行無歧義匹配十分困難。 立體匹配的方法主要分為兩大類,即灰度相關(guān)和特征匹配?;叶认嚓P(guān)直接用象素灰度進(jìn)行匹配,該方法優(yōu)點(diǎn)是匹配結(jié)果不受特征檢測精度和密度的影響,可以得到很高的定位精度和密集的視差表面;缺點(diǎn)是依賴于圖像灰度統(tǒng)計特性,對景物表面結(jié)構(gòu)以及光照反射較為敏感,因此在空間景物表面缺乏足夠紋理細(xì)節(jié)、成像失真較大(如基線長度過大)的場合存在一定困難。
基于特征的匹配方法的優(yōu)點(diǎn)是使用從強(qiáng)度圖像得到的特征作為匹配基元,所以在環(huán)境照明發(fā)生變化的情況下較為穩(wěn)定;缺點(diǎn)是特征提取需要額外計算量,另外由于特征是離散的,所以不能在匹配后直接得到密集的視差場。
匹配方法需要解決以下問題:選擇正確的匹配特征;尋找特征間的本質(zhì)屬性;建立能正確匹配所選特征的穩(wěn)定算法。
2.5 深度信息確定
當(dāng)通過立體匹配得到視差圖像后,就可以確定深度圖像并恢復(fù)場景3-D信息了。影響距離測量精度的因素主要有攝像機(jī)標(biāo)定誤差、數(shù)字量化效應(yīng)、特征檢測與匹配定位精度等,一般來講,距離測量精度與匹配定位精度成正比,與攝像機(jī)基線長度成反比。增大基線長度可以改善深度測量精度,但同時會增大圖像間的差異,增加匹配的困難程度。因此,要設(shè)計一個精確的立體視覺系統(tǒng),必須綜合考慮各方面的因素,保證各環(huán)節(jié)都具有較高的精度。
2.6 后處理
后處理包括深度插值、誤差校正和精度改善。立體視覺的最終目的是恢復(fù)景物可視表面的完整信息,目前,無論哪種匹配方法都不可能恢復(fù)出所有圖像點(diǎn)的視差,因此對于一個完整的立體視覺系統(tǒng),必須進(jìn)行最終的表面內(nèi)插重建。
3 基于OpenCV的三維重建
OpenCV中采用的定標(biāo)方法是介于傳統(tǒng)定標(biāo)方法和自定標(biāo)方法之間的一種方法,由在其論文中提出的。這種方法不需要知道攝像機(jī)運(yùn)動的具體信息,這點(diǎn)比傳統(tǒng)定標(biāo)技術(shù)更為靈活,同時仍需要一個特定的標(biāo)定物以及一組已知的特征基元的坐標(biāo),這點(diǎn)不如自定標(biāo)靈活。它通過在至少3個不同的位置獲取標(biāo)定物的圖像,計算出攝像機(jī)所有的內(nèi)外參數(shù)。
由于它比傳統(tǒng)定標(biāo)技術(shù)更為靈活,又可以得到不錯的定標(biāo)精度,所以被OpenCV所采納。 在這個模型的定標(biāo)過程中將用到的三個坐標(biāo)系:圖像坐標(biāo)系,攝像機(jī)坐標(biāo)系和世界坐標(biāo)系。通過坐標(biāo)系之間的變換可以通過下面的公式把圖像坐標(biāo)系的點(diǎn)和世界坐標(biāo)系[7] [8]:
由于矩陣A包含了攝像機(jī)全部的6個內(nèi)參數(shù)
,所以稱A為攝像機(jī)內(nèi)參數(shù)矩陣。PC為模型的外參數(shù)矩陣,可以通過以下公式得到:
其中,
為旋轉(zhuǎn)矩陣,
為平移向量。
基于OpenCV的攝像機(jī)標(biāo)定采用通用的棋盤標(biāo)定模板,先用函數(shù)cvFindChessboardCorners()粗略提取出棋盤的角點(diǎn),然后再使用FindCornerSubPix()函數(shù),進(jìn)一步精確得到角點(diǎn)亞象素級的坐標(biāo)值。最后把坐標(biāo)值代入cvCalibrateCamera2()函數(shù),得到攝像機(jī)的內(nèi)外參數(shù)值(效果如圖1所示)。
圖1 提取角點(diǎn)并顯示的效果圖(棋盤取自O(shè)penCV) OpenCV中有Sobel,Laplace,Canny等幾種用于邊緣檢測的算子。但一般使用坎尼(Canny)算子也就是cvCanny()函數(shù)做邊緣檢測和特征提?。ㄈ鐖D2)。
圖2 做Canny處理后的比較圖 三維重建中最大的難點(diǎn)也是最重要的部分就是立體匹配部分。在OpenCV中選用基于特征匹配中的極線約束方法[9]。 假設(shè)空間一點(diǎn)P,它在兩個攝像機(jī)成像平面上的投影點(diǎn)分別為P1和P2,如圖3所示。其中,C1和C2分別為兩個攝像機(jī)的中心,即攝像機(jī)坐標(biāo)系的原點(diǎn)。
在極線幾何中,我們稱C1和C2的連線為基線?;€和兩攝像機(jī)成像平面的交點(diǎn)e1和e2分別為兩攝像機(jī)的極點(diǎn),它們分別為兩個攝像機(jī)中心C1和C2在對應(yīng)的攝像機(jī)成像平面上的投影坐標(biāo)。P、C1和C2組成的三角平面稱為極平面π。π和兩個攝像機(jī)成像平面的交線l1和l2稱為極線,一般稱l1為點(diǎn)P2對應(yīng)的極線,l2為點(diǎn)P1對應(yīng)的極線,l1和l2互為對應(yīng)極線。
圖3 我們在極平面π上另取一點(diǎn)P′,從圖中可以看到,它在兩攝像機(jī)平面上的投影點(diǎn)為P1和P2′,其中,P2和P2′都在極線l2上。這就是極線約束,即當(dāng)給定一點(diǎn)P1,它的匹配點(diǎn)一定出現(xiàn)在它所對應(yīng)的極線上,由此,可以將我們的搜索空間壓縮到一維的直線,即極線上。
在OpenCV中可以先使用函數(shù)cvFindFundamentalMat()求出圖像的基礎(chǔ)矩陣,然后用把求得的基礎(chǔ)矩陣代入函數(shù)cvComputeCorrespondEpilines()函數(shù)中求出一幅圖像中的點(diǎn)在另一幅圖像中的對應(yīng)極線。
求得極線后,對圖像上沿極線方向上的像素點(diǎn)進(jìn)行灰度相似性的匹配,能很方便的找出該點(diǎn)在對應(yīng)圖像上的匹配點(diǎn)。
4 實(shí)驗(yàn)結(jié)果
基于上述原理和OpenCV的函數(shù),利用VC6.0開發(fā)了一個全套的三維重建系統(tǒng)。通過上述的6個步驟最終還原出了物體的圖形。程序經(jīng)過嚴(yán)格的測試,運(yùn)行穩(wěn)定。在進(jìn)行相機(jī)標(biāo)定時,要注意的是:照片越多(至少3幅)計算的內(nèi)外參數(shù)就越精確。而且其中任意兩幅圖像所對應(yīng)的攝像機(jī)光軸不能是平行的。
圖4 實(shí)驗(yàn)所用到的左右對應(yīng)圖像
圖5 提取到的輪廓
圖6 匹配過程(圖中白點(diǎn)標(biāo)記為一對對應(yīng)點(diǎn))
圖7 點(diǎn)重建的效果圖(使用OpenGL重建)
5 結(jié)束與展望
三維重建視覺作為計算機(jī)視覺中的一個重要分支,一直是計算機(jī)視覺研究的重點(diǎn)和熱點(diǎn)之一。它直接模擬了人類視覺處理景物的方式,可以在多種條件下靈活地測量景物的立體信息。對它的研究,無論是在視覺生理的角度還是在工程應(yīng)用的角度都具有十分重要的意義。三維重建視覺技術(shù)在由物體的二維圖像獲得物體的深度信息上具有很大的優(yōu)越性。 本文利用OpenCV開發(fā)的三維重建的系統(tǒng)具有計算簡單,結(jié)果精確,運(yùn)行效率高,可以跨多平臺等優(yōu)點(diǎn)。
系統(tǒng)可以有效的應(yīng)用于各種可使用計算機(jī)視覺的應(yīng)用中。 本試驗(yàn)系統(tǒng)適宜于測量范圍不太大、遮擋較少的空間物體的三維測量,對于遮擋較嚴(yán)重的情況,我們需要增加攝像機(jī)的數(shù)目,從更多方向?qū)ξ矬w進(jìn)行攝像,通過在多個方向上運(yùn)用雙目立體視覺原理進(jìn)行三維重建。
評論
查看更多