李 恒,楊延竹,柳俊先,楊 肖
(東華大學 機械工程學院, 上海)
在三維攝影測量領域,為了提高相機標定、特征點立體匹配、數據拼接以及三維重建的準確性[1-2],使用編碼標靶作為被測物體表面特征點。其中,圓環編碼標靶具有仿射不變性、旋轉平移不變性、易于識別等特點,因而被廣泛應用。
空間平面上的圓在相機成像后易變為橢圓。由于透視投影的特性,圓心的投影點并不是橢圓幾何中心,圖像中單個橢圓可能對應著空間中多個平面圓,難以通過單個橢圓求解準確的中心,因此環狀編碼標靶中心精確定位與編碼標靶解碼是研究的關鍵。關于編碼標靶中心的提取:孫麗君等[3]提出一種基于均值像素法的圓心亞像素提取方法,通過對編碼標靶內像素點及像素坐標加權質心,求得其中心亞像素坐標,但未考慮透視變換的影響。陳天飛等[4]利用射影變換及RANSAC思想,計算橢圓圓心與射影變換后實際標靶標準圓心,并通過迭代的思想來優化射影變換矩陣,求得最優的橢圓圓心,但該方法迭代時間較長。Xie等[5]根據對偶二次曲線的幾何特征提出經過任意兩標志點的對偶矩陣,可得到一條穿過兩圓圓心投影的特征向量,將同一個圓心投影后的多個向量叉乘,可得到任意圓圓心,但這需要平面內有非共線的3點才能求出圓心。關于編碼標靶的解碼:周申江等[6]通過仿射變換將橢圓變換為標準圓,然后進行編碼標靶的解碼,但此方法解碼準確率較低;金滔等[7]在傳統圓環編碼標靶上添加3個定位符,既可以用于標靶定位,也可以增加標靶的數目,但圖像較模糊時無法識別定位符;熊雪菲等[8]將編碼標靶設計為定位層、起始層、編碼層,既提高解碼準確率,又增加了編碼容量,但設計較復雜。



圖1 圓的空間透視投影圖Fig.1 Spatial perspective projection diagram of a circle
(1)
設
則由二次曲線投影變換公式一般表示形式E′=H-TEH-1可得[10],二次曲線變換后在圖像平面上成像的橢圓方程如式(2)所示。
(2)
通過觀察式(2)可發現:
1)若向量β屬于正交于P3的平面,則E′1β=sE′2β(s為比例系數)。取該平面的兩個基向量α1、α2,可得到E′1β1=sE′2β1和E′1β2=sE′2β2,即這兩個基向量為矩陣E′2-1E′1的特征向量,兩者對應的特征值均為s。


經進一步分析發現(2)中特征向量的含義,由H-1H=I可得H的第3個列向量h3正交于P1和P2。
(3)
另外,由點投影變換p′=Hp可得,原平面上原點經過投影變換后的坐標也為h3。
(4)

本文采用具有明顯特征的環形編碼標靶進行編解碼,如圖2所示。對于左邊不帶編碼信息的非編碼標靶無編碼信息,只能對其圓心進行定位,因此常用于相機的標定。而右邊有編碼信息的編碼標靶不僅能對同心圓圓心進行定位,還能識別唯一的編碼信息,常用于點云拼接和初步確立空間三維點坐標等[11]。

圖2 非編碼標靶與編碼標靶Fig.2 Non-coded target and coded target
編碼標靶的設計具備唯一性、便于識別以及數量充足等特點。Schneider等[12]設計的環形編碼標靶應用較廣泛,本文在該研究的基礎上,設計了新的環狀編碼標靶(見圖2)。該編碼標靶由外部環狀編碼帶與內部被12等分的編碼標靶組成,其中,外部編碼帶用于標靶快速定位,內部編碼標靶用于標靶識別。
此編碼標靶同心圓直徑由外向內分別為11、8、5 mm,每一等分編碼標靶根據顏色的不同對應二進制的0或1。遍歷編碼標靶一周,將此12位二進制數對應的最小十進制作為此編碼標靶的身份標識。
采集編碼標靶后,要對圖像進行標靶提取,將符合特征的候選橢圓提取出來,以便后面的定位與解碼,具體流程如圖3所示。

圖3 編碼標靶提取流程Fig.3 Encoded target extraction process
2.2.1 圖像預處理
首先,將采集到的原始圖像轉為灰度圖像,以減少圖像原始數據,便于后續數據處理;其次,對灰度圖采用中值濾波進行非線性處理,保留圖像邊緣信息,以實現在不損失圖像細節的情況下保護圖像邊緣信息;再次,通過大津閾值法對圖像進行二值化處理;最后,利用Canny邊緣算子進行邊緣提取。Canny邊緣提取算子具有對梯度方向幅值進行非極大值抑制和可通過雙閾值來進行邊緣檢測的優點,能夠很好地檢測邊緣并進行連接。預處理前后的圖像如圖4所示。

