基于体素模型的彩色3D打印上色算法研究

2021-06-16 06:31郭强强张李超王森林兰秀峰刘永辉
电子技术与软件工程 2021年8期
关键词:体素交点切片

郭强强 张李超* 王森林 兰秀峰 刘永辉

(1.华中科技大学 湖北省武汉市 430074 2.武汉易制科技有限公司 湖北省武汉市 430074)

(3.中国海洋大学工程学院 山东省青岛市 266100)

彩色3D 打印可以根据产品模型的颜色信息打印出全彩模型,呈现真实美观的实物效果[1]。常见的STL 格式文件并不存储颜色信息,因此不能用于彩色3D 打印。目前使用较多的彩色模型文件格式有较早研发和流行的AMF 文件[2]、微软推出的3MF 文件、常见的三维文件格式OBJ 文件[3]等,本文选用AMF 文件进行彩色切片处理。由于3D打印是基于分层制造的原理进行加工,存在台阶效应,若只对模型表面进行颜色填充,层与层之间会裸露材料原始颜色,造成失真,所以彩色切片时需要一定的深度。胡汉伟等[4]研究了表面彩色AMF 模型快速切片算法,基于彩色三棱柱思想将模型颜色渗透到模型内部以消除台阶效应。本文在其算法的基础上,建立具有一定精度彩色体素模型,可对模型任意位置实现颜色调控,并结合打印材料的半透明属性等信息,应用色彩处理策略,尽可能还原模型的真实颜色,使其具有较好的视觉效果。

1 前期准备工作

AMF 模型可以描述描述物体的几何、颜色、材料、微结构等信息[5],AMF 文件是一种基于XML 文件格式的可扩展标记语言文件格式,通过XML 解析器对AMF 文件解析后可以获得模型的三角网格的几何信息以及表面颜色信息,之后根据彩色切片算法[6-8]生成每一高度上的二维彩色位图数据,本文在获得二维彩色位图数据的基础上,进行后续的彩色体素模型构建和色彩处理算法研究。

2 彩色体素模型构建

体素模型,是指用一个个的小立方体体素拟合和描述三维模型几何信息和其他信息[9-11],与三角网格描述模型表面信息方式不同,体素模型同时可以表达模型的表面和内部信息,体素精度可以根据需要进行设置,精度越高,体素越小,描述模型越精确;每个体素存储的信息是可以扩展的,比如三维坐标信息,颜色信息,材质信息,实体内外信息等,可以根据需要继续添加。由于体素存储的信息量大,故体素模型占用的存储空间也很大。

体素模型可以实现模型任意位置的体素操作[12],例如该处的颜色信息,材料信息等的编辑和操作,每个体素单元可以存储坐标、颜色、材质等多种信息。可以根据需求生成不同精度的体素模型。

为清楚表达AMF 模型的信息,本文建立如下体素数据结构:

(1)三维空间坐标:float x,y,z;

(2)当前体素的RGBA 颜色值:unsigned char color[4];

(3)实体内外标志:bool isInside;

图1:扫描线算法示例

图2:色彩处理渐变填充算法示意

AMF 模型的体素化算法是建立在彩色切片算法之上的,具体思路如下:读取AMF 文件并解析,建立AMF 模型AABB 包围盒,并将此包围盒空间作为体素模型空间,设置体素精度。

(1)∆z:z 方向体素精度,即z 切平面之间的间距。

(2)∆y:y 方向体素精度,即二维彩色位图的y 向像素尺寸。

(3)∆x:x 方向体素精度,即二维彩色位图的x 向像素尺寸。

体素精度确定好后,体素空间即被划分。设体素空间的原点为模型AABB 包围盒左下角坐标,设为(xmin,ymin,zmin);包围盒右上角坐标为(xmax,ymax,zmax),则x 方向体素个数Xn=(xmax-xmin)/∆x,同理可得y 和z 方向体素个数。设体素空间中某一点的实际坐标为(x,y,z),其体素坐标为(i,j,k);体素坐标与实际坐标转化公式如下:

图3:AMF 立方体模型

图4:AMF 香蕉模型

该点的体素索引vindex为:

体素模型的体素坐标用形如(i,j,k)的形式存储,其中0 ≤i ≤Xn,0 ≤j ≤Yn,0 ≤k ≤Zn;i,j,k 均要求大于等于0 是为了保证体素索引vindex非负,体素信息保存在数组数据结构中。由上述公式可得到每个体素对应存储的实际坐标。循环遍历i,j,k 可遍历和覆盖整个模型空间。

体素的实体属性信息获取依赖扫描线算法[13-15]。利用扫描线算法进行实体属性内外判定方法如下:

假定用Y 扫描线与轮廓切片算法生成的轮廓环求得一系列交点,如图1 所示。轮廓环由P1 至P6 逆时针连接组成,有如下4 条扫描线l1到l4,求得交点A 到G。

(1)交点不与线段端点重合,如l2,按照交点x 坐标由小到大排序,并编号。A,B,C,D 编号为0,1,2,3。

(2)交点与线段端点重合,两条线段的另一个端点位于扫描线同侧。如l_1 的P6 交点和l_4 的P2 交点。此情况对交点编号时该点视为2 个重合点。l_1 的交点P6,F,G 编号为0,1,2,3。

(3)交点与线段端点重合,两条线段的另一个端点位于扫描线异侧。如l_3 的P1 交点。此情况对交点编号时该点视为普通点,正常编号。l_3 的交点P1,E 编号为0,1。

按照如上方式确定交点编号后,体素模型的实体属性

