劉 江,張 岑
(北京科技大學(xué) 機(jī)械工程學(xué)院,北京 100083)
多視點(diǎn)云拼接是將不同坐標(biāo)系下采集到的點(diǎn)云經(jīng)過空間變換,轉(zhuǎn)為一個(gè)坐標(biāo)系下的點(diǎn)云,進(jìn)而將模型各個(gè)部分拼接在一起。近年來,國際上許多學(xué)者做了大量的研究,提出大量的拼接方法。標(biāo)記點(diǎn)拼接法以操作方便,穩(wěn)定性高,得到了廣泛的應(yīng)用。世界級(jí)的Creaform 公司就采用標(biāo)記點(diǎn)拼接法來拼接掃描的點(diǎn)云。另外德國的ATOS 系統(tǒng)也是采用這種方法。
標(biāo)記點(diǎn)拼接方法首先要對(duì)貼在被測(cè)物上的一組或多組標(biāo)記點(diǎn)中心進(jìn)行提取,得到同組標(biāo)記點(diǎn)在不同坐標(biāo)系下的坐標(biāo)位置,換算出兩組坐標(biāo)系的變換矩陣,從而將兩組坐標(biāo)系下被測(cè)物的點(diǎn)云轉(zhuǎn)換到相同坐標(biāo)系下,完成多視點(diǎn)云的拼接。
在對(duì)圓形標(biāo)記點(diǎn)進(jìn)行提取時(shí)隨機(jī)性因素很強(qiáng),圖像背景復(fù)雜,掃描光照特性未知[1],標(biāo)記點(diǎn)面積較小,成像后變形為類橢圓,提取輪廓和圓心比較困難。
OpenCV 是開源的計(jì)算機(jī)視覺函數(shù)庫[2],實(shí)現(xiàn)了大量通用算法,具有強(qiáng)大的圖像和矩陣運(yùn)算能力,在物體跟蹤、模式識(shí)別、圖像處理和三維視覺等方面得到廣泛的應(yīng)用,為數(shù)字圖像處理和計(jì)算機(jī)視覺應(yīng)用提供了極大的方便。利用OpenCV 對(duì)類橢圓圖像進(jìn)行圖像處理以及橢圓擬合,方便快捷,對(duì)多視點(diǎn)云拼接中的標(biāo)記點(diǎn)提取以及計(jì)算機(jī)視覺其他方面的應(yīng)用有著重要意義。
本研究中對(duì)于圓標(biāo)記點(diǎn)的提取,首先提取與圓標(biāo)記點(diǎn)相關(guān)的圖像元素,然后對(duì)圖像元素進(jìn)行橢圓特征參數(shù)提取。提取圖像元素時(shí)采用邊緣檢測(cè)的方法,提取橢圓特征參數(shù)采用橢圓擬合的方法,在橢圓擬合時(shí)采用幾何約束,以便精確識(shí)別所需要的標(biāo)記點(diǎn)。
平滑處理用來減少圖像的噪聲或失真。平滑處理有五種不同的方法:簡單平均法,簡單無縮放的模糊,中值濾波,高斯濾波和雙邊濾波。
本文采集的圖像精度較高,噪聲較少,一般采用簡單平均法。假設(shè)輸入的像素為a5,它的8 鄰域像素為a1、a2、a3、a4、a6、a7、a8、a9,輸出像素為b,那么:
邊緣檢測(cè)實(shí)際上是基于幅度不連續(xù)性進(jìn)行分割的一種方法,也即檢測(cè)變化類型的局部特征[3],例如,灰度值的突變[4]、顏色的突變[5]、紋理的突變等。邊緣檢測(cè)的算法有很多,一般分為四類:經(jīng)典算子法、最優(yōu)算子法、多尺度方法、自適應(yīng)平滑濾波法等。
Canny 算子[6]進(jìn)行邊緣檢測(cè)的方法屬于最優(yōu)算子法,是目前最有效的一種方法。Canny 算法給定了最優(yōu)化檢測(cè)邊緣的三個(gè)指標(biāo):好的信噪比;好的邊緣定位性能;對(duì)唯一邊緣有唯一的響應(yīng)。
具體算法如下:
步驟1:用高斯濾波器平滑圖象;
以二維信號(hào)為例加以討論:二維高斯濾波函數(shù)G(x,y)定義為:
圖像卷積:
其中,σ 是一個(gè)尺度參數(shù),σ 越小,圖像在小的范圍內(nèi)平滑,σ 越大,圖像在大的范圍內(nèi)平滑;I(x,y)是原圖像函數(shù)。
步驟2:邊緣點(diǎn)定位;
首先求出每一點(diǎn)的局部梯度:
計(jì)算平滑梯度方向:
梯度方向上滿足局部梯度值最大的點(diǎn)為邊緣點(diǎn)。
步驟3:用雙閾值算法檢測(cè)和連接邊緣。
雙閾值算法對(duì)步驟2 得到的邊緣點(diǎn)進(jìn)行進(jìn)一步檢測(cè),作用兩個(gè)閾值τ1和τ2,一般情況下τ1與τ2的比值在2:1 至3:1 之間,從而可以得到兩個(gè)閾值邊緣圖象G1[x,y]和G2[x,y]。但是邊緣不閉合。雙閾值法要使G2[x,y]中的邊緣閉合,當(dāng)?shù)竭_(dá)邊緣的斷點(diǎn)時(shí),該算法就在G1[x,y]的8 鄰點(diǎn)位置尋找閾值在τ1和τ2之間的像素,因此算法不斷地在G1[x,y]中收集邊緣,直到將G2[x,y]連接起來為止。
雖然用Canny 算子進(jìn)行邊緣檢測(cè)可以根據(jù)像素間的差異檢測(cè)出輪廓邊界的像素,但是它并沒有將輪廓作為一個(gè)整體。下一步是要將這些邊緣像素組裝成輪廓。
輪廓是構(gòu)成一個(gè)形狀的邊界,一個(gè)輪廓一般由一系列的點(diǎn)組成一條曲線,有多種方法可以表示曲線。OpenCV 中一般用序列來存儲(chǔ)輪廓信息,序列是內(nèi)存存儲(chǔ)器某種結(jié)構(gòu)形式的鏈表,其中每一個(gè)元素是曲線中一個(gè)點(diǎn)的位置。函數(shù)cvFindContours()可以查找二值圖像的輪廓,cvFindContours()查找的輪廓可以是從cvCanny()得到的有邊緣像素的輪廓,也可以是cvThreshold()函數(shù)閾值分割后得到的圖像輪廓。該函數(shù)查找到輪廓后講像素點(diǎn)存放到序列中。
邊緣檢測(cè)和輪廓查找的結(jié)果不僅包括類橢圓標(biāo)記點(diǎn)特征,也包括被測(cè)物或背景中其他橢圓的邊緣以及其他形狀干擾特征,因此必須進(jìn)行完整的類橢圓特征識(shí)別,提取出所需的圓標(biāo)記點(diǎn)的輪廓。利用輪廓變化的基本特征進(jìn)行約束,即對(duì)輪廓邊緣進(jìn)行幾何約束,查找出有效的類橢圓圓標(biāo)記點(diǎn)輪廓。
幾何約束包括面積法和長度法。
圖像中圖形面積S 可用圖形區(qū)域中像素的個(gè)數(shù)來表示,單位為像素。
其中,Smin和Smax為區(qū)域面積閾值。
輪廓的長度用L 來表示,單位為像素,同樣Lmin<L <Lmax其中,Lmin和Lmax為長度閾值。
面積和長度是輪廓的簡單特性,cvCountArea()用來計(jì)算輪廓包圍的面積,cvArcLength()用來計(jì)算輪廓的長度。
在對(duì)類橢圓特征進(jìn)行橢圓擬合時(shí),常用的方法有霍夫變換法和最小二乘法[7-9]。
利用霍夫變換進(jìn)行橢圓擬合,需要對(duì)每一個(gè)檢測(cè)點(diǎn)計(jì)算,時(shí)間較長,而且擬合不準(zhǔn)確。因此本研究采用最小二乘法。
最小二乘法是在隨機(jī)誤差為正態(tài)分布時(shí),由最大似然法推出的最優(yōu)估計(jì)技術(shù)[10]。它可以使測(cè)量誤差的平方和最小,適用于從一組測(cè)量值中求出一組未知量。
假設(shè)一般的橢圓方程為:
為參數(shù)設(shè)置一個(gè)約束條件,避免零解,假設(shè)A +C=1 顯然,直接用上述方程對(duì)邊緣檢測(cè)后的點(diǎn)進(jìn)行最小二乘處理,可以得到方程中的各系數(shù),求目標(biāo)函數(shù):
最小值來確定各系數(shù),再通過極值原理,使f(A,B,D,E,F(xiàn))最小,必有:
由此,可以得到一個(gè)線性方程組,利用求解線性方程組的方法(主高斯消元法)求解。結(jié)合約束條件,求得各參數(shù)的值。
OpenCV 中函數(shù)cvFitEllipse()使用最小二乘法進(jìn)行橢圓擬合,返回一個(gè)與輪廓最相似的橢圓。
圖1 流程圖
應(yīng)用OpenCV 函數(shù)庫中有關(guān)圖像處理的一系列函數(shù)對(duì)采集的圓形標(biāo)記點(diǎn)圖像進(jìn)行處理,最終提取出類橢圓的標(biāo)記點(diǎn)圖像,所用的流程如圖1 所示。
從文件中讀取圖像時(shí)的語句為:
從文件中讀取圖像程序如下:
讀取的原圖像如圖2 所示,轉(zhuǎn)換后灰度圖像如圖3 所示。
圖2 原圖像
圖3 灰度圖
對(duì)圖像進(jìn)行平滑處理以及邊緣檢測(cè)的程序如下:
cvSmooth ();//采用簡單模糊的方法,因此設(shè)置方法參數(shù)為CV_BLUE
cvCanny();//將最高閾值為最低閾值的三倍
平滑處理后圖像如圖4 所示,邊緣檢測(cè)的圖像如圖5 所示。
圖4 平滑處理結(jié)果
圖5 邊緣檢測(cè)結(jié)果
進(jìn)行類橢圓標(biāo)記點(diǎn)識(shí)別的程序如下:
幾何約束后的圖像如圖6 所示。
如圖7 將橢圓擬合后的圖像在原圖上顯示,如圖8 去除干擾后單獨(dú)顯示。
圖6 幾何約束結(jié)果
圖7 橢圓擬合在原圖顯示
圖8 單獨(dú)顯示
擬合后得到的圓心坐標(biāo)如表1 所示。
表1 圓心坐標(biāo)
本研究在于利用OpenCV 計(jì)算機(jī)視覺函數(shù)庫準(zhǔn)確提取標(biāo)記點(diǎn)的類橢圓輪廓以及中心,從而直接求出變換矩陣,完成不同坐標(biāo)系下的點(diǎn)云拼接。實(shí)驗(yàn)中邊緣提取采用的閾值、幾何約束采用的閾值都直接影響擬合的類橢圓,采用合適的閾值可以有效排除雜質(zhì)背景,更為簡單、快捷的提取所需的類橢圓標(biāo)記點(diǎn)。
[1]楊偉光. 三維掃描系統(tǒng)中標(biāo)志點(diǎn)識(shí)別與人臉圖像的立體匹配研究[D]. 南京:東南大學(xué),2008.
[2]Gary Bradski,Adrian Kaehler 著. Learning OpenCV(中文版)[M]. 北京:清華大學(xué)出版社,2009.
[3]劉祚時(shí),沈哲. 改進(jìn)的圖像分割方法的應(yīng)用[J]. 煤炭技術(shù),2010,29(3):218-220.
[4]于梅,殷冰,梁棟,等. 基于邊緣檢測(cè)的contourlet 變換圖像去噪[J]. 計(jì)算機(jī)技術(shù)與發(fā)展,2008,18(6):104-106.
[5]李惠光,任爽,李國友,等. 一種基于顏色信息的足球機(jī)器人目標(biāo)搜索方法[J]. 計(jì)算機(jī)仿真,2007(3):152-155.
[6]Canny.J,A computational approach to edge detection,IEEE Transactions on Pattern Analysis and Machine Intelligence,1986,PAMI-8:639-643.
[7]Grander W,strebel R,et. al. Least-squares fitting of circles and ellipses. BIT Numerical Mathematics,1993,34(4):558-578.
[8]Rosin P L,Ellipse fitting by accumulating five-point fits.Pattern Recognition Letters.1993,14(8):661-669.
[9]鈕毅. 部分遮擋條件下橢圓目標(biāo)識(shí)別[D]. 上海:上海交通大學(xué)自動(dòng)化學(xué)院,2007.
[10]閆蓓,王斌,李媛. 基于最小二乘法的橢圓擬合改進(jìn)算法[J]. 北京航空航天大學(xué)學(xué)報(bào),2008,34(3):295-298.