圖4 預處理前后圖像Fig.4 Before and after pre-processing images
2.2.2 最小二乘法擬合橢圓
將提取到的邊緣像素進行最小二乘法擬合橢圓,確定標靶中心位置坐標,以便進行下一步操作。
空間中的二次曲線如式(5)。
f(x,y)=Ax2+Bxy+Cy2+Dx+Ey+F
(5)
則目標函數為
(6)
若使G取得最小值,根據極值原理,需要滿足式(7)。
利用WordCloud 制作詞云時,一般經過三個步驟:一是使用wordcloud.WorldCloud 函數來設置詞云對象的有關屬性(或者說是參數);二是利用wordcloud.generate(text)函數或wordcloud.generate_from_frequencies(frequencies[,…])函數生成詞云,前者是根據文本生成詞云,后者是根據詞頻生成詞云;三是利用wordcloud.to_file(file_name)函數將詞云輸出到文件進行保存。
(7)
設橢圓中心坐標為(x0,y0),長軸半徑為ra,短軸半徑為rb,橢圓偏角(橢圓短軸與水平方向的夾角)為θ,則計算橢圓如式(8)所示。
(8)
聯立(5)和(8)可得[13]:
(9)
此時經投影變換二次曲線對應的矩陣形式分別為

2.2.3 橢圓篩選準則
通過最小二乘法對橢圓進行擬合,精確獲取標靶特征圓。為了對擬合的候選“橢圓”進行篩選,以剔除由于環境光和其他因素造成的影響。具體通過以下3個準則來確定真實橢圓。
1)尺寸準則。通過判斷提取出的輪廓內像素個數φ是否滿足φmin<φ<φmax來確定并清除不在像素范圍內的輪廓,φmin和φmax分別為最小和最大像素閾值。
2)圓度準則。設候選橢圓輪廓內點到橢圓的距離[14]為T,并設置一個誤差閾值Terror,當l>Terror時,索引index+1,最后判斷索引index的大小,如果index大于設置的閾值Tindex,認為此候選輪廓不是橢圓輪廓,則進行剔除。
3)長短軸比準則。當輪廓長軸大于3倍的短軸時,認為此輪廓傾斜角度過大,不符合橢圓輪廓特征,則進行剔除。

圖5 同心橢圓效果圖Fig.5 Concentric ellipse effect
由于拍攝角度的不同,環狀標靶成像相較于實際三維圖像會發生不同比例的收縮變換,對解碼產生較大的影響,因此采用基于最小二乘法的仿射變換來矯正圖像,使其成為正圓。仿射變換通過對圖像進行旋轉、平移,解決相機成像過程中的圖像比例失調問題[15]。
對拍攝的圖像進行仿射變換后得到圓環標靶,如圖6所示。由圖6可知,圓環M、N分別為編碼帶外環與內環,經過仿射變換可知,此時圓環M、N為標準圓,對兩圓環之間的像素進行遍歷,從而解得編碼標靶。

圖6 變換后的圓環標靶Fig.6 The transformed circular target
本文采用12位編碼標靶進行編碼,每一等分編碼帶所對應的角度為30°。通過使用Flann庫中KD-Tree搜索半徑最近點,得到每個角度對應半徑范圍內像素的數目l。l與設置的閾值T進行比較,如果l>T,則對應的二進制數字為1;否則,二進制數字為0。然后每隔30°進行一次搜索,得到一個12位的二進制數字序列b[i]。通過移位運算將此二進制序列b[i]轉為對應最小十進制整數的二進制序列bmin[i],此時完成第一次遍歷。第二次遍歷相對于第一次遍歷位置順時針偏移1°,同樣將得到的12位二進制序列轉為對應的最小二進制序列。最后,將得到的30個對應最小二進制序列對應元素相加,并取平均值。分別對該序列的每一位數字進行判斷,如果該數字大于0.5,則將該二進制數字設置為1;反之,則設置為0。此時得到的二進制序列即最終的二進制序列,將該序列轉為十進制數,即此編碼標靶對應的編碼值,對應的標靶解碼如圖7所示。

圖7 編碼標靶解碼圖Fig.7 Decoding diagram of the coded target
本文采用分辨率為6 464像素×4 852像素的相機對同心圓投影變換的圓心提取方法的精度和環狀編碼標靶不同角度解碼的精度進行驗證。試驗分為3部分:一是對同心圓中心提取精度進行測試分析,并與文獻[3]中利用質心法所提取亞像素中心精度進行對比;二是對不同角度編碼標靶解碼的精度進行分析;三是對不同角度編碼標靶重復性誤差進行分析。
將相機光軸與貼有編碼標靶平面的夾角設置為60°,并對9個編碼標靶進行圓心提取,以驗證本文方法精度。圓心提取精度結果如圖8所示。

