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