一种3D人像食品打印方法与流程

文档序号:12321964阅读:316来源:国知局
一种3D人像食品打印方法与流程

本发明涉及计算机图形与图像处理领域,特别是涉及一种3D人像食品打印方法。



背景技术:

将消费者的照片通过3D食品打印成为可口而充满艺术性的食品,是一个充满个性和趣味的创意。而由于用于食品打印的材料为相应食材,和普通3D打印机采用的abs、sla等材料在制作技术、加热温度、凝固条件上均有较大不同,因此需要结合需求进行针对性的改进。

使用糖、巧克力或者奶油等材料进行打印,其线条宽度较大,反复堆叠进行多层打印容易走形,效果较差。我们目标实现的效果为糖画,整体构型精巧充满艺术性并且可以粘在竹签上完整的取下来。因此为了良好的成型效果需要单层打印并避免路径的反复交叉引起外观的变化。此外,为了打印后能够完成的取下不断裂,形状中需要彼此相连不断裂。若需要打印个人照片,需要对以下两方面进行处理:

1、需要简化图片的内容,因为食品打印难以实现丰富的细节,一般采用简单的线来表示形状。因此需要将图片内容进行处理,保持其主体内容的同时将图片内容简化为简单的线表示。

2、做到线条相互连通一笔完成的前提下,需要对于打印路径进行规划。3D食品打印使用的打印材料为相应食材,比如糖浆巧克力等。由于食材在加热温度,凝固条件,难以凝固成型效果上都与较常用的abs或者sla有较大差距,其路径规划也不相同。需要在路径之间流出更多间隙。单层打印效果较好,若路径存在交叉则在交叉处的厚度会显出增加,影响美观。故需要尽量避免路径交叉。



技术实现要素:

针对现有技术存在的不足,本发明提供了一种3D人像食品打印方法,采用ETF,FDOG算法抽取人脸的轮廓,利用八连通深度遍历搜索与face++相结合的方法,获得平滑的人脸图像的方向场。

本发明的技术方案如下:

一种3D人像食品打印方法,包括以下八个步骤:

(1)用户将输入的人脸源图像由RGB图像转换为灰度图;

将输入的人脸源图像由RGB图像转换为灰度图的具体方法为:

Gray=R*0.299+G*0.587+B*0.114

Gray表示灰度值,R、G、B是一个颜色空间red green black这个向量表示一个颜色值。

(2)利用face++API,对人脸特征区域的83个人脸特征点进行标识,获得83个涵盖脸部轮廓,包括眉毛、眼睛、鼻子、嘴巴轮廓的特征点;

利用face++API对人脸上的特征区域的83个人脸特征点进行标识,其具体方法如下:

一张人脸图片输入后,先找到人脸的位置(人脸检测),然后在这个基础上定位人脸关键点的位置(如眼睛中心或嘴角等)。这些点的位置用来做人脸的几何校正,即把人脸通过缩放、旋转、拉伸等图像变化变到一个比较标准的大小位置,这样待识别的人脸区域会更加规整,便于后续进行匹配。同时,加入人脸光学校正模块,通过一些滤波的方法,去除对光照更加敏感的面部特征。在做完这些预处理之后,再从人脸区域提取各种特征,包括局部二值模式、方向梯度直方图、Gabor滤波(LBP、HOG、Gabor)等。最终相关的特征会连接成一个长的特征向量(Feature Vector)。

根据人脸上关键特征的分布,将人脸划分成以下五个特征区域:脸部轮廓特征区域、眉毛特征区域、眼睛特征区域、鼻子特征区域、嘴唇特征区域和脸颊特征区域。最后对人脸的五个特征区域的各特征点进行标识。

初始特征点的序号从零开始,脸部轮廓特征点的生成顺序为:第一个点为下巴,接着是九个由上到下的左侧脸部轮廓关键点和九个由上到下的右侧脸部轮廓关键点。眉毛特征区域由左右各八个特征点组成,眼睛特征区域由中心一个特征点和周围十个个特征点组成,鼻子特征区域由八个特点组成,其余的特征点描述嘴巴特征区域。

(3)将灰度图进行预处理,加强face++人脸关键点插值后得到的脸部轮廓的灰度值;

通过加强人脸关键点处的灰度值的方式,提高其梯度值,便于后续提取轮廓。

(4)利用边缘切向流(ETF(Edge Tangent Flow))算法,构造人脸图像的平滑方向场;

