鮑 茜 李 鋒
(江蘇科技大學電子信息學院 鎮江 212003)
通過將立體視覺中一個攝像機用投影儀代替來實現結構光投影三維形態測量。投影儀向被測物體投射按照一定編碼模式和規則的圖案,形成主動式三維形態測量[1]。通過對拍攝到的投影編碼圖像解碼來確定相機平面和投影平面中點的對應關系,結合標定獲得的相機和投影儀光學內、外部參數及三角變換求出圖像中所有點的深度信息[2]。目前,發展最為成熟的三維形態測量技術是線結構光投影,但是其由于測量過程需要拍攝多張圖像,導致測量效率低[3]。面結構光編碼方法通過在二維方向上實現編碼模式,編碼更加多樣,單次拍攝投影圖像便可以獲得三維測量場景中物體的深度信息。面結構光投影三維形態測量方法由于測量精度高、速度快及范圍廣等優點得到廣泛應用[4]。在工業制造領域,一個重要的問題是對生產線中快速運行產品的質量檢測[5]。因此在面結構光編碼模式中,利用條紋中心位置實現解碼時,如何快速準確提取條紋中心位置,是提高動態目標三維測量速率的一個關鍵問題。
目前,光條紋中心提取算法主要有梯度重心法[6]、方向模板法[7]、steger 法[8]和曲線擬合法[9]等。梯度重心法對條紋中心的提取速度較快[10],但是其準確度和穩定性較差,易受噪聲干擾,出現毛刺現象[11],影響精度。方向模板法提取速度快,但是易受條紋寬度的影響,不能根據條紋的寬度生成相應大小的模板[12],因此提取精度不高及穩定性低。Steger法對于條紋寬度變化復雜的環境下難以實現條紋中心位置的準確提取,且需要多次高斯卷積造成計算量較大[13]。曲線擬合法雖然提取準確度高,穩定性高,魯棒性好,但是檢測速度慢,并且不適合條紋寬度變化復雜的情況下條紋中心位置的提取[14]。此后,在基于梯度重心法和steger 法上提出的改進算法不多[15],且有一定的局限性。
通過以上分析,本文引入距離圖,利用Hessian矩陣粗提取條紋中心,通過梯度矢量建立方差的矩陣,結合自適應方向模板法精確提取條紋中心。該方法避免了多次高斯卷積運算,提取速度快且精度高,較好地避免其他方法的不足。
在利用分割算法,分割出目標條紋圖像的基礎上,得到條紋圖像的二值圖(手的邊緣黑色部分為陰影部分),對二值圖歐式距離變換。對于二值圖像的距離變換就是計算條紋內的像素到離該像素最近的邊界像素的歐式距離,以得到的距離值量化該點的灰度值,進而得到二值圖的距離圖。條紋的二值圖和距離圖分別如圖1、2所示。
根據Hessian 矩陣在微分幾何中的意義,對距離圖利用Hessian 矩陣確定條紋中心的初始位置。圖像中一點P 的灰度函數為I(P),其Hessian 矩陣為2×2 的實對稱矩陣,因此具有兩個實特征值,Hessian矩陣:


圖1 二值圖像

圖2 距離圖
Hessian 矩陣的特征值和特征向量反映了圖像的特性,設特征值 λ1>λ2,對應的特征向量v1、v2,則單位向量v1代表著P 點最大曲率的方向,單位向量v2代表著P 點曲率最小的方向,即條紋軸的方向。當P 點滿足以下條件,即可確定為條紋中心點:

其中S 為根據距離圖的灰度函數設定的閾值,?I(P)為P 點的梯度矢量。提取出的條紋中心初始位置的大致形狀如圖3所示。

圖3 條紋中心初始位置

其中Var(·)表示方差運算。矩陣是一個實對稱矩



圖4 精確提取條紋中心
然而,由于攝像機和投影儀的非線性特性及拍攝圖像陰影部分的影響,使二值圖像的條紋寬度不同,距離圖的條紋灰度分布不均勻或太窄,導致上述方法提取的條紋中心出現少量的像素缺失情況。自適應方向模板法是根據條紋寬度生成對應大小的模板,避免了條紋寬度不同的問題,因此可用來修復像素缺失的部分。
在二值圖的基礎上,在條紋寬度范圍內進行遍歷,除去陰影部分,根據距離圖對條紋中心線缺失的部分利用自適應方向模板法。假設其中一行條紋的寬度為w,條紋中心線基本是1 到2 個像素的缺失,因此可以從橫向、縱向、左斜45 和右斜45 生成寬度為w 的模板(k0,k1,k2,k3)。對于大小為M×N 的模板,為了使四個方向的模板具有相同的有效像素數目,例如生成如下有效像素為7×3 的模板:
結合本文算法的特點,引入CUDA 編程模型,結合了中央處理器(CPU)+圖形處理器(GPU)的優點。在算法步驟距離變換、條紋中心粗提取、亞像素確定條紋中心位置、自適應方向模板法中,每一個像素點處的灰度值計算獨立于其他像素,因此可以充分發揮GPU 多核并行處理大量密集型運算的優勢,加快了算法的執行速率,滿足了動態目標三維測量的實時性要求。
實驗中,采用的GPU 類型為NVIDIA GeForce GT 107,具有386 個處理核心,工作頻率1058MHz,具有812.5GFlOPS的浮點運算能力,內存為2G。利用Ubuntu 18.04 開發環境編程處理480 像素×315像素的圖像,算法步驟執行時間如表1 所示。本文算法與steger算法及梯度重心法的執行時間對比如表2所示。

表1 本文算法步驟執行時間

表2 各算法執行時間對比
為了使實驗結果顯示更直觀,還單獨選擇對其中的部分條紋進行處理。圖5 給出了部分光條紋中心提取的二值圖、距離圖、梯度矢量和提取結果。梯度局部放大如圖6所示。

圖5 部分光條紋中心提取過程

圖6 梯度局部
為了驗證本文方法的性能,與前人提出的利用Hessian 矩陣的steger 算法及梯度重心法提取條紋中心進行對比。如圖7 所示,采用steger 算法進行條紋中心提取,對于邊緣不平滑,即較寬或較窄的條紋位置,該算法不能準確提取。采用梯度重心法,容易產生毛刺,精度較低。本文方法提取的光條紋中心沒有毛刺現象,能準確提取。實驗中,對于條紋寬度為偶數的情況取整數列坐標為+1,奇數情況取。表3給出了條紋寬度為7像素141行和186行的各算法提取條紋中心的列坐標。

圖7 各算法提取結果

表3 各方法提取條紋中心列坐標對比
為了在三維形態測量過程中,快速準確地提取條紋中心位置實現解碼,提出了Hessian 矩陣結合方差法的光條中心提取方法。在分割出二值圖像的基礎上,利用歐式距離變換生成距離圖,并對其建立Hessian 矩陣進行特征分解,對條紋中心初始位置粗提?。辉俑鶕嚯x圖的梯度矢量,利用方差得出條紋的法線方向,并在條紋中心的初始位置對圖像的灰度函數在法線方向進行二階泰勒展開提取條紋的亞像素中心,最后利用自適應方向模板法修復像素缺失部分。與梯度重心法及steger 法相比,本文方法提取的結果更接近條紋中心的真實值,且速度快,提高了解碼速率,能夠滿足動態目標三維測量的實時性要求。