基于图像技术的3D打印支撑区域算法开发
2019-03-08邢银龙
邢银龙
摘 要:针对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.