圖8 圓心提取精度驗證Fig.8 Verification of circle extraction accuracy
圖8(a)為本文圓心提取精度標靶圖。圖8(b)為采用編碼值為1 365的12位編碼標靶進行驗證,以編碼帶內圈與外圈半徑平均值畫圓,得到圖中紅色輪廓,并與編碼帶相交于12個點。以圖8(b)中Q為例,根據透視投影變換原理,理論上Q與Q′經過圓心,同理其余相交點兩兩之間連線也都經過圓心,通過最小二乘法求得距離6條直線最近的點為準確圓心。
將上述方法求得圖8(a)中的全部圓心作為理想圓心,并與本文通過同心圓投影變換得到的圓心、非編碼帶外圓通過橢圓擬合得到的圓心、內圓通過橢圓擬合得到的圓心進行對比,結果如表1所示。

表1 不同方法所提取的圓心坐標對比 單位:像素
由表1數據可知,本文算法得到的中心圓與理想圓心的平均誤差為0.225像素,相較于外圓擬合圓心平均誤差(0.501像素)、內圓擬合誤差(0.294像素)有所減少,這說明本文算法得到的圓心坐標更接近理想圓心,圓心定位精度更高。
為進一步驗證本文提出的圓心提取方法精度,將本文算法提取到的編碼標靶圓心與文獻[3]中提出的方法進行對比。其中,文獻[3]利用質心法對仿射變換后的單個編碼標靶進行中心定位的方法,得到編碼標靶的亞像素中心。分別采用理想圓心提取方法、本文同心圓提取圓心方法、文獻[3]中的方法對圖8(a)中的編碼標靶進行圓心亞像素提取,結果如表2所示。

表2 與其他文獻提取圓心坐標對比 單位:像素
由表2可知,本文所提出的方法在圓心提取平均誤差和標準差方面都明顯比文獻[3]中利用質心法求得的圓心亞像素方法誤差要小,更能適用復雜環境下對環狀編碼標靶的定位。
為驗證本文解碼算法的識別效果,采用不同角度對編碼標靶識別率進行驗證。本文選用的拍攝角度如圖9所示,圖9(a)~(e)分別為采用60°、65°、70°、75°、80°來進行驗證。

圖9 不同角度下編碼標靶識別結果圖Fig.9 The recognition results of coded targets under different angles
當相機光軸與編碼標靶平面法線角度為75°(<80°)時,以圖9(d)為例,提取標靶平面上64個編碼標靶中心,提取標靶中心結果如表3所示。由表3得到的64個編碼標靶中心坐標可知,在75°時標靶平面上所有編碼標靶都能被提取出來,此時解碼率為100%。當角度變為80°時,如圖9(e)所示,只有46個編碼標靶被提取出來,其解碼率只有71.8%,因此建議在用編碼標靶進行識別定位時盡量使得其角度在75°以內。

表3 相機與標靶平面呈75°時的編碼標靶圓心提取Table 3 Coded target circle extraction when the camera is at 75° to the target plane
將相機固定并調整標靶平面與相機的角度,相機曝光設置為40 000 μs條件下采用同心圓環提取編碼標靶圓心的方式,分別對45°、50°、55°、60°、65°、70°、75°等7種拍攝位姿進行10次拍攝,最終得到圓心重復性誤差最大值。不同角度提取結果如表4所示。

表4 不同角度提取圓心重復誤差Table 4 Repetition error of circle center extraction at different angles
根據表4知,不同角度的編碼標靶重復性誤差均在0.1像素內,可以看出本文圓心提取方法能適應不同角度拍攝條件,且穩定性較高。
本文提出了一種基于同心圓投影變換求解圓心的方法。該方法利用同心圓投影變換后圓心唯一的特性,對投影變換后的兩橢圓矩陣進行線性組合,從而確定同心圓圓心即為此線性組合矩陣第三個特征值所對應的特征向量。此外,對于編碼標靶的識別,設計了一套基于最小二乘仿射變換方法的編碼標靶編解碼流程。
為驗證本文的方法提取橢圓圓心的精度,在相機光軸與編碼標靶平面法線成60°角度的情況下,利用最小二乘法求得編碼值為1 365的編碼標靶理想圓心。試驗結果表明,所求得的圓心距理想圓心的平均誤差為0.225像素,小于內外圓擬合的平均誤差,更接近真實圓心。對于編碼標靶的識別,采用相機與編碼標靶夾角在75°以內有良好的解碼效果。
本文提出的對編碼標靶精確定位的方法能夠適應復雜環境的要求,并很好地對圓心進行定位,進而提高攝像機的標定與特征點立體匹配精度。