3D打印技术之切片引擎(7)

来源:互联网 发布:集合卡尔曼滤波算法 编辑:程序博客网 时间:2024/05/01 16:11

3D打印技术之切片引擎(7)

文章转自:http://blog.csdn.net/fourierFeng/article/details/49045401

这一篇文章我说一下填充算法的同心填充(Concentric),同心填充Slice3r中有实现。但说实话,我还在那家公司的时候,公司并没有用它打印过模型,也不知道具体效果如何,但我在我的程序中实现它,是为了对其他的填充算法做一个补充,后来也发现它确实有价值。它的优势主要体现在它是完全依据模型的拓扑结构自然生成的,它不会对边界产生冲击,使得影响到最终的成型质量;沿着边界矢量环,环环向内推进,直到离散的填满整个层区。如下图(这是我在最初版本中做出的效果,虽然不是很理想,但是能反映出正确的趋势):

这里实现的话大致有两个思路: 

  • 方案A: 利用前面讲的生成内边的技术类似的进行向内的填充; 
  • 方案B: 先利用某一个映射把图形矢量离散化,然后利用图像处理技术进行填充,最后在把离散的图像逆映射回原来的矢量集合。 

上面的图片显示的是方案B的效果。从理论上讲最佳方案应该是A方案,这是因为A非常规则,并且是零误差的。但是A的实现有难度。

方案A首先基于我在前面讲到的添加内边的技术,然后从外向内“层层推进”,这里要注意“裂变”,也就是在层层推进的过程中,环断开的情况,这时候需要依赖阈值自动裂开及闭合的算法,这里就不详述此算法。就如上图所展示的那样,最外层是一个环,里面就会出现多个环的情况。最终会收敛为很小的环(理论上是一个点),还要注意阈值,当环所围成的区域面积小于阈值时,需要把该环忽略。 

方案B的特点是实现较为简单,易于维护。缺点是由于该算法是基于图像处理算法,要求对原图形进行离散化再插值拟合回去的两过程,会带来较大的误差。对一些含有较多直径很小的分支的切面矢量集合,会产生不可容忍的错误。原因是: 

discretizefit

是一个“逼近”的算法过程。

方案A也要实现这个“层层推进”,每一层都执行操作:

erosion(mathematicalmorphology)fit

直到收敛到内部面积小于阈值的矢量环,则停止迭代,算法结束。这里要用到图像处理中的数学形态学——腐蚀。每次做腐蚀操作的时候,也可以对膨胀腐蚀任意组合(先腐蚀后膨胀,类似于开运算),根据项目的具体需求可以选择相关的实现方式。描述数学形态学的资料很多,实现代码也很多,这里就不对这一块进行详述。 

最后要做的前面几讲中反复强调的,就是把每层的边界矢量首尾相接,以最小“间断律”的输出所有的边界矢量。当然,这在同心填充中处理起来很简单,只需要把“每一圈”的矢量简单的组织成首尾相接矢量环就可以了。然后以“圈”为单位从外向内打印就可以了。

0 0
原创粉丝点击