采用ETF(Edge Tangent Flow)算法构造人脸图像的平滑方向场的具体方法如下:

梯度方向是图像变化最剧烈的方向,与其垂直的方向可看做局部边缘的切向,即“流向”。算法首先使用Sobel算子得到参考图像的梯度场,然后在每一像素x处计算与其梯度向量垂直的向量,对于处于角落中的点,会对其进行加权平均,得到该点的梯度向量,进而得到整张图片的初始流场。随后,迭代地对流场做2~3次非线性平滑,使得重要的边缘方向被保留,而次要的方向与相关的重要方向对齐,这样就能得到更平滑的方向场。

ETF(具体实现方法参见H.Kang,S.Lee,and C.K.Chui,"Coherent line drawing,"Proc.Non-Photorealistic Animation and Rendering(NPAR'07),pp.43-50,Aug.2007.)的滤波核函数如下:

其中:

wd(x,y)=|tcur(x)·tcur(y)|

tnew表示新的经过光顺的切向量(梯度的垂直方向);

tcur表示当前的切向量,初值是由Sobel算子计算的切向量逆时针旋转90度获得的;

同上,代表y像素点的这个值;

ws(x,y)表示空间距离权值,用于确定函数作用范围,当y像素点位于x像素点半径r范围内的时候,ws(x,y)为1;

wm(x,y)表示控制梯度值之差的影响,y与x的梯度值相差越大,这一权值也越高;

wd(x,y)表示控制方向的影响,梯度向量越趋近于平行这一权值越大,越趋近于垂直则越小;

r代表函数作用的有效半径;

η是一个定值,通常为1;

表示y点的经过归一化的梯度值;

表示x点经过归一化的梯度值;

x表示当前点,y表示x邻域中某个点;k表示向量归一化系数;Ω(x)表示x为中心的3*3邻域;φ(x,y)∈{1,-1}方向函数,两个向量夹角小于90度为1否则为-1。

(5)利用沿着方向流场的高斯差分(FDOG(Flow based Difference of Gaussians))算法,进行基于方向场流向的各向异性高斯滤波,最后根据预设的阈值进行二值化,从而得到人脸图像的轮廓;

FDOG(具体实现方法参见H.Kang,S.Lee,and C.K.Chui,"Coherent line drawing,"Proc.Non-Photorealistic Animation and Rendering(NPAR'07),pp.43-50,Aug.2007.)进行基于方向场流向的各向异性高斯滤波,最后根据预设的阈值进行二值化,从而得到人脸图像轮廓的方法如下:

从参考图像生成线条的过程与边缘检测有很大的相似之处,因此许多边缘检测的方法可以应用到方法中来,这一算法就采用了Winnemoller et al.的DoG方法(具体参见Winnemoller.H,Olsen.S,and Gooch.B,2006."Real time video abstraction,"Proc.ACM SIGGRAPH 06,1221-1226.)来得到边缘的轮廓线条。对于DoG的原理,如果对图像作二阶微分,即施加Laplacian算子,那么边缘就出在穿0点处,而Laplacian对于噪声十分敏感,在施加Laplacian操作前,先要进行高斯滤波,即Laplacian of Gaussian(LoG),而这里所使用的DoG则是对LoG的简化和近似。

对于每一个像素点,沿着图像变化最剧烈的方向,即梯度方向,施加一维的DoG:

其中:

T表示卷积核横向的长度,方向为梯度方向;

I表示当前点的灰度值;

I(ls(t))表示在横向直线上,系数为t的时候的位置上的灰度值;

f(t)是高斯差分函数;

和是高斯函数;

ρ是一个定值,通常默认为0.99。

曲线S代表的是方向场的流向,为了得到更连续的线条,需要再沿着S进行一次高斯卷积:

S表示卷积核的纵向长度,这个是沿着流场的切线方向;

和都是高斯函数,σm、σc和σs是标准差,决定了高斯函数分布的幅度;一般设置σm=3.0,σc=1.0,σs=1.6σc

高斯函数是低通滤波函数,通过滤波可以得到两个函数之间的部分,这也是高斯差分的基本原理。

最后,再根据设定的阈值τ对图像进行二值化,就得到了最后的结果:

表示二值化的结果,对于上一步求得的H(x),根据τ进行二值化。

曲线S代表的是方向场的流向,为了得到更连续的线条,沿着方向流场向正反两个方向遍历,并对经过的所有点的DoG作高斯卷积,作为像素点x的像素值,σm控制滤波模型流线的长度S,进而控制线条的连续性。

(6)对步骤5得到的face++标记的人脸关键点的八连通深度遍历搜索,删除像素点低于300的连通线段,从而简化图像;

根据face++API提取的特征点,简化图像具体方法如下:

通过ETF,FDoG算法得到二值图,预先标记含有Face++人脸关键点的连通线条,然后对其二值图中每一个像素点避开标记的人脸关键点线条采取八连通深度搜索遍历,统计每一个连通线条的像素点的个数,并设置阈值(算法中取300),删除像素点数低于300并且不通过特征点的连通线条,从而简化图片。

(7)将步骤6得到的各个离散的连通线条抽象为一个点,进而将一笔画问题转换为图论问题,利用普里姆(prim)算法将距离最近的连通区域两两相连,将所有线条连成一体;

线段连通为一笔画过程方法如下:

预先采取八连通深度搜索遍历对连通域进行标记,将各个离散的连通线条抽象为一个点,进而将问题抽象为一个图论问题,依次枚举两两连通域间的最短距离,并记录达到最短距离时对应的两点坐标。此时连通域间的边已求出,最小生成树prim算法进行距离最近的两个连通域互连,达到互连边的权值之和最小。经多次测试,此做法连通后对原图片的破坏程度较小,做到了连通与美观的平衡。

(8)采用侵蚀算法,对步骤7得到的一笔画路径进行简化,通过依次遍历所有像素点,得到最终的3D打印路径。

与现有技术相比,本发明的有益效果为:

本发明提出一种全新的保留人脸轮廓的的3D人像食品打印方法,采用ETF,FDOG算法抽取人脸的轮廓,利用八连通深度遍历搜索与face++相结合的方法,在保留人脸主要特征信息的前提下消减了多余的细节,使结果更加清晰明了。本发明方法明确,界面友好,结果鲁棒,且该方法可以用于手机应用,3D打印等领域。

附图说明

图1为本发明3D人像食品打印方法的技术方案流程图;

图2为本发明的方法进行高斯差分的滤波核,横向T是以S上的点为中心的梯度方向,纵向是切线方向(边缘的方向);

图3为系数不同的高斯函数;

图4为本发明3D人像食品打印方法各步骤实现效果图,其中(a)为源图像的灰度图,(b)为人脸特征点识别展示图,(c)为高斯差分得到的结果图,(d)为图像简化得到的结果图,(e)为普里姆算法连成一笔画的结果图,(f)为细化算法得到的最终结果图,(g)为最终结果图。

具体实施方式

下面结合附图和具体实施方式对本发明一种3D人像食品打印算法作进一步详细说明。

如图1~4所示,一种3D人像食品打印算法,包括以下步骤:

1)将外设采集的源图像转换为灰度图

通过手机或者其他外部设备采集人脸图像,随后将在RGB色彩空间下表示的源图像转换为灰度图像。

Gray=R*0.299+G*0.587+B*0.114

Gray表示灰度值,R、G、B是一个颜色空间red green black这个向量表示一个颜色值。

2)采用face++提供的API,对人脸特征区域的83个人脸特征点进行标识,获得83个涵盖脸部轮廓,包括眉毛、眼睛、鼻子、嘴巴轮廓的特征点;

根据人脸上关键特征的分布,将人脸划分成以下5个特征区域:眉毛、眼睛、鼻子、嘴唇、脸颊。这些特征区域的特征点以特征点对的形式出现。其中,初始特征点的序号从零开始,脸部轮廓特征点的生成顺序为:第一个点为下巴,接着是九个由上到下的左侧脸部轮廓关键点和九个由上到下的右侧脸部轮廓关键点。眉毛特征区域由左右各八个特征点组成,眼睛特征区域由中心一个特征点和周围十个特征点组成,鼻子特征区域由八个特点组成,其余的特征点描述了嘴巴特征区域。

3)对人脸图像的灰度图进行预处理,加强face++人脸关键点插值后得到的脸部轮廓的灰度值,提高其梯度值,便于后续提取轮廓。

4)采用ETF方法,求得经过预处理灰度图的方向场,经过多次迭代处理,得到平滑的方向场

