邢銀龍
摘? ?要:針對3D打印過程中對于懸臂結構需要手動設計支撐結構問題,提出了一種基于數字圖像處理技術自動識別需要支撐的區域并生成支撐的方法。首先給出了支撐區域識別算法,介紹了算法流程及算法的實現過程;其次在獲得支撐區域的基礎上,給出了支撐自動生成算法,介紹了算法的流程及算法實現過程;最后給出了算法的結論。
關鍵詞:數字圖像? 圖像形態學? 支撐區域? 3D打印
中圖分類號:TP391? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?文獻標識碼:A? ? ? ? ? ? ? ? ? ? ? ? 文章編號:1674-098X(2019)10(c)-0064-02
3D打印是20世紀80年代開始興起的技術,歷經幾十年的發展已經取得了很大的進展,尤其是最近10年,隨著材料技術、控制技術及計算機技術的發展取得了飛躍式的發展,3D打印已經在眾多領域得到了廣泛應用。3D打印技術是采用分層制造技術[1-3],從底部向上生長,每當遇到懸臂結構時,需要在懸臂下方設計支撐結構,以保證在打印懸臂時不會出現塌陷現象,當遇到腔體內部需要支撐時,人為手動設計支撐就變得十分復雜,甚至無法實現支撐。因此根據模型的結構特點自動生成支撐就變得十分有意義。生成支撐的首要任務是識別支撐區域,是支撐設計的核心。本文采用數字圖像處理技術[4]中的圖像形態學處理以及圖像布爾運算等技術自動識別需要支撐的區域,并對需要生成支撐的區域進行支撐路徑規劃[5],實現自動生成支撐。
1? 支撐區域識別
支撐區是模型處于懸空部分在其正下方的投影區,當上層結構在下層結構投影時,若兩層的投影差集不為空集時,說明至少存在一個支撐區。若為空集,說明此層沒有支撐區。
1.1 支撐區識別算法流程
假設模型共有N+1層,第一層有N1個支撐區,A11,A12,…A1n第N層有Nn個支撐區An1,An2,…Ann。其中N1…Nn可能為零,由于支撐區域識別算法在不同層之間的計算方式相同,因此本文以第N層計算為例,說明計算過程。假設第N層有m個支撐區,m>0。算法具體流程如下:
步驟1:讀取第N層與第N+1層的模型輪廓數據分別存入ListNCount與ListN1Count表。
步驟2:將ListNCount與ListN1Count二值化成二值圖像ImageListN與ImageListN1。
步驟3:對圖像ImageListN與ImageListN1進行圖像布爾運算得到m個二值圖像ImageList1、ImageList2、ImageList3……ImageListm。
步驟4:對m個二值圖像分別進行膨脹運算得到m個膨脹后的圖像(ImageIn1為其中一個,后面說明以此圖像為例,其余圖像操作相同)。
步驟5:對m個膨脹后的二值圖像分別進行腐蝕運算得到m個腐蝕后的圖像(ImageCo1為其中一個,后面說明以此圖像為例,其余圖像操作相同)。
步驟6:用圖像ImageIn1與圖像ImageCo1進行邊緣提取算法得到邊緣圖像ImageEdge1。對m組膨脹和腐蝕后的圖像進行運算得到m個邊緣圖像ImageEdge1、ImageEdge2、ImageEdge3…… ImageEdgem。
步驟7:對邊緣圖像進行鏈碼與譯碼操作得到m組輪廓坐標Coordinate1、Coordinate2、Coordinate3……Coordinatem。
以上m組輪廓坐標就是所計算的m個支撐區域,每個區域都是一個閉合的輪廓。
1.2 支撐區識別算法實現
針對上節所述的支撐區域識別算法流程,本節詳細介紹支撐區域識別算法的實現過程。
(1)獲取第N層與第N+1層的輪廓坐標ListNCount與ListN1Count。
(2) 計算ListNCount與ListN1Count Y向最大值與最小值YMax_N,YMin_N,YMax_N1,YMin_N1。
(3)用掃描線y以一個像素遞增的方式從開始到YMax_N進行線束掃描,計算掃描線與輪廓的交點坐標,每條掃描線存在偶數個交點坐標,將第2n個坐標與第2n+1個坐標之間的線段以一個像素單位分割,于是得到以像素為單位的坐標,將掃描線上的坐標值賦值為1,掃描線外的坐標值賦值為0,因此得到一幅二值圖像。同理可得到另一幅二值圖像。
(4)計算圖像ImageListN與圖像ImageListN1的并集。
(5)計算差集。
(6)對圖像進行膨脹運算。B為結構元素。
(7)對圖像進行腐蝕運算。C為結構元素。
(8)提取單像素邊緣。
(9)對單邊像素圖像進行鏈碼運算,將單邊像素圖像轉換成輪廓坐標。鏈碼采用8方向鏈碼,8方向鏈碼可以使邊界更精確。鏈碼方向選取為逆時針方向:0-1-2-3-4-5-6-7-0。遍歷單邊像素圖像,得到第一個值為1的像素坐標點,以此點為邊界的起點,標記此點已被搜尋完畢。根據鏈碼方向遍歷下一點,直到找到下一個值為1的像素點,記為第二個邊界點,標記此點已被搜尋完畢。直到8方向像素值全為0,此條邊界搜尋完畢。同理,尋找下一條邊界的起點,直到此圖像中所有為1的點全部被標記過,此圖像搜尋完畢,所得幾組邊界,此圖像就有幾個需要支撐的區域。
(10)針對每層數據均采用(1)到(9)的操作過程,得到每一層的支撐區域。存入每層的輪廓坐標數組Coordinate1、Coordinate2、Coordinate3……Coordinatem。
2? 支撐自動生成算法
自動生成支撐結構是根據支撐區域在其內部生成一定形式的填充路徑,層層堆疊,直到與懸臂接觸,以達到支撐懸臂結構的效果,保證懸臂結構不會因為懸空而出現塌陷。
2.1 支撐生成算法流程
支撐區路徑采用連續蛇形填充算法,最大限度減小激光器的開關。
步驟1:獲取一層的支撐區的輪廓坐標。
步驟2:計算相鄰路徑的填充間距,保證不塌陷的同時減少路徑長度,以便后期容易去除支撐。
步驟3:根據支撐區輪廓坐標及工藝參數信息規劃掃描線策略。
步驟4:分別計算掃描線束與輪廓交點,得到掃描線與所有輪廓的交點信息。
步驟5:對交點信息進行分類重組,形成一條或多條分段連續的蛇形路徑。
步驟6:將路徑信息轉換成控制變量以備后續使用。
步驟7:重復步驟1到步驟6計算過程,計算所有層的路徑信息,直到最后一層計算完畢。
2.2 支撐生成算法實現
(1)計算一層的輪廓坐標值Coordinate1、Coordinate2、Coordinate3……Coordinatem。
(2)設兩條掃描線的填充間距為。
(3)計算本層所有輪廓的Y向最大值與最小值FY_Max\FY_Min。
(4)計算掃描線:yScan=FY_Min+Fd*i,i=0,1,2…,n滿足。
(5)計算交點坐標:設掃描線方程:y=yScan。C1(x1,y1),C2(x2,y2)是輪廓上相鄰兩點的坐標。過此兩點的直線直線方程L為:y=kx+b。根據C1、C2可求出此方程。由掃描線方程與方程L聯立方程組可計算出交點坐標(x1',y1')。當滿足(x1'-x1)*(x1'-x2)≤0且(y1'-y1)*(y1'-y2)≤0時,此點滿足條件,是所求的一個交點坐標。
(6)計算此掃描線與所有輪廓的交點,將滿足條件的交點按x值從小到大排列,存儲在掃描線列表中。
(7)在(4)中隨著i值的遞增變化,重復(5)到(6)過程得到當前層的掃描線列表序列。
(8)從第一條掃描線列表開始成對提取相鄰兩個坐標值,提取過的坐標值被標記已處理,從第二條掃描線提取坐標對時,判斷是否與第一對坐標有垂直方向的投影,若有投影,將此對坐標與第一對坐標存儲到同一個區域數組中,若沒有投影,依次比較此條掃描線后面的坐標對,直到找到有投影的坐標對或者全部遍歷完成,若沒有合適的投影坐標,則此區域結束。按此規律遍歷所有掃描線列表,直到所有坐標都被標記過。生成的區域數組的數量就是支撐區域數量,區域數組的坐標值即為此支撐區域的填充路徑。
(9)重復(1)到(8)過程,直到所有層處理完成,即生成全部支撐。
(10)根據通信協議,將全部支撐路徑點轉換成控制變量,發送給控制器。
3? 結語
支撐自動生成算法省去了人為設計支撐的過程。只需給定一個預進行3D打印的模型,就可以自動生成所有層所必須的支撐結構。本文給出了一種基于圖像技術的支撐區域識別算法,能夠有效的識別出需要支撐的區域,同時給出了一種支撐路徑規劃方式,滿足支撐設計工藝。針對支撐區域識別與支撐路徑自動生成給出了詳細的求解過程。
參考文獻
[1] 孫大涌.先進制造技術[M].北京:機械工業出版社,2000.
[2] 劉光富.快速成型與快速制模技術[M].上海:同濟大學出版社,2004.
[3] 劉偉軍.快速成型技術及應用[M].北京:機械工業出版社,2005.
[4] 岡薩雷斯.數字圖像處理[M].阮秋琦,等,譯.北京:電子工業出版社,2005.
[5] 王欽釗,程金勇,李小龍.復雜環境下機器人路徑規劃方法研究[J].計算機仿真,2017,34(10):296-300.