本發(fā)明涉及計(jì)算機(jī)圖形與圖像處理領(lǐng)域,特別是涉及一種3D人像食品打印方法。
背景技術(shù):
將消費(fèi)者的照片通過3D食品打印成為可口而充滿藝術(shù)性的食品,是一個(gè)充滿個(gè)性和趣味的創(chuàng)意。而由于用于食品打印的材料為相應(yīng)食材,和普通3D打印機(jī)采用的abs、sla等材料在制作技術(shù)、加熱溫度、凝固條件上均有較大不同,因此需要結(jié)合需求進(jìn)行針對性的改進(jìn)。
使用糖、巧克力或者奶油等材料進(jìn)行打印,其線條寬度較大,反復(fù)堆疊進(jìn)行多層打印容易走形,效果較差。我們目標(biāo)實(shí)現(xiàn)的效果為糖畫,整體構(gòu)型精巧充滿藝術(shù)性并且可以粘在竹簽上完整的取下來。因此為了良好的成型效果需要單層打印并避免路徑的反復(fù)交叉引起外觀的變化。此外,為了打印后能夠完成的取下不斷裂,形狀中需要彼此相連不斷裂。若需要打印個(gè)人照片,需要對以下兩方面進(jìn)行處理:
1、需要簡化圖片的內(nèi)容,因?yàn)槭称反蛴‰y以實(shí)現(xiàn)豐富的細(xì)節(jié),一般采用簡單的線來表示形狀。因此需要將圖片內(nèi)容進(jìn)行處理,保持其主體內(nèi)容的同時(shí)將圖片內(nèi)容簡化為簡單的線表示。
2、做到線條相互連通一筆完成的前提下,需要對于打印路徑進(jìn)行規(guī)劃。3D食品打印使用的打印材料為相應(yīng)食材,比如糖漿巧克力等。由于食材在加熱溫度,凝固條件,難以凝固成型效果上都與較常用的abs或者sla有較大差距,其路徑規(guī)劃也不相同。需要在路徑之間流出更多間隙。單層打印效果較好,若路徑存在交叉則在交叉處的厚度會顯出增加,影響美觀。故需要盡量避免路徑交叉。
技術(shù)實(shí)現(xiàn)要素:
針對現(xiàn)有技術(shù)存在的不足,本發(fā)明提供了一種3D人像食品打印方法,采用ETF,F(xiàn)DOG算法抽取人臉的輪廓,利用八連通深度遍歷搜索與face++相結(jié)合的方法,獲得平滑的人臉圖像的方向場。
本發(fā)明的技術(shù)方案如下:
一種3D人像食品打印方法,包括以下八個(gè)步驟:
(1)用戶將輸入的人臉源圖像由RGB圖像轉(zhuǎn)換為灰度圖;
將輸入的人臉源圖像由RGB圖像轉(zhuǎn)換為灰度圖的具體方法為:
Gray=R*0.299+G*0.587+B*0.114
Gray表示灰度值,R、G、B是一個(gè)顏色空間red green black這個(gè)向量表示一個(gè)顏色值。
(2)利用face++API,對人臉特征區(qū)域的83個(gè)人臉特征點(diǎn)進(jìn)行標(biāo)識,獲得83個(gè)涵蓋臉部輪廓,包括眉毛、眼睛、鼻子、嘴巴輪廓的特征點(diǎn);
利用face++API對人臉上的特征區(qū)域的83個(gè)人臉特征點(diǎn)進(jìn)行標(biāo)識,其具體方法如下:
一張人臉圖片輸入后,先找到人臉的位置(人臉檢測),然后在這個(gè)基礎(chǔ)上定位人臉關(guān)鍵點(diǎn)的位置(如眼睛中心或嘴角等)。這些點(diǎn)的位置用來做人臉的幾何校正,即把人臉通過縮放、旋轉(zhuǎn)、拉伸等圖像變化變到一個(gè)比較標(biāo)準(zhǔn)的大小位置,這樣待識別的人臉區(qū)域會更加規(guī)整,便于后續(xù)進(jìn)行匹配。同時(shí),加入人臉光學(xué)校正模塊,通過一些濾波的方法,去除對光照更加敏感的面部特征。在做完這些預(yù)處理之后,再從人臉區(qū)域提取各種特征,包括局部二值模式、方向梯度直方圖、Gabor濾波(LBP、HOG、Gabor)等。最終相關(guān)的特征會連接成一個(gè)長的特征向量(Feature Vector)。
根據(jù)人臉上關(guān)鍵特征的分布,將人臉劃分成以下五個(gè)特征區(qū)域:臉部輪廓特征區(qū)域、眉毛特征區(qū)域、眼睛特征區(qū)域、鼻子特征區(qū)域、嘴唇特征區(qū)域和臉頰特征區(qū)域。最后對人臉的五個(gè)特征區(qū)域的各特征點(diǎn)進(jìn)行標(biāo)識。
初始特征點(diǎn)的序號從零開始,臉部輪廓特征點(diǎn)的生成順序?yàn)椋旱谝粋€(gè)點(diǎn)為下巴,接著是九個(gè)由上到下的左側(cè)臉部輪廓關(guān)鍵點(diǎn)和九個(gè)由上到下的右側(cè)臉部輪廓關(guān)鍵點(diǎn)。眉毛特征區(qū)域由左右各八個(gè)特征點(diǎn)組成,眼睛特征區(qū)域由中心一個(gè)特征點(diǎn)和周圍十個(gè)個(gè)特征點(diǎn)組成,鼻子特征區(qū)域由八個(gè)特點(diǎn)組成,其余的特征點(diǎn)描述嘴巴特征區(qū)域。
(3)將灰度圖進(jìn)行預(yù)處理,加強(qiáng)face++人臉關(guān)鍵點(diǎn)插值后得到的臉部輪廓的灰度值;
通過加強(qiáng)人臉關(guān)鍵點(diǎn)處的灰度值的方式,提高其梯度值,便于后續(xù)提取輪廓。
(4)利用邊緣切向流(ETF(Edge Tangent Flow))算法,構(gòu)造人臉圖像的平滑方向場;
采用ETF(Edge Tangent Flow)算法構(gòu)造人臉圖像的平滑方向場的具體方法如下:
梯度方向是圖像變化最劇烈的方向,與其垂直的方向可看做局部邊緣的切向,即“流向”。算法首先使用Sobel算子得到參考圖像的梯度場,然后在每一像素x處計(jì)算與其梯度向量垂直的向量,對于處于角落中的點(diǎn),會對其進(jìn)行加權(quán)平均,得到該點(diǎn)的梯度向量,進(jìn)而得到整張圖片的初始流場。隨后,迭代地對流場做2~3次非線性平滑,使得重要的邊緣方向被保留,而次要的方向與相關(guān)的重要方向?qū)R,這樣就能得到更平滑的方向場。
ETF(具體實(shí)現(xiàn)方法參見H.Kang,S.Lee,and C.K.Chui,"Coherent line drawing,"Proc.Non-Photorealistic Animation and Rendering(NPAR'07),pp.43-50,Aug.2007.)的濾波核函數(shù)如下:
其中:
wd(x,y)=|tcur(x)·tcur(y)|
tnew表示新的經(jīng)過光順的切向量(梯度的垂直方向);
tcur表示當(dāng)前的切向量,初值是由Sobel算子計(jì)算的切向量逆時(shí)針旋轉(zhuǎn)90度獲得的;
同上,代表y像素點(diǎn)的這個(gè)值;
ws(x,y)表示空間距離權(quán)值,用于確定函數(shù)作用范圍,當(dāng)y像素點(diǎn)位于x像素點(diǎn)半徑r范圍內(nèi)的時(shí)候,ws(x,y)為1;
wm(x,y)表示控制梯度值之差的影響,y與x的梯度值相差越大,這一權(quán)值也越高;
wd(x,y)表示控制方向的影響,梯度向量越趨近于平行這一權(quán)值越大,越趨近于垂直則越?。?/p>
r代表函數(shù)作用的有效半徑;
η是一個(gè)定值,通常為1;
表示y點(diǎn)的經(jīng)過歸一化的梯度值;
表示x點(diǎn)經(jīng)過歸一化的梯度值;
x表示當(dāng)前點(diǎn),y表示x鄰域中某個(gè)點(diǎn);k表示向量歸一化系數(shù);Ω(x)表示x為中心的3*3鄰域;φ(x,y)∈{1,-1}方向函數(shù),兩個(gè)向量夾角小于90度為1否則為-1。
(5)利用沿著方向流場的高斯差分(FDOG(Flow based Difference of Gaussians))算法,進(jìn)行基于方向場流向的各向異性高斯濾波,最后根據(jù)預(yù)設(shè)的閾值進(jìn)行二值化,從而得到人臉圖像的輪廓;
FDOG(具體實(shí)現(xiàn)方法參見H.Kang,S.Lee,and C.K.Chui,"Coherent line drawing,"Proc.Non-Photorealistic Animation and Rendering(NPAR'07),pp.43-50,Aug.2007.)進(jìn)行基于方向場流向的各向異性高斯濾波,最后根據(jù)預(yù)設(shè)的閾值進(jìn)行二值化,從而得到人臉圖像輪廓的方法如下:
從參考圖像生成線條的過程與邊緣檢測有很大的相似之處,因此許多邊緣檢測的方法可以應(yīng)用到方法中來,這一算法就采用了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點(diǎn)處,而Laplacian對于噪聲十分敏感,在施加Laplacian操作前,先要進(jìn)行高斯濾波,即Laplacian of Gaussian(LoG),而這里所使用的DoG則是對LoG的簡化和近似。
對于每一個(gè)像素點(diǎn),沿著圖像變化最劇烈的方向,即梯度方向,施加一維的DoG:
其中:
T表示卷積核橫向的長度,方向?yàn)樘荻确较颍?/p>
I表示當(dāng)前點(diǎn)的灰度值;
I(ls(t))表示在橫向直線上,系數(shù)為t的時(shí)候的位置上的灰度值;
f(t)是高斯差分函數(shù);
和是高斯函數(shù);
ρ是一個(gè)定值,通常默認(rèn)為0.99。
曲線S代表的是方向場的流向,為了得到更連續(xù)的線條,需要再沿著S進(jìn)行一次高斯卷積:
S表示卷積核的縱向長度,這個(gè)是沿著流場的切線方向;
和都是高斯函數(shù),σm、σc和σs是標(biāo)準(zhǔn)差,決定了高斯函數(shù)分布的幅度;一般設(shè)置σm=3.0,σc=1.0,σs=1.6σc。
高斯函數(shù)是低通濾波函數(shù),通過濾波可以得到兩個(gè)函數(shù)之間的部分,這也是高斯差分的基本原理。
最后,再根據(jù)設(shè)定的閾值τ對圖像進(jìn)行二值化,就得到了最后的結(jié)果:
表示二值化的結(jié)果,對于上一步求得的H(x),根據(jù)τ進(jìn)行二值化。
曲線S代表的是方向場的流向,為了得到更連續(xù)的線條,沿著方向流場向正反兩個(gè)方向遍歷,并對經(jīng)過的所有點(diǎn)的DoG作高斯卷積,作為像素點(diǎn)x的像素值,σm控制濾波模型流線的長度S,進(jìn)而控制線條的連續(xù)性。
(6)對步驟5得到的face++標(biāo)記的人臉關(guān)鍵點(diǎn)的八連通深度遍歷搜索,刪除像素點(diǎn)低于300的連通線段,從而簡化圖像;
根據(jù)face++API提取的特征點(diǎn),簡化圖像具體方法如下:
通過ETF,F(xiàn)DoG算法得到二值圖,預(yù)先標(biāo)記含有Face++人臉關(guān)鍵點(diǎn)的連通線條,然后對其二值圖中每一個(gè)像素點(diǎn)避開標(biāo)記的人臉關(guān)鍵點(diǎn)線條采取八連通深度搜索遍歷,統(tǒng)計(jì)每一個(gè)連通線條的像素點(diǎn)的個(gè)數(shù),并設(shè)置閾值(算法中取300),刪除像素點(diǎn)數(shù)低于300并且不通過特征點(diǎn)的連通線條,從而簡化圖片。
(7)將步驟6得到的各個(gè)離散的連通線條抽象為一個(gè)點(diǎn),進(jìn)而將一筆畫問題轉(zhuǎn)換為圖論問題,利用普里姆(prim)算法將距離最近的連通區(qū)域兩兩相連,將所有線條連成一體;
線段連通為一筆畫過程方法如下:
預(yù)先采取八連通深度搜索遍歷對連通域進(jìn)行標(biāo)記,將各個(gè)離散的連通線條抽象為一個(gè)點(diǎn),進(jìn)而將問題抽象為一個(gè)圖論問題,依次枚舉兩兩連通域間的最短距離,并記錄達(dá)到最短距離時(shí)對應(yīng)的兩點(diǎn)坐標(biāo)。此時(shí)連通域間的邊已求出,最小生成樹prim算法進(jìn)行距離最近的兩個(gè)連通域互連,達(dá)到互連邊的權(quán)值之和最小。經(jīng)多次測試,此做法連通后對原圖片的破壞程度較小,做到了連通與美觀的平衡。
(8)采用侵蝕算法,對步驟7得到的一筆畫路徑進(jìn)行簡化,通過依次遍歷所有像素點(diǎn),得到最終的3D打印路徑。
與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果為:
本發(fā)明提出一種全新的保留人臉輪廓的的3D人像食品打印方法,采用ETF,F(xiàn)DOG算法抽取人臉的輪廓,利用八連通深度遍歷搜索與face++相結(jié)合的方法,在保留人臉主要特征信息的前提下消減了多余的細(xì)節(jié),使結(jié)果更加清晰明了。本發(fā)明方法明確,界面友好,結(jié)果魯棒,且該方法可以用于手機(jī)應(yīng)用,3D打印等領(lǐng)域。
附圖說明
圖1為本發(fā)明3D人像食品打印方法的技術(shù)方案流程圖;
圖2為本發(fā)明的方法進(jìn)行高斯差分的濾波核,橫向T是以S上的點(diǎn)為中心的梯度方向,縱向是切線方向(邊緣的方向);
圖3為系數(shù)不同的高斯函數(shù);
圖4為本發(fā)明3D人像食品打印方法各步驟實(shí)現(xiàn)效果圖,其中(a)為源圖像的灰度圖,(b)為人臉特征點(diǎn)識別展示圖,(c)為高斯差分得到的結(jié)果圖,(d)為圖像簡化得到的結(jié)果圖,(e)為普里姆算法連成一筆畫的結(jié)果圖,(f)為細(xì)化算法得到的最終結(jié)果圖,(g)為最終結(jié)果圖。
具體實(shí)施方式
下面結(jié)合附圖和具體實(shí)施方式對本發(fā)明一種3D人像食品打印算法作進(jìn)一步詳細(xì)說明。
如圖1~4所示,一種3D人像食品打印算法,包括以下步驟:
1)將外設(shè)采集的源圖像轉(zhuǎn)換為灰度圖
通過手機(jī)或者其他外部設(shè)備采集人臉圖像,隨后將在RGB色彩空間下表示的源圖像轉(zhuǎn)換為灰度圖像。
Gray=R*0.299+G*0.587+B*0.114
Gray表示灰度值,R、G、B是一個(gè)顏色空間red green black這個(gè)向量表示一個(gè)顏色值。
2)采用face++提供的API,對人臉特征區(qū)域的83個(gè)人臉特征點(diǎn)進(jìn)行標(biāo)識,獲得83個(gè)涵蓋臉部輪廓,包括眉毛、眼睛、鼻子、嘴巴輪廓的特征點(diǎn);
根據(jù)人臉上關(guān)鍵特征的分布,將人臉劃分成以下5個(gè)特征區(qū)域:眉毛、眼睛、鼻子、嘴唇、臉頰。這些特征區(qū)域的特征點(diǎn)以特征點(diǎn)對的形式出現(xiàn)。其中,初始特征點(diǎn)的序號從零開始,臉部輪廓特征點(diǎn)的生成順序?yàn)椋旱谝粋€(gè)點(diǎn)為下巴,接著是九個(gè)由上到下的左側(cè)臉部輪廓關(guān)鍵點(diǎn)和九個(gè)由上到下的右側(cè)臉部輪廓關(guān)鍵點(diǎn)。眉毛特征區(qū)域由左右各八個(gè)特征點(diǎn)組成,眼睛特征區(qū)域由中心一個(gè)特征點(diǎn)和周圍十個(gè)特征點(diǎn)組成,鼻子特征區(qū)域由八個(gè)特點(diǎn)組成,其余的特征點(diǎn)描述了嘴巴特征區(qū)域。
3)對人臉圖像的灰度圖進(jìn)行預(yù)處理,加強(qiáng)face++人臉關(guān)鍵點(diǎn)插值后得到的臉部輪廓的灰度值,提高其梯度值,便于后續(xù)提取輪廓。
4)采用ETF方法,求得經(jīng)過預(yù)處理灰度圖的方向場,經(jīng)過多次迭代處理,得到平滑的方向場
梯度方向是圖像變化最劇烈的方向,與其垂直的方向可看做局部邊緣的切向,即“流向”。算法首先使用Sobel算子得到參考圖像的梯度場,然后在每一像素x處計(jì)算與其梯度向量g0(x)垂直的向量t0(x),得到了初始流場。再迭代地對流場做2-3次非線性平滑,使得重要的邊緣方向被保留,而次要的方向與相關(guān)的重要方向?qū)R,這樣就能得到更平滑的方向場。ETF(具體實(shí)現(xiàn)方法參見H.Kang,S.Lee,and C.K.Chui,"Coherent line drawing,"Proc.Non-Photorealistic Animation and Rendering(NPAR'07),pp.43-50,Aug.2007.)的濾波核函數(shù)如下:
wd(x,y)=|tcur(x)·tcur(y)| (4)
tnew表示新的經(jīng)過光順的切向量(梯度的垂直方向);
tcur表示當(dāng)前的切向量,初值是由Sobel算子計(jì)算的切向量逆時(shí)針旋轉(zhuǎn)90度獲得的;
同上,代表y像素點(diǎn)的這個(gè)值;
ws(x,y)表示空間距離權(quán)值,用于確定函數(shù)作用范圍,當(dāng)y像素點(diǎn)位于x像素點(diǎn)半徑r范圍內(nèi)的時(shí)候,為1;
wm(x,y)表示控制梯度值之差的影響,y與x的梯度值相差越大,這一權(quán)值也越高;
wd(x,y)表示控制方向的影響,梯度向量越趨近于平行這一權(quán)值越大,越趨近于垂直則越?。?/p>
r代表函數(shù)作用的有效半徑;
η的值為1;
表示y點(diǎn)的經(jīng)過歸一化的梯度值;
表示x點(diǎn)經(jīng)過歸一化的梯度值;
x表示當(dāng)前點(diǎn),y表示x鄰域中某個(gè)點(diǎn);k表示向量歸一化系數(shù);Ω(x)表示x為中心的3*3鄰域;φ(x,y)∈{1,-1}方向函數(shù),兩個(gè)向量夾角小于90度為1否則為-1。
5)采用FDOG方法,進(jìn)行基于方向場流向的各向異性高斯濾波,最后根據(jù)預(yù)設(shè)的閾值進(jìn)行二值化,從而得到人臉圖像的輪廓。
步驟5)采用基于方向場流向的DoG(FDoG)來生成線繪圖。由于從參考圖像生成線條的過程與邊緣檢測有很大的相似之處,因此許多邊緣檢測的方法可以應(yīng)用到方法中來。本方法采用了Winnemoller et al.的DoG方法來得到邊緣的輪廓線條。該方法的基本步驟:如果對圖像作二階微分,即施加Laplacian算子,那么邊緣就出現(xiàn)在0點(diǎn)處。然而Laplacian對于噪聲十分敏感,在施加Laplacian操作前,先要進(jìn)行高斯濾波,減小噪聲,即Laplacian of Gaussian(LoG),而這里所使用的DoG則是對LoG的簡化和近似。
具體實(shí)現(xiàn)過程:首先在每一點(diǎn)處沿著該點(diǎn)的梯度方向作一維DoG,并將結(jié)果保存,然后從該點(diǎn)出發(fā),沿著方向流場向正反兩個(gè)方向遍歷,并對經(jīng)過的所有點(diǎn)的DoG作高斯卷積。計(jì)算高斯函數(shù),直到x=x0時(shí)高斯函數(shù)值小于等于某個(gè)閾值。然后分配一個(gè)大小為x0的數(shù)組,存放所有大于該閾值的高斯函數(shù)值,這樣不僅決定了卷積核的大小,同時(shí)也求出了在每一點(diǎn)處應(yīng)乘上的高斯函數(shù)值。
對于每一個(gè)像素點(diǎn),沿著圖像變化最劇烈的方向,即梯度方向,施加一維的DoG:
其中:
T表示卷積核橫向的長度,方向?yàn)樘荻确较颍?/p>
I表示當(dāng)前點(diǎn)的灰度值;
I(ls(t))表示在橫向直線上,系數(shù)為t的時(shí)候的位置上的灰度值;
ρ的值為0.99。
曲線S代表的是方向場的流向,為了得到更連續(xù)的線條,需要再沿著S進(jìn)行一次高斯卷積:
其中:
S表示圖2中卷積核的縱向長度,這個(gè)是沿著流場的切線方向;
σm也是一個(gè)非常關(guān)鍵的參數(shù),控制線條的連續(xù)性。
最后,再根據(jù)設(shè)定的閾值τ對圖像進(jìn)行二值化,就得到了最后的結(jié)果:
表示二值化的結(jié)果,對于上一步求得的H(x),根據(jù)τ進(jìn)行二值化。
6)對步驟5得到的二值圖像進(jìn)行避開face++標(biāo)記的人臉關(guān)鍵點(diǎn)的八連通深度遍歷搜索,刪除像素點(diǎn)低于300并且不經(jīng)過人臉關(guān)鍵點(diǎn)的連通線段。在盡可能保留人臉輪廓的前提下簡化圖像。
具體實(shí)現(xiàn)大致分為兩步:第一步,采用基于八連通的深度優(yōu)先遍歷算法進(jìn)行連通線條像素點(diǎn)統(tǒng)計(jì);第二步,刪除多余的細(xì)節(jié),刪除像素點(diǎn)個(gè)數(shù)小于閾值并且不是含有特征點(diǎn)的線條。
7)將步驟6得到的各個(gè)離散的連通線條抽象為一個(gè)點(diǎn),進(jìn)而可將一筆畫問題轉(zhuǎn)換為圖論問題。利用prim算法將距離最近的連通區(qū)域兩兩相連,將所有線條連成一體。具體實(shí)現(xiàn)大致分為兩步:第一步,進(jìn)行連通域標(biāo)記并統(tǒng)計(jì)連通域個(gè)數(shù);第二步,構(gòu)造圖論模型,分別對任意兩個(gè)連通線條枚舉各自的像素點(diǎn),取其最近的兩點(diǎn)間距離。
8)采用基于生態(tài)學(xué)的侵蝕算法,對步驟7得到的一筆畫路徑進(jìn)行簡化,將線條細(xì)化為一個(gè)像素點(diǎn)等寬,通過依次遍歷所有像素點(diǎn),得到最終的3D打印路徑。
以上所述僅為本發(fā)明的較佳實(shí)施舉例,并不用于限制本發(fā)明,凡在本發(fā)明精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。