梯度方向是图像变化最剧烈的方向,与其垂直的方向可看做局部边缘的切向,即“流向”。算法首先使用Sobel算子得到参考图像的梯度场,然后在每一像素x处计算与其梯度向量g0(x)垂直的向量t0(x),得到了初始流场。再迭代地对流场做2-3次非线性平滑,使得重要的边缘方向被保留,而次要的方向与相关的重要方向对齐,这样就能得到更平滑的方向场。ETF(具体实现方法参见H.Kang,S.Lee,and C.K.Chui,"Coherent line drawing,"Proc.Non-Photorealistic Animation and Rendering(NPAR'07),pp.43-50,Aug.2007.)的滤波核函数如下:

wd(x,y)=|tcur(x)·tcur(y)| (4)

tnew表示新的经过光顺的切向量(梯度的垂直方向);

tcur表示当前的切向量,初值是由Sobel算子计算的切向量逆时针旋转90度获得的;

同上,代表y像素点的这个值;

ws(x,y)表示空间距离权值,用于确定函数作用范围,当y像素点位于x像素点半径r范围内的时候,为1;

wm(x,y)表示控制梯度值之差的影响,y与x的梯度值相差越大,这一权值也越高;

wd(x,y)表示控制方向的影响,梯度向量越趋近于平行这一权值越大,越趋近于垂直则越小;

r代表函数作用的有效半径;

η的值为1;

表示y点的经过归一化的梯度值;

表示x点经过归一化的梯度值;

x表示当前点,y表示x邻域中某个点;k表示向量归一化系数;Ω(x)表示x为中心的3*3邻域;φ(x,y)∈{1,-1}方向函数,两个向量夹角小于90度为1否则为-1。

5)采用FDOG方法,进行基于方向场流向的各向异性高斯滤波,最后根据预设的阈值进行二值化,从而得到人脸图像的轮廓。

步骤5)采用基于方向场流向的DoG(FDoG)来生成线绘图。由于从参考图像生成线条的过程与边缘检测有很大的相似之处,因此许多边缘检测的方法可以应用到方法中来。本方法采用了Winnemoller et al.的DoG方法来得到边缘的轮廓线条。该方法的基本步骤:如果对图像作二阶微分,即施加Laplacian算子,那么边缘就出现在0点处。然而Laplacian对于噪声十分敏感,在施加Laplacian操作前,先要进行高斯滤波,减小噪声,即Laplacian of Gaussian(LoG),而这里所使用的DoG则是对LoG的简化和近似。

