朱秀敏,黃 磊
(南京林業(yè)大學機械電子工程學院自動化系,江蘇南京 210037)
貴重零件表面缺陷的修復在工業(yè)領(lǐng)域有著廣泛的需求。隨著3D打印技術(shù)的快速發(fā)展,如果能夠獲得零件表面缺陷的準確3D尺寸,可以利用金屬3D打印技術(shù)對零件表面的缺損部位進行填補和修復,以提高零件的使用壽命。這一修補方法正在零件修復領(lǐng)域得到越來越多的應用。因此對零件表面缺陷3D尺寸的精確測量顯得尤為重要。
目前工業(yè)上常用的零件缺陷檢測方式主要包括:磁粉檢測法、滲透檢測法、渦流檢測法、超聲波檢測法、X射線檢測和機器視覺檢測法等[1]。前3種方法容易受材料種類、零件形狀限制,而X射線對人體有害,超聲波檢測不適合結(jié)構(gòu)復雜的工件,機器視覺檢測法難以提取出精確的零件缺陷3D尺寸。本文使用3D激光掃描儀采集缺陷零件的表面點云,與CATIA導出的完整零件點云作對比,通過濾波、SAC-IA粗配準、Huber損失函數(shù)優(yōu)化的ICP精確配準、最鄰近查找等操作提取出缺陷部位點云。實驗結(jié)果表明:具有不受零件形狀、缺陷形狀限制,適用范圍廣、自動化檢測、精度高等優(yōu)點。
本文使用PhoXi 3D掃描儀對受損零件進行測繪,得到其三維點云數(shù)據(jù)。掃描儀實物如圖1所示。
圖1 PhoXi 3D掃描儀示意圖
PhoXi 3D激光掃描儀采用波長639 nm的紅色可見光為光源,CMOS傳感器成像,兼具3D激光測繪和2D CMOS相機功能,無需用戶自己進行激光點云坐標系和相機坐標系的對齊,可直接輸出物體的彩色點云。它的一幀輸出點云可達320萬個點,對應的分辨率達2 064像素×1 544像素,測距距離2 m,并可按照設(shè)置的最大測距誤差門限(最小1 mm)輸出所有符合這一要求的點[2-3]。生成的點云坐標系如圖2所示,原點一般位于標記板右上角的第一個圓圈中。
圖2 標記坐標系示意圖
基于PhoXi 3D激光掃描儀的零件缺陷檢測系統(tǒng)如圖3所示,將零件置于標記板上,底部工作臺旋轉(zhuǎn)一圈,共掃描零件的8個不同的角度,形成8個點云文件。掃描儀采集到的數(shù)據(jù)包含零件點云的三維坐標、顏色等信息。
圖3 基于PhoXi 3D激光掃描儀的零件缺陷檢測系統(tǒng)
掃描儀將8個角度的點云數(shù)據(jù)生成8個點云文件,首先提取出這8個點云文件中的三維坐標,然后將這8個角度的點云合成零件點云。由于掃描儀在掃描零件時,會將標記板、工作臺等物體一并掃入儀器中,因此還需要對采集的數(shù)據(jù)進行預處理以獲得零件的點云,處理流程如圖4所示。
圖4 原始點云預處理流程圖
統(tǒng)計濾波能將原始點云中稀疏的離群點剔除,如測量時產(chǎn)生的噪聲、離零件較遠且與零件無關(guān)的雜物等。統(tǒng)計濾波算法設(shè)想,假設(shè)一個含有離散點的點云,其濾除離散點后的點云中所有點到其各自鄰域的平均距離服從高斯分布,由于離散點相對于主體點云是少量的,故可認為原始點云與濾除離散點后的點云的均值與標準差相同[4]。統(tǒng)計濾波的流程如下:
(1)對原始點云數(shù)據(jù)集P={p1,p2,…,pn}進行統(tǒng)計濾波,即對其中每一個點的鄰域進行統(tǒng)計分析,計算點pi到最近的k個點的平均距離,記作Si,則由n個點的平均距離組成的點集S服從高斯分布。
(2)根據(jù)式(1)、式(2)分別計算點集S的均值μ、標準差σ。
(1)
(2)
(3)判斷點pi與其鄰域的平均距離是否在(μ-std·σ,μ+std·σ)范圍內(nèi)。如果在,則保留;如果不在,則作為離群點剔除。
算法中的k、std分別為鄰域點的個數(shù)、標準差倍數(shù),2個參數(shù)由人為設(shè)定,前者控制鄰域大小,后者控制篩選的苛刻程度,適當?shù)膮?shù)才能得到高質(zhì)量的濾波結(jié)果[4]。
經(jīng)過統(tǒng)計濾波后的點云仍有標記板、工作臺2個不需要的平面數(shù)據(jù),再進行RANSAC平面分割,則能夠去除這2個平面。平面分割的步驟如下:
(1)從點云中隨機抽取3個點,計算這3個點組成的平面表達式。
(2)計算其他所有點到該平面的距離,如果小于閾值d則認為是同一個平面的點,添加到該平面的點集中。
(3)如果同一個平面的點的個數(shù)超過N則保留這個平面并停止迭代,否則重復步驟(1)(2)(3),直到找到迭代次數(shù)達到閾值。最終可以得到一個完整平面的點集。
運用2次RANSAC地面分割后,標記板與工作臺2個平面的點云均可被剔除。剩下的部位則為零件以及周圍噪聲的點云,最后采用半徑濾波即可去除零件周圍的噪聲。算法思路如下:判斷每一個點半徑為r的鄰域內(nèi)的點的個數(shù)是否小于閾值,若小于,則認為該點為噪聲點并去除,否則保留。
點云配準的實質(zhì)是尋找一個最優(yōu)的變換矩陣,使得源點云經(jīng)過該變換能夠和目標點云的空間位置差別最小化。本文采用采樣一致性初始配準(sample consensus initial alignment,SAC-IA)算法進行粗配準,Huber損失函數(shù)優(yōu)化的迭代最近點算法(iterative closest Point,ICP)進行精確配準,配準流程如圖5所示。
圖5 缺陷點云配準流程圖
首先對零件點云數(shù)據(jù)進行預處理,對缺陷點云和完整點云使用體素下采樣來提高算法的效率;用SAC-IA算法迭代得到初始變換矩陣,實現(xiàn)初步配準;最后利用Huber損失函數(shù)優(yōu)化的ICP算法迭代得到最優(yōu)變換矩陣,實現(xiàn)精確配準。
初值的選取對于ICP算法十分重要,如果沒有合適的初值,會導致ICP配準出現(xiàn)局部最優(yōu)的情況,很難迭代出全局最優(yōu)變換矩陣[5]。因此,在進行精確配準之前,先進行粗配準。由于零件的形狀、缺陷位置對于點云質(zhì)心、主成分影響較大,速度更快的PCA粗配準算法對于零件表面缺陷檢測不合適,因此本文采用SAC-IA算法,即采樣一致性初始配準算法[6]。該算法依賴點特征直方圖(point feature histograms,PFH),使用類似RANSAC算法的思路進行配準[7]。由于計算PFH的特征描述子速度較慢,考慮代碼效率,首先需要對原數(shù)據(jù)進行降采樣,再使用快速點云直方圖(FPFH)特征描述子。
SAC-IA粗配準過程如下:
(1)分別計算缺陷點云P和完整點云Q的FPFH特征描述子的值。每次從缺陷點云中隨機選取n(n≥3)個點作為一個子集Pi={p1,p2,…,pn},這n個點兩兩之間距離大于最小閾值[8]。
(2)在FPFH特征空間中進行最近鄰查找,檢測在Q中FPFH描述子相似的點,從相似點中隨機選出1個點作為缺陷點云在完整點云中的對應點,這些相似的點組成對應點集Qi={q1,q2,…,qn}。
(3)通過奇異值矩陣分解法(SVD)求解Pi、Qi對應點之間的變換矩陣Ti,元素構(gòu)成如式(3) 所示,通過求解對應點變換后的距離誤差和來判斷當前的配準效果[9]。如果不滿足閾值要求,則重復步驟(2)(3),直到迭代出誤差最小且滿足閾值要求的變換矩陣。距離誤差和函數(shù)常用Huber懲罰函數(shù)表示[10],Huber函數(shù)如式(4)所示:
(3)
(4)
la=‖qa-(Rpa-t)‖2
(5)
式中:Ti為點集Pi到Qi的變換矩陣;Ri、ti分別為變換矩陣中的旋轉(zhuǎn)、平移矩陣;ml為預先給定值;la為第a組對應點變換之后的距離差;pa、qa分別為點集Pi、Qi中的點。
經(jīng)過粗配準后的2組點云已經(jīng)大致重合,但仍存在偏差,為了更好地提取缺陷部位,還需要進一步精確配準。傳統(tǒng)的ICP算法以源點云與目標點云對應點之間的距離作為配準結(jié)果的評估準則,容易受錯誤的對應點以及噪聲的干擾,導致配準精度降低[11]。由于缺陷點云的缺陷部位對于完整點云來說相當于是外點,并且由掃描儀得到的數(shù)據(jù)有噪聲干擾,于是本文并不采用傳統(tǒng)點到點的ICP。而點到面的ICP相對于點到點的ICP能更好的對錯誤的對應點、噪聲魯棒,且迭代收斂速度更快[12]。故這里采用點到面的ICP,建立kd-tree加速最鄰近查找,并使用Huber損失函數(shù)優(yōu)化,以提高配準的魯棒性[13-14]。
ICP算法包含離群點去除階段與誤差最小化階段,2個階段可以概括為通過最小化目標函數(shù)式(6)來估計轉(zhuǎn)換矩陣T[15]。
(6)
式中:ρ(·)為成本函數(shù);pi、qj分別為缺陷點云P以及完整點云Q中的點;nj為qj的法向量;T為變換矩陣。
為了簡化式(6)中的雙重求和,通常采用對應點的子集來近似,這里使用每個pi的最鄰近點來近似。將成本函數(shù)ρ(·)分解為權(quán)重ω和平方誤差項來迭代求解最優(yōu)變換矩陣T[16-17]。每次迭代都會將先前的變換分配給最后估計的變換,直到收斂。式(6)簡化后為:
(7)
Lm(T)=min‖(Tpm-qm)·nm‖2
(8)
基于Huber損失函數(shù)優(yōu)化的ICP本質(zhì)是對式(7)中的ω函數(shù)的改進,式(9)即為Huber對ω的實現(xiàn)[18]。
(9)
式中k為設(shè)定的超參數(shù)。
算法大致思路如下:
(1)令粗配準后的轉(zhuǎn)換矩陣為初始矩陣。
(2)缺陷點云經(jīng)過變換矩陣旋轉(zhuǎn)平移形成新的點云。
(3)建立kd-tree,通過最鄰近查找找出新的點云子集在完整點云中的對應點子集,再根據(jù)式(7)~式(9)去除離群點并計算出新的點云與完整點云之間的最優(yōu)變換矩陣T以及2組點云之間的最小誤差Lm(T)。
(4)判斷誤差是否小于閾值,如果是則保留配準后的點云,否則重復步驟(2)、(3),直到迭代出符合要求的最優(yōu)變換矩陣。
缺陷點云與完整點云配準后,可進一步提取缺陷部位,流程如圖6所示。考慮到點集中可能仍然有噪聲,于是在最后加入統(tǒng)計濾波器,以提取出完整的缺陷部位。
圖6 缺陷部位提取流程圖
為了驗證本文算法對于零件缺陷檢測的合理性,使用Python語言和開源點云工具庫Open3D 0.13.0編寫算法進行試驗。算法運行平臺為CPU頻率2.8 GHz,內(nèi)存8 GB,運行Win10的計算機。為了驗證算法的可行性,本次實驗運用了2組零件點云數(shù)據(jù),缺陷零件的數(shù)據(jù)為真實測量數(shù)據(jù),完整零件的數(shù)據(jù)為CAD模型導出數(shù)據(jù),其中缺陷的部位分別為破洞、凹陷,此次實驗中分別命名為零件1、零件2。
首先是數(shù)據(jù)的預處理,以零件1為例,PhoXi 3D掃描儀采集原始數(shù)據(jù)為零件8個角度的點云數(shù)據(jù),這8個角度去重、融合后的點云合成如圖7(a)所示。經(jīng)過統(tǒng)計濾波、2次RANSAC地面分割和半徑濾波后提取出完整零件點云過程如圖7(b)~圖7(d)所示。
圖7 數(shù)據(jù)預處理結(jié)果
由表1可知,待檢測的原零件點云規(guī)模較大,影響配準效率。故需要對原點云進行降采樣,這里采用體素下采樣。使用降采樣后的數(shù)據(jù)進行全局配準,再使用原數(shù)據(jù)進行精確配準,以獲得契合點云,為下一步缺陷部位提取做準備。
表1 缺陷點云和完整點云規(guī)模統(tǒng)計
表2中的配準誤差采用均方根誤差(root mean sq-uare error,RMSE),從表2可知:SAC-IA速度雖然不如PCA,但誤差遠小于PCA。故本文采用SAC-IA+改進的ICP算法來配準,配準結(jié)果如圖8所示,深色的為缺陷零件點云,淺色的為完整零件點云。可以看出,經(jīng)過粗配準后,2個點云已大致重合;再經(jīng)過精確配準,2個點云完全重合。
表2 零件1的各配準算法結(jié)果比較
采用kd-tree加速的最鄰近查找提取缺陷部位點云如圖9所示,可以看出該算法能夠較好的提取零件表面缺陷部位的3D點云,并且通過該數(shù)據(jù),可以進一步對零件做出3D打印修復。
圖9 缺陷部位提取結(jié)果
本文提出了一種用于零件表面缺陷部位定位與測量的方法。使用3D掃描儀得到零件表面點云,先通過預處理,與CATIA生成的完整零件點云進行SAC-IA粗配準和Huber損失函數(shù)優(yōu)化的ICP精配準,然后進行最鄰近查找,最后成功提取缺陷部位的精確點云。點云中包含缺陷部位的形狀、具體尺寸,能夠以此進行在線的3D打印修復。實驗表明:本文的檢測算法速度快、精度高。