劉娟,郝建新
(1.鄭州市規(guī)劃勘測設計研究院,河南鄭州 450052;2.鄭州市市政工程勘測設計研究院,鄭州鄭東新區(qū) 450046)
OpenCV 技術在數(shù)字近景攝影測量中的應用與研究
劉娟1?,郝建新2
(1.鄭州市規(guī)劃勘測設計研究院,河南鄭州 450052;2.鄭州市市政工程勘測設計研究院,鄭州鄭東新區(qū) 450046)
在闡述OpenCV技術的基礎上,從數(shù)字近景攝影測量的應用方面著手,具體介紹了OpenCV技術在數(shù)字近景攝影測量中相關應用到的函數(shù)、及其程序的實現(xiàn)過程。同時,通過給出的初步基于OpenCV的攝影測量模塊程序實現(xiàn)和實驗結果可行性的驗證分析。
OpenCV;攝影測量;數(shù)字近景攝影測量;軟件實現(xiàn)
OpenCV這一名詞包含了Open和Computer Vision兩者的意思。它是Intel公司推出的一個開源計算機視覺庫,由一系列C函數(shù)和少量C++類構成,實現(xiàn)了圖像處理和計算機視覺方面的很多通用算法。其以Linux為代表的開發(fā)源代碼軟件得到了HP、IBM、Sun、Intel和Novell等世界上幾乎所有計算機軟、硬件廠商的重視和支持,也紛紛啟動了開發(fā)和使用開放源代碼軟件的項目。作為開放的數(shù)字圖像處理和計算機視覺軟件平臺,可以很好地實現(xiàn)基本的計算機視覺、圖像處理和模式識別的開源項目,直接應用于很多領域的一個二次開發(fā)的理想工具。
本文正是在此基礎上,討論了基于OpenCV技術在數(shù)字近景攝影測量應用具體實現(xiàn)的嘗試和研究。
2.1 數(shù)據(jù)結構及操作
OpenCV的矩陣操作分別有一個C和C++語言的矩陣接口,通常把向量當成是行或列為1的矩陣,并且矩陣在內存中的存儲方式是按行存儲,且每行按4字節(jié)對齊。
(1)矩陣的定義、分配、初始化和釋放;(2)矩陣的訪問;
(3)矩陣間、矩陣元素間的操作。
2.2 圖像處理
(1)圖像的定義、分配、初始化和釋放;
(2)圖像的讀取和訪問;
(3)圖像處理(圖像梯度、邊緣和角點提取等)。
2.3 OpenCV的特點
從上面我們不難得出OpenCV有以下特點:
(1)開放C源碼;
(2)基于Intel處理器指令集開發(fā)優(yōu)化代碼;
(3)統(tǒng)一的結構和功能定義;
(4)強大的圖像和矩陣運算能力;
(5)方便靈活的用戶接口;
(6)同時支持MS-Windows和Linux平臺。
3.1 數(shù)碼相機模型和變形及定標實現(xiàn)
(1)相機模型和變形原理
數(shù)碼相機模型的選擇直接影響最后的標定結果,因此要選擇合適的相機模型,確定內外部參數(shù)。內部參數(shù)描述相機的內部光學和幾何特性,如圖像中心、焦距、鏡頭畸變等;外部參數(shù)就是相對于世界坐標系的相機坐標的三維位置和方向。常用的針孔模型忽略了透鏡的厚度和畸變,故不能很好地反映實際情況。所以在針孔模型為基礎,并引入透鏡徑向畸變和切向畸變[1]。
一幅視圖是通過將三維空間中的點透視變換投影到圖像平面上得到的,其定義是
式中,(X,Y,Z)是一個點的世界坐標,(u,v)是點投影在圖像平面的坐標,以像素為單位;A稱為相機矩陣或內參數(shù)矩陣;(cx,cy)是基準點(通常在圖像的中心);fx,fy是以像素為單位的焦距。所以,如果因為某些因素對來自于相機的一幅圖像進行升采樣或降采樣,所有這些參數(shù)(fx,fy,cx和cy)都將被縮放同樣的尺度。內參數(shù)矩陣不依賴場景的視圖,一旦被計算出來,就可以重復使用(只要焦距固定)。旋轉-平移矩陣[R|t]稱作外參數(shù)矩陣,用來描述相機相對于一個固定場景的運動,或者是物體圍繞相機的剛性運動。也就是說,[R|t]將點(X,Y,Z)的坐標變換到某個坐標系上,該坐標系相對于相機來說固定不變。式(2)的變換等價于式(3)的形式,即
真正的鏡頭是有形變的,主要包括有徑向形變,也會有輕微的切向形變,所以式(3)的模型可以擴展為:
其中,k1、k2分別為徑向形變系數(shù),p1、p2是切向形變系數(shù)。形變系數(shù)不依賴拍攝的場景,也與拍攝圖像的分辨率無關[2]、[6]、[7]。
(2)程序實現(xiàn)
根據(jù)張正友標定法有一個精確定位角點陣的標準平面標定板,如圖1所示。然后通過自由移動相機或標定板,使得相機至少在兩個不同的位置(相對于標準平面標定板位置)拍攝標定板圖像,通過模板上的點和其圖像的對應點先用直接線性變換方法來確定相機的內部參數(shù)和外部參數(shù),這一步暫不考慮相機鏡頭的畸變,計算過程都是求解線性方程,求解速度快。但由于沒有考慮透鏡畸變的影響,得到的參數(shù)值并不準確。然后再以這些參數(shù)為初始值,在考慮畸變的同時應用算法對圖像點與再投影點間的距離之和進行非線性最小優(yōu)化,以得到一組精度更高的值[3]。
圖1 標定模板
圖2 標定輸出圖像(檢測出的角點用圓標記)
相機標定實現(xiàn)過程如圖3流程圖所示,首先是必要數(shù)據(jù)輸入,這里包括棋盤格的相關參數(shù),即格子的長度、寬度和標定板上每行、每列的角點總數(shù),然后選擇相機標定所拍攝的影像。
圖3 標定流程圖
其次是具體的標定計算過程:第一步:用OpenCV中的函數(shù)cvFindChessboardCorners()對標定圖像進行檢測是否符合標準,并對角點進行粗略地提取,為后面精確提取角點坐標做好準備。第二步:使用cvDraw-ChessBoardCorners()對前面檢測到的角點進行繪制,使操作人員能夠直觀地看到標定過程。第三步、通過cvFindCOrnerSubPix()對標定圖像中的角點進行精確提取。第四步:可以通過函數(shù)cvCalibrateCamera()運行標定算法來計算相機的內外參數(shù)值,至此標定計算過程結束。
最后就是計算結果輸入和誤差統(tǒng)計,通過cvProjectPoints2()來實現(xiàn)對誤差的統(tǒng)計。主要是利用得到的相機內外參數(shù)來計算三維角點(平面角點坐標加上一個焦距常數(shù))投影到二維圖像平面上的坐標,將這些坐標和標定過程中提取的角點坐標做比較,便可以對標定過程中產(chǎn)生的誤差進行統(tǒng)計。以下為程序的相機標定輸出影像和相機標定內參數(shù)及透鏡畸變參數(shù),如圖2、4所示。
圖4 相機標定內參數(shù)和畸變系數(shù)輸出
3.2 目標檢測及實現(xiàn)
(1)目標檢測原理
目標檢測方法最早由Paul Viola提出,并由Rainer Lienhart對這一方法進行了改進。在OpenCV中,首先利用樣本(至少幾百幅樣本圖片)的海爾(Haar)特征進行分類器訓練,得到一個級聯(lián)boosted分類器。訓練樣本分為正例樣本和反例樣本,其中正例樣本指待檢目標樣本,如圖5(a)所示,反例樣本指其他任意圖片,所有的樣本圖片都被歸一化為相同的尺寸大小。
分類器訓練完之后,就可以應用于輸入圖像中感興趣區(qū)域的檢測。為了搜索不同大小的目標物體,分類器被設計為可以改變尺寸,所以,為了在圖像中檢測未知大小的目標物體,掃描程序通常需要用不同比例大小的搜索窗口對圖片進行幾次掃描[4]。
(2)程序實現(xiàn)
①檢測目標圖片的正例樣本和反例樣本級聯(lián)訓練
OpenCV中有兩個程序可以訓練級聯(lián)分類器: opencv_haartraining和opencv_traincascade。后者是一個新程序,使用OpenCV 2.X API以C++編寫,支持Haar和LBP兩種特征,并可以增加其他的特征。正樣本必須由包含待檢測物體的圖片生成,如圖5(b)所示,選取了20個包含四分之一圓樣本的40×40大小影像作為正樣本。負樣本選取其他不包含待檢測的物體的影像。其次就是訓練分類器的生成,可以生成xml后綴名的文件即可。
標準標志模板(a)
自行設計標志模板(b)圖5
其具體操作如圖6所示,在DOS環(huán)境下,利用上面2個函數(shù)進行級聯(lián)分類器的訓練,主要指令有:
第一步、創(chuàng)建正樣本文件,指令為:createsample. exe-info(帶dat后綴文件名)-vec(帶vec后綴文件名)-num 20-w 40-h 40。
第二步、創(chuàng)建負樣本文件,手動建立負樣本文件,為dat后綴。
第三步、開始訓練,指令為:haartraining.exe-data (訓練結果輸出路徑)-vec(正樣本生成vec文件路徑)-bg(負樣本文件路徑)-npos 7000-nneg 3000-mode ALL-w 40-h40。具體指令說明可參看文獻[2,3]。
圖6 級聯(lián)分類器訓練
②根據(jù)級聯(lián)分類器進行目標檢測的程序實現(xiàn)
根據(jù)前面訓練得到的級聯(lián)分類器,利用cvLoad-HaarClassifierCascade()用于從文件中裝載訓練好的級聯(lián)分類器。及cvHaarDetectObjects()函數(shù)用于檢測圖像中的目標。該函數(shù)使用針對某目標物體訓練的級聯(lián)分類器在圖像中找到包含目標物體的矩形區(qū)域,并將這些區(qū)域作為一系列的矩形框返回。并以不同比例大小的掃描窗口對圖像進行幾次搜索。
如圖6、7所示,為實際檢測輸出影像。由此得出,該方法具有檢測速度快(約幾百微秒不等)、實現(xiàn)簡單的好處,同時,檢測效果主要依賴樣本影像的數(shù)量和具體特征,目前20個樣本情況是非常少的,具有較高的誤檢和漏檢。
圖7 檢測輸出圖(紅色為已檢測、其他顏色為不同區(qū)域誤檢點)
3.3 對極幾何
在計算機視覺中,對極幾何是用來描述空間物體投影圖像間的約束關系,同一場景兩幅圖像之間的幾何關系,它獨立于場景結構,只與相機的內、外部參數(shù)有關。換個角度,在數(shù)字近景攝影測量中,對極幾何就是像對的相對定向問題[4]。
在OpenCV中,有函數(shù)cvFindFundamentalMat()利用4種方法之一計算基礎矩陣,主要包括有7點算法、8點算法、RANSAC算法和LMedS算法。根據(jù)兩幅圖像中的對應點作為輸入數(shù)據(jù),最后輸出兩幅圖像間的計算基本矩陣。
還有一個函數(shù)cvComputerCorrespondEpilines()主要是根據(jù)一幅圖像中的點計算其在另一幅圖像中對應的對極線。假定點位于第一幅圖像,則對應的對極線有:
每條對極線都可以用3個系數(shù)a、b和c來表示,并作為該函數(shù)的輸出值。即
以上函數(shù)在數(shù)字近景攝影測量的像對的相對定向上具有較好的應用[5]。
3.4 圖像處理
在OpenCV中,有豐富的較好的圖像處理相關函數(shù),現(xiàn)就以下幾類為例:
(1)豐富的圖像數(shù)據(jù)結構和數(shù)據(jù)操作;例如,用于二維坐標點的CvPoint、以像素為單位定義矩形框大小的CvSize、定義多通道矩陣的CvMat等等。矩陣元素及操作函數(shù)。
(2)基本圖像處理;例如,圖像的梯度、邊緣和角點的提取算法、圖像的采樣、插值和幾何變換算法、圖像的濾波和去噪算法以及其他相關算法。
(3)具有很好的硬件接口及視頻處理函數(shù)等。
如圖8所示,我們自己制作若干個橢圓標志,并用A4紙打印出來,利用普通數(shù)碼相機進行不同角度下的影像,同時,利用OpenCV技術對圓形目標進行檢測,包括有圖像灰度化、自適應二值化、邊緣提取以及橢圓擬合等。
該實驗結果具有較好的識別率,但是其檢測計算過程將較長(約數(shù)分鐘或十幾分鐘不等)。接下去的目標是希望與級聯(lián)分類器目標檢測相結合,形成優(yōu)勢互補,達到更好的效果。
圖8 圓形標志影像的檢測
從前面的討論中,不難得出:OpenCV在數(shù)字近景攝影測量方面有著自身的優(yōu)勢,提供了一個很好的二次開發(fā)平臺,不但減少了數(shù)字近景攝影測量的開發(fā)時間,同時,也為提高精度及更好的圖像輸出提供更好的可能。
當然,僅靠OpenCV自身的函數(shù)是不可能完全實現(xiàn)數(shù)字近景攝影測量的全過程,必須在有針對性的問題上進行具體研究和實現(xiàn)。
[1] 李躍,汪亞明,黃文清等.基于OpenCV的攝像機標定方法研究[J].浙江理工大學學報.2010.5(27):417-420.
[2] 劉瑞禎,于仕琪.OpenCV教程:基礎篇[M].北京:北京航空航天大學出版社,2007.
[3] http://www.opencv.org.cn/index.php/.[OL]
[4] 鐘鍵.基于對極幾何的圖像匹配研究[D].中南大學.2010.
[5] 王佩軍,徐亞明.攝影測量學[M].武漢:武漢大學出版社,2005.
[6] 李健,史進.基于OpenCV的三維重建研究[J].微電子學與計算機.2008.12(25):29-32.
[7] 吳幅朝,胡占義.PnP問題的線性求解算法[J].軟件學報. 2003.14(3):682-688.
App lication and Research of Open CV Technology in Digital Close-range Photogrammetry
Liu Juan1,Hao Jianxin2
(1.Zhengzhou Urban Planning Design&Survey Reasearch Institute.Zhengzhou 450052,China 2.Zhengzhou City Municipal Engineering Design&Survey Reasearch Institute.Zhengzhou 450046,China)
The paper systematically expounded on its application function and software implementation about digital close-range photogrammetry based on the OpenCV technology.By the software implementation of digital close-range photogrammetry and the feasibility analysis of experimental results,it has some reference significance and practical guiding for the implementation of digital close-range photogrammetry.
OpenCV;photogrammetry;digital close-range photogrammetry;software implementation
1672-8262(2013)01-25-05
P234.1 文獻標識碼:A
2012—04—23
劉娟(1979—),女,工程師,主要從事城市工程測量技術工作。