具体实现过程:首先在每一点处沿着该点的梯度方向作一维DoG,并将结果保存,然后从该点出发,沿着方向流场向正反两个方向遍历,并对经过的所有点的DoG作高斯卷积。计算高斯函数,直到x=x0时高斯函数值小于等于某个阈值。然后分配一个大小为x0的数组,存放所有大于该阈值的高斯函数值,这样不仅决定了卷积核的大小,同时也求出了在每一点处应乘上的高斯函数值。

对于每一个像素点,沿着图像变化最剧烈的方向,即梯度方向,施加一维的DoG:

其中:

T表示卷积核横向的长度,方向为梯度方向;

I表示当前点的灰度值;

I(ls(t))表示在横向直线上,系数为t的时候的位置上的灰度值;

ρ的值为0.99。

曲线S代表的是方向场的流向,为了得到更连续的线条,需要再沿着S进行一次高斯卷积:

其中:

S表示图2中卷积核的纵向长度,这个是沿着流场的切线方向;

σm也是一个非常关键的参数,控制线条的连续性。

最后,再根据设定的阈值τ对图像进行二值化,就得到了最后的结果:

表示二值化的结果,对于上一步求得的H(x),根据τ进行二值化。

6)对步骤5得到的二值图像进行避开face++标记的人脸关键点的八连通深度遍历搜索,删除像素点低于300并且不经过人脸关键点的连通线段。在尽可能保留人脸轮廓的前提下简化图像。

具体实现大致分为两步:第一步,采用基于八连通的深度优先遍历算法进行连通线条像素点统计;第二步,删除多余的细节,删除像素点个数小于阈值并且不是含有特征点的线条。

7)将步骤6得到的各个离散的连通线条抽象为一个点,进而可将一笔画问题转换为图论问题。利用prim算法将距离最近的连通区域两两相连,将所有线条连成一体。具体实现大致分为两步:第一步,进行连通域标记并统计连通域个数;第二步,构造图论模型,分别对任意两个连通线条枚举各自的像素点,取其最近的两点间距离。

8)采用基于生态学的侵蚀算法,对步骤7得到的一笔画路径进行简化,将线条细化为一个像素点等宽,通过依次遍历所有像素点,得到最终的3D打印路径。

以上所述仅为本发明的较佳实施举例,并不用于限制本发明,凡在本发明精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1