李 恒,楊延竹,柳俊先,楊 肖
(東華大學(xué) 機械工程學(xué)院, 上海)
在三維攝影測量領(lǐng)域,為了提高相機標(biāo)定、特征點立體匹配、數(shù)據(jù)拼接以及三維重建的準(zhǔn)確性[1-2],使用編碼標(biāo)靶作為被測物體表面特征點。其中,圓環(huán)編碼標(biāo)靶具有仿射不變性、旋轉(zhuǎn)平移不變性、易于識別等特點,因而被廣泛應(yīng)用。
空間平面上的圓在相機成像后易變?yōu)闄E圓。由于透視投影的特性,圓心的投影點并不是橢圓幾何中心,圖像中單個橢圓可能對應(yīng)著空間中多個平面圓,難以通過單個橢圓求解準(zhǔn)確的中心,因此環(huán)狀編碼標(biāo)靶中心精確定位與編碼標(biāo)靶解碼是研究的關(guān)鍵。關(guān)于編碼標(biāo)靶中心的提?。簩O麗君等[3]提出一種基于均值像素法的圓心亞像素提取方法,通過對編碼標(biāo)靶內(nèi)像素點及像素坐標(biāo)加權(quán)質(zhì)心,求得其中心亞像素坐標(biāo),但未考慮透視變換的影響。陳天飛等[4]利用射影變換及RANSAC思想,計算橢圓圓心與射影變換后實際標(biāo)靶標(biāo)準(zhǔn)圓心,并通過迭代的思想來優(yōu)化射影變換矩陣,求得最優(yōu)的橢圓圓心,但該方法迭代時間較長。Xie等[5]根據(jù)對偶二次曲線的幾何特征提出經(jīng)過任意兩標(biāo)志點的對偶矩陣,可得到一條穿過兩圓圓心投影的特征向量,將同一個圓心投影后的多個向量叉乘,可得到任意圓圓心,但這需要平面內(nèi)有非共線的3點才能求出圓心。關(guān)于編碼標(biāo)靶的解碼:周申江等[6]通過仿射變換將橢圓變換為標(biāo)準(zhǔn)圓,然后進(jìn)行編碼標(biāo)靶的解碼,但此方法解碼準(zhǔn)確率較低;金滔等[7]在傳統(tǒng)圓環(huán)編碼標(biāo)靶上添加3個定位符,既可以用于標(biāo)靶定位,也可以增加標(biāo)靶的數(shù)目,但圖像較模糊時無法識別定位符;熊雪菲等[8]將編碼標(biāo)靶設(shè)計為定位層、起始層、編碼層,既提高解碼準(zhǔn)確率,又增加了編碼容量,但設(shè)計較復(fù)雜。
圖1 圓的空間透視投影圖Fig.1 Spatial perspective projection diagram of a circle
(1)
設(shè)
則由二次曲線投影變換公式一般表示形式E′=H-TEH-1可得[10],二次曲線變換后在圖像平面上成像的橢圓方程如式(2)所示。
(2)
通過觀察式(2)可發(fā)現(xiàn):
1)若向量β屬于正交于P3的平面,則E′1β=sE′2β(s為比例系數(shù))。取該平面的兩個基向量α1、α2,可得到E′1β1=sE′2β1和E′1β2=sE′2β2,即這兩個基向量為矩陣E′2-1E′1的特征向量,兩者對應(yīng)的特征值均為s。
經(jīng)進(jìn)一步分析發(fā)現(xiàn)(2)中特征向量的含義,由H-1H=I可得H的第3個列向量h3正交于P1和P2。
(3)
另外,由點投影變換p′=Hp可得,原平面上原點經(jīng)過投影變換后的坐標(biāo)也為h3。
(4)
本文采用具有明顯特征的環(huán)形編碼標(biāo)靶進(jìn)行編解碼,如圖2所示。對于左邊不帶編碼信息的非編碼標(biāo)靶無編碼信息,只能對其圓心進(jìn)行定位,因此常用于相機的標(biāo)定。而右邊有編碼信息的編碼標(biāo)靶不僅能對同心圓圓心進(jìn)行定位,還能識別唯一的編碼信息,常用于點云拼接和初步確立空間三維點坐標(biāo)等[11]。
圖2 非編碼標(biāo)靶與編碼標(biāo)靶Fig.2 Non-coded target and coded target
編碼標(biāo)靶的設(shè)計具備唯一性、便于識別以及數(shù)量充足等特點。Schneider等[12]設(shè)計的環(huán)形編碼標(biāo)靶應(yīng)用較廣泛,本文在該研究的基礎(chǔ)上,設(shè)計了新的環(huán)狀編碼標(biāo)靶(見圖2)。該編碼標(biāo)靶由外部環(huán)狀編碼帶與內(nèi)部被12等分的編碼標(biāo)靶組成,其中,外部編碼帶用于標(biāo)靶快速定位,內(nèi)部編碼標(biāo)靶用于標(biāo)靶識別。
此編碼標(biāo)靶同心圓直徑由外向內(nèi)分別為11、8、5 mm,每一等分編碼標(biāo)靶根據(jù)顏色的不同對應(yīng)二進(jìn)制的0或1。遍歷編碼標(biāo)靶一周,將此12位二進(jìn)制數(shù)對應(yīng)的最小十進(jìn)制作為此編碼標(biāo)靶的身份標(biāo)識。
采集編碼標(biāo)靶后,要對圖像進(jìn)行標(biāo)靶提取,將符合特征的候選橢圓提取出來,以便后面的定位與解碼,具體流程如圖3所示。
圖3 編碼標(biāo)靶提取流程Fig.3 Encoded target extraction process
2.2.1 圖像預(yù)處理
首先,將采集到的原始圖像轉(zhuǎn)為灰度圖像,以減少圖像原始數(shù)據(jù),便于后續(xù)數(shù)據(jù)處理;其次,對灰度圖采用中值濾波進(jìn)行非線性處理,保留圖像邊緣信息,以實現(xiàn)在不損失圖像細(xì)節(jié)的情況下保護(hù)圖像邊緣信息;再次,通過大津閾值法對圖像進(jìn)行二值化處理;最后,利用Canny邊緣算子進(jìn)行邊緣提取。Canny邊緣提取算子具有對梯度方向幅值進(jìn)行非極大值抑制和可通過雙閾值來進(jìn)行邊緣檢測的優(yōu)點,能夠很好地檢測邊緣并進(jìn)行連接。預(yù)處理前后的圖像如圖4所示。
圖4 預(yù)處理前后圖像Fig.4 Before and after pre-processing images
2.2.2 最小二乘法擬合橢圓
將提取到的邊緣像素進(jìn)行最小二乘法擬合橢圓,確定標(biāo)靶中心位置坐標(biāo),以便進(jìn)行下一步操作。
空間中的二次曲線如式(5)。
f(x,y)=Ax2+Bxy+Cy2+Dx+Ey+F
(5)
則目標(biāo)函數(shù)為
(6)
若使G取得最小值,根據(jù)極值原理,需要滿足式(7)。
利用WordCloud 制作詞云時,一般經(jīng)過三個步驟:一是使用wordcloud.WorldCloud 函數(shù)來設(shè)置詞云對象的有關(guān)屬性(或者說是參數(shù));二是利用wordcloud.generate(text)函數(shù)或wordcloud.generate_from_frequencies(frequencies[,…])函數(shù)生成詞云,前者是根據(jù)文本生成詞云,后者是根據(jù)詞頻生成詞云;三是利用wordcloud.to_file(file_name)函數(shù)將詞云輸出到文件進(jìn)行保存。
(7)
設(shè)橢圓中心坐標(biāo)為(x0,y0),長軸半徑為ra,短軸半徑為rb,橢圓偏角(橢圓短軸與水平方向的夾角)為θ,則計算橢圓如式(8)所示。
(8)
聯(lián)立(5)和(8)可得[13]:
(9)
此時經(jīng)投影變換二次曲線對應(yīng)的矩陣形式分別為
2.2.3 橢圓篩選準(zhǔn)則
通過最小二乘法對橢圓進(jìn)行擬合,精確獲取標(biāo)靶特征圓。為了對擬合的候選“橢圓”進(jìn)行篩選,以剔除由于環(huán)境光和其他因素造成的影響。具體通過以下3個準(zhǔn)則來確定真實橢圓。
1)尺寸準(zhǔn)則。通過判斷提取出的輪廓內(nèi)像素個數(shù)φ是否滿足φmin<φ<φmax來確定并清除不在像素范圍內(nèi)的輪廓,φmin和φmax分別為最小和最大像素閾值。
2)圓度準(zhǔn)則。設(shè)候選橢圓輪廓內(nèi)點到橢圓的距離[14]為T,并設(shè)置一個誤差閾值Terror,當(dāng)l>Terror時,索引index+1,最后判斷索引index的大小,如果index大于設(shè)置的閾值Tindex,認(rèn)為此候選輪廓不是橢圓輪廓,則進(jìn)行剔除。
3)長短軸比準(zhǔn)則。當(dāng)輪廓長軸大于3倍的短軸時,認(rèn)為此輪廓傾斜角度過大,不符合橢圓輪廓特征,則進(jìn)行剔除。
圖5 同心橢圓效果圖Fig.5 Concentric ellipse effect
由于拍攝角度的不同,環(huán)狀標(biāo)靶成像相較于實際三維圖像會發(fā)生不同比例的收縮變換,對解碼產(chǎn)生較大的影響,因此采用基于最小二乘法的仿射變換來矯正圖像,使其成為正圓。仿射變換通過對圖像進(jìn)行旋轉(zhuǎn)、平移,解決相機成像過程中的圖像比例失調(diào)問題[15]。
對拍攝的圖像進(jìn)行仿射變換后得到圓環(huán)標(biāo)靶,如圖6所示。由圖6可知,圓環(huán)M、N分別為編碼帶外環(huán)與內(nèi)環(huán),經(jīng)過仿射變換可知,此時圓環(huán)M、N為標(biāo)準(zhǔn)圓,對兩圓環(huán)之間的像素進(jìn)行遍歷,從而解得編碼標(biāo)靶。
圖6 變換后的圓環(huán)標(biāo)靶Fig.6 The transformed circular target
本文采用12位編碼標(biāo)靶進(jìn)行編碼,每一等分編碼帶所對應(yīng)的角度為30°。通過使用Flann庫中KD-Tree搜索半徑最近點,得到每個角度對應(yīng)半徑范圍內(nèi)像素的數(shù)目l。l與設(shè)置的閾值T進(jìn)行比較,如果l>T,則對應(yīng)的二進(jìn)制數(shù)字為1;否則,二進(jìn)制數(shù)字為0。然后每隔30°進(jìn)行一次搜索,得到一個12位的二進(jìn)制數(shù)字序列b[i]。通過移位運算將此二進(jìn)制序列b[i]轉(zhuǎn)為對應(yīng)最小十進(jìn)制整數(shù)的二進(jìn)制序列bmin[i],此時完成第一次遍歷。第二次遍歷相對于第一次遍歷位置順時針偏移1°,同樣將得到的12位二進(jìn)制序列轉(zhuǎn)為對應(yīng)的最小二進(jìn)制序列。最后,將得到的30個對應(yīng)最小二進(jìn)制序列對應(yīng)元素相加,并取平均值。分別對該序列的每一位數(shù)字進(jìn)行判斷,如果該數(shù)字大于0.5,則將該二進(jìn)制數(shù)字設(shè)置為1;反之,則設(shè)置為0。此時得到的二進(jìn)制序列即最終的二進(jìn)制序列,將該序列轉(zhuǎn)為十進(jìn)制數(shù),即此編碼標(biāo)靶對應(yīng)的編碼值,對應(yīng)的標(biāo)靶解碼如圖7所示。
圖7 編碼標(biāo)靶解碼圖Fig.7 Decoding diagram of the coded target
本文采用分辨率為6 464像素×4 852像素的相機對同心圓投影變換的圓心提取方法的精度和環(huán)狀編碼標(biāo)靶不同角度解碼的精度進(jìn)行驗證。試驗分為3部分:一是對同心圓中心提取精度進(jìn)行測試分析,并與文獻(xiàn)[3]中利用質(zhì)心法所提取亞像素中心精度進(jìn)行對比;二是對不同角度編碼標(biāo)靶解碼的精度進(jìn)行分析;三是對不同角度編碼標(biāo)靶重復(fù)性誤差進(jìn)行分析。
將相機光軸與貼有編碼標(biāo)靶平面的夾角設(shè)置為60°,并對9個編碼標(biāo)靶進(jìn)行圓心提取,以驗證本文方法精度。圓心提取精度結(jié)果如圖8所示。
圖8 圓心提取精度驗證Fig.8 Verification of circle extraction accuracy
圖8(a)為本文圓心提取精度標(biāo)靶圖。圖8(b)為采用編碼值為1 365的12位編碼標(biāo)靶進(jìn)行驗證,以編碼帶內(nèi)圈與外圈半徑平均值畫圓,得到圖中紅色輪廓,并與編碼帶相交于12個點。以圖8(b)中Q為例,根據(jù)透視投影變換原理,理論上Q與Q′經(jīng)過圓心,同理其余相交點兩兩之間連線也都經(jīng)過圓心,通過最小二乘法求得距離6條直線最近的點為準(zhǔn)確圓心。
將上述方法求得圖8(a)中的全部圓心作為理想圓心,并與本文通過同心圓投影變換得到的圓心、非編碼帶外圓通過橢圓擬合得到的圓心、內(nèi)圓通過橢圓擬合得到的圓心進(jìn)行對比,結(jié)果如表1所示。
表1 不同方法所提取的圓心坐標(biāo)對比 單位:像素
由表1數(shù)據(jù)可知,本文算法得到的中心圓與理想圓心的平均誤差為0.225像素,相較于外圓擬合圓心平均誤差(0.501像素)、內(nèi)圓擬合誤差(0.294像素)有所減少,這說明本文算法得到的圓心坐標(biāo)更接近理想圓心,圓心定位精度更高。
為進(jìn)一步驗證本文提出的圓心提取方法精度,將本文算法提取到的編碼標(biāo)靶圓心與文獻(xiàn)[3]中提出的方法進(jìn)行對比。其中,文獻(xiàn)[3]利用質(zhì)心法對仿射變換后的單個編碼標(biāo)靶進(jìn)行中心定位的方法,得到編碼標(biāo)靶的亞像素中心。分別采用理想圓心提取方法、本文同心圓提取圓心方法、文獻(xiàn)[3]中的方法對圖8(a)中的編碼標(biāo)靶進(jìn)行圓心亞像素提取,結(jié)果如表2所示。
表2 與其他文獻(xiàn)提取圓心坐標(biāo)對比 單位:像素
由表2可知,本文所提出的方法在圓心提取平均誤差和標(biāo)準(zhǔn)差方面都明顯比文獻(xiàn)[3]中利用質(zhì)心法求得的圓心亞像素方法誤差要小,更能適用復(fù)雜環(huán)境下對環(huán)狀編碼標(biāo)靶的定位。
為驗證本文解碼算法的識別效果,采用不同角度對編碼標(biāo)靶識別率進(jìn)行驗證。本文選用的拍攝角度如圖9所示,圖9(a)~(e)分別為采用60°、65°、70°、75°、80°來進(jìn)行驗證。
圖9 不同角度下編碼標(biāo)靶識別結(jié)果圖Fig.9 The recognition results of coded targets under different angles
當(dāng)相機光軸與編碼標(biāo)靶平面法線角度為75°(<80°)時,以圖9(d)為例,提取標(biāo)靶平面上64個編碼標(biāo)靶中心,提取標(biāo)靶中心結(jié)果如表3所示。由表3得到的64個編碼標(biāo)靶中心坐標(biāo)可知,在75°時標(biāo)靶平面上所有編碼標(biāo)靶都能被提取出來,此時解碼率為100%。當(dāng)角度變?yōu)?0°時,如圖9(e)所示,只有46個編碼標(biāo)靶被提取出來,其解碼率只有71.8%,因此建議在用編碼標(biāo)靶進(jìn)行識別定位時盡量使得其角度在75°以內(nèi)。
表3 相機與標(biāo)靶平面呈75°時的編碼標(biāo)靶圓心提取Table 3 Coded target circle extraction when the camera is at 75° to the target plane
將相機固定并調(diào)整標(biāo)靶平面與相機的角度,相機曝光設(shè)置為40 000 μs條件下采用同心圓環(huán)提取編碼標(biāo)靶圓心的方式,分別對45°、50°、55°、60°、65°、70°、75°等7種拍攝位姿進(jìn)行10次拍攝,最終得到圓心重復(fù)性誤差最大值。不同角度提取結(jié)果如表4所示。
表4 不同角度提取圓心重復(fù)誤差Table 4 Repetition error of circle center extraction at different angles
根據(jù)表4知,不同角度的編碼標(biāo)靶重復(fù)性誤差均在0.1像素內(nèi),可以看出本文圓心提取方法能適應(yīng)不同角度拍攝條件,且穩(wěn)定性較高。
本文提出了一種基于同心圓投影變換求解圓心的方法。該方法利用同心圓投影變換后圓心唯一的特性,對投影變換后的兩橢圓矩陣進(jìn)行線性組合,從而確定同心圓圓心即為此線性組合矩陣第三個特征值所對應(yīng)的特征向量。此外,對于編碼標(biāo)靶的識別,設(shè)計了一套基于最小二乘仿射變換方法的編碼標(biāo)靶編解碼流程。
為驗證本文的方法提取橢圓圓心的精度,在相機光軸與編碼標(biāo)靶平面法線成60°角度的情況下,利用最小二乘法求得編碼值為1 365的編碼標(biāo)靶理想圓心。試驗結(jié)果表明,所求得的圓心距理想圓心的平均誤差為0.225像素,小于內(nèi)外圓擬合的平均誤差,更接近真實圓心。對于編碼標(biāo)靶的識別,采用相機與編碼標(biāo)靶夾角在75°以內(nèi)有良好的解碼效果。
本文提出的對編碼標(biāo)靶精確定位的方法能夠適應(yīng)復(fù)雜環(huán)境的要求,并很好地對圓心進(jìn)行定位,進(jìn)而提高攝像機的標(biāo)定與特征點立體匹配精度。