体素模型的色彩信息获取需要调用彩色位图填充算法,位图是体素的二维表示,对应于某一z 切平面的像素数据,其像素点坐标(i,j)就是体素坐标的相应分量。在每层切平面上调用彩色位图填充算法,可获取当前切平面上所有像素点的颜色信息,将其赋值给对应的体素,遍历整个模型,即可得到体素模型的颜色信息分布和存储[16]。

3 色彩处理算法

AMF 彩色模型建立后,在三维空间中实现对任意位置的体素的颜色进行编辑操作,在二维位图上实现像素级的颜色调整;彩色位图填充算法是在规定的表面色彩深度值下的表面颜色深度区域内的点,其颜色选取为距离该点最近处的三角面片点的颜色。该算法的实现效果为将模型表面颜色沿着三角面片的法线方向向内渗透规定值的厚度,得到的是颜色均一的深度层。此种色彩填充算法对于AMF 模型,由于没有考虑打印材料的材质特性和半透明属性,在视觉效果上并不很好。下面提出随表面距离逐渐变化的渐变颜色填充算法。

AMF 色彩处理渐变颜色填充算法原理及流程如下:在建立体素模型后,遍历体素模型逐个体素进行上色,设当前体素坐标为(i,j,k),通过体素坐标与实际坐标转换公式(式2),计算得到当前体素的实际坐标(x,y,z);由彩色位图填充算法获取当前体素距离最近的表面三角面片的垂足的颜色值(r,g,b,a),并记录当前体素距最近三角面片的垂线的长度l;设定渐变色为(r0,g0,b0,a0);根据设定的表面颜色深度值SurfDepth,设定当前体素的颜色值(r',g',b',a'),

遍历完模型所有体素并上色,完成彩色体素模型的建立。

AMF 模型色彩处理渐变颜色填充算法示意如图2 所示:假定表面三角面片的颜色为蓝色,设定渐变色为绿色,渐变色调由蓝色变为绿色;对于当前体素点P,距离其最近的三角面片为当前所示三角形,其垂足点颜色值为蓝色,垂线长度为l,设定的表面颜色深度为SurfDepth,由式4 即可求出该体素点的颜色值;在该体素所在的切片平面,填充得到的彩色位图如下图所示。对于色彩处理渐变颜色填充算法,在同一切平面上,彩色位图上不同像素点的颜色值由于其距表面的垂线长度l 不同,即使它们对应的垂足点颜色值相同,它们所要填充的颜色值也不相同,呈现渐变效果。

4 算法验证

使用体素模型构建及色彩处理填充算法,可以建立AMF 模型的彩色体素模型,并生成指定位置切平面的二维彩色位图,体素模型建立后,可以修改任意位置处的体素颜色和材质等信息。考虑打印材料的材质和半透明属性,以及想要实现的视觉效果,利用色彩处理填充算法可以对AMF 模型有一个可控、炫丽的上色效果。

下面分别以AMF 立方体和香蕉模型为例说明彩色体素模型的建立和色彩处理渐变填充算法。

如图3(a)所示的立方体模型,模型坐标原点位于立方体中心,每个面的颜色都是纯色,图3(b)是z=0 处,表面颜色厚度SurfDepth=0.2时的彩色切片位图结果,在表面颜色填充区域范围内,模型颜色一致,不随深度变化,超过厚度的区域,填充为材料本身颜色,这里为白色。

图3(c)为立方体体素模型,模型的颜色填充策略使用渐变颜色填充方式,并设置不同的透明度,渐变颜色设置为由白色到模型表面颜色渐变,最靠近表面的颜色填充为白色,透明度最高,随表面深度增加颜色渐变为表面颜色值,透明度降低。图3(d)为渐变色填充切片位图结果,与图3(b)相比,实现了渐变填充效果。

图4(a)AMF 香蕉体素模型,颜色填充策略为表面颜色向内部等厚渗透,所有体素均不透明,图4(a)较真实的渲染了香蕉模型颜色。图4(b)为z=10,表面颜色厚度SurfDepth=4 时的等厚渗透彩色切片位图结果,该模型的z 轴方向沿纸面方向朝外;图4(c)为渐变色填充的香蕉体素模型,渐变色为白色向表面颜色值渐变,最靠近表面的颜色为白色,透明度最高,越靠近模型内部,颜色越偏表面颜色,越不透明,超过表面颜色填充区域,填充颜色为材料颜色,这里为白色。图4(d)为渐变色填充切片位图,可以看出颜色由表面向内部渐变为表面实际颜色值。通过图4(a)和(c),(b)和(d)的对比,可以看出彩色体素模型对颜色的修改效果和渐变填充上色效果。

5 结语

本文建立体素空间并获取体素的实际坐标和实体属性信息后,提出色彩处理填充算法对模型进行上色处理,本文使用渐变颜色填充算法,修改体素模型的颜色属性,根据设定的表面颜色厚度SurfDepth,沿着表面法线方向向内部填充渐变颜色,模型最靠近表面颜色为白色,透明度最高,越靠近内部,颜色越深,透明度降低,超过表面颜色填充区域,模型颜色填充为材料实际颜色。

本文通过构建AMF 彩色体素模型,并根据色彩处理填充策略可以对待打印的彩色制件有很好的上色效果,并可以根据打印材料的材质信息和半透明属性提出特定的上色需求,这对于可以任意修改任意位置颜色属性的AMF 彩色体素模型而言都十分容易。

猜你喜欢
体素交点切片
基于多级细分的彩色模型表面体素化算法
运用边界状态约束的表面体素加密细分算法
阅读理解
基于体素格尺度不变特征变换的快速点云配准方法
基于SDN与NFV的网络切片架构
肾穿刺组织冷冻切片技术的改进方法
冰冻切片、快速石蜡切片在中枢神经系统肿瘤诊断中的应用价值比较
指数函数与幂函数图象的交点的探究性学习
墨汁染色在组织切片中的应用