解婉譽,楊 明,李慶芹,徐 丹
(1.昆明冶金高等??茖W(xué)校 a.人力資源處;b.通識與素質(zhì)教育學(xué)院,云南 昆明 650033;2.云南財經(jīng)大學(xué)信息學(xué)院,云南 昆明 650221;3. 云南大學(xué)信息學(xué)院,云南 昆明 650091)
非真實感繪制(Non-Photorealistic Rendering,NPR)[1]技術(shù)是計算機圖形學(xué)領(lǐng)域正在蓬勃興起的研究熱點,目前在漫畫[2]、水墨畫[3]、鉛筆畫[4]、剪紙[5]等數(shù)字模擬方面均取得了豐碩的成果。非真實感繪制經(jīng)常涉及到對邊緣的模擬,常用的邊緣提取方法有Sobel算子[6]、Canny算子[7]、風(fēng)格化邊緣[8]等。其中,風(fēng)格化邊緣效果最好,能夠生成噪聲較少、連續(xù)平滑的邊緣,常用于各種非真實感繪制邊緣的模擬。這些邊緣提取方法都是對真實邊緣的提取,不具備抽象化特征,因此,它們模擬不出具有刻制效果的邊緣。
為了解決這一難題,本文提出了一種優(yōu)化的風(fēng)格化邊緣的生成方法:它是對風(fēng)格化邊緣進(jìn)行抽象化,具體是對邊緣切線流ETF的平滑模型作出相應(yīng)的改進(jìn),生成一種抽象線性風(fēng)格的風(fēng)格化邊緣,此邊緣能用于刻制邊緣的模擬。
風(fēng)格化邊緣的生成過程為:如圖1所示,1)對源圖像每個像素點進(jìn)行Sobel算子邊緣檢測,得到每個像素點的邊緣梯度向量;2)將梯度向量逆時針旋轉(zhuǎn)90°,得到初始邊緣向量,由所有像素點的初始邊緣向量構(gòu)成初始的邊緣向量流場,這種流場的向量方向參差不齊,需要進(jìn)行平滑處理;3)對初始邊緣向量流使用迭代的ETF平滑模型平滑流場向量方向,即將每次平滑后的結(jié)果作為輸入的流場進(jìn)行下一次的平滑操作,多次平滑后得到平滑的邊緣向量流場;4)結(jié)合源圖像的灰度圖和平滑后的邊緣向量流場,使用迭代的各向異性的高斯函數(shù)差分DOG(Difference of Gaussian)[8]濾波器并二值化,最終得到風(fēng)格化邊緣。
本文對ETF的平滑模型作出了改進(jìn),促使了一種抽象風(fēng)格的風(fēng)格化邊緣的生成。
圖1 風(fēng)格化邊緣的生成過程Fig.1 The generation process of stylized edges
1.2.1 原有的ETF平滑模型
公式(1)是原有的ETF平滑模型[8]:
(1)
其中,N(x)為當(dāng)前中心像素x的鄰域像素y所構(gòu)成的集合;M是向量歸一化因子;ei(z)代表像素點z當(dāng)前的歸一化切線向量;ei+1(z)表示像素點z平滑后的歸一化切線向量;i為平滑次數(shù)。
W是單調(diào)遞增的模值權(quán)重函數(shù),如公式(2)所示:
(2)
S(x,y)是鄰域像素點邊緣矢量的調(diào)向函數(shù),它的定義是:
(3)
1.2.2 本文優(yōu)化的ETF平滑模型
本文改進(jìn)的ETF平滑模型在平滑次數(shù)較大時,能夠生成具有局部線性特征的強邊線性流,改進(jìn)的模型如式(4)所示:
(4)
其中,ei(z)為像素點z當(dāng)前的切線向量,并且不進(jìn)行歸一化處理;ei+1(z)是像素點z平滑后的切線向量,也不進(jìn)行歸一化。
W(x,y)=g(y)
(5)
其中,g(z)為像素點z不歸一化的梯度模值,始終等于切向量模值。除此之外,本論文把M設(shè)為較大的常數(shù),例如100。
新平滑模型的改進(jìn)之處:
1)初始的邊緣向量場與平滑后的邊向量均不作歸一化處理,簡化步驟。
3)g(y)如果設(shè)置為定值即y點初始的梯度值,則新模型的平滑結(jié)果與原模型相同。為了生成更抽象化的效果,本文把g(y)的值跟隨平滑后的邊向量模值變化,以打破原有流場的形狀,產(chǎn)生抽象的線性強邊流場。另外,M設(shè)為較大常數(shù),能夠放大較大的邊向量、縮小較小的邊向量。因為在平滑公式(4)中,
例如:M=100,則公式為:
4)在迭代平滑過程中,新平滑模型每次平滑后的權(quán)重會變化,強邊的權(quán)重值相對會越變越大,使平滑結(jié)果更大程度地趨向于強邊方向,多次平滑將會把強邊周圍的方向均同化為強邊方向,會失去原有的細(xì)節(jié)方向。而原模型的權(quán)重始終是由原圖像邊的強度決定,是定值,平滑后方向變化不大。
由風(fēng)格化邊緣生成的過程可以看出,經(jīng)過優(yōu)化的ETF平滑模型生成的抽象邊緣流場,局部線性特征也會被由此生成的風(fēng)格化邊緣所繼承,呈現(xiàn)出同樣的強邊線性特征,從而生成抽象風(fēng)格的風(fēng)格化邊緣。
本文對優(yōu)化的ETF模型用實驗的方式驗證理論的正確性。
驗證中用到的線積分卷積 (Line Integral Convolution,簡稱LIC)[9]技術(shù),是一種矢量場可視化技術(shù),能夠把流場可視化,用紋理的方式顯示流場的形狀(圖2)。本文將使用線積分卷積技術(shù)驗證優(yōu)化的ETF平滑模型生成流場的抽象線性特征。
實驗平臺:visual studio 2008 ,編程語言:C++/C。
優(yōu)化的ETF平滑模型的實驗核心代碼為:
for(int n=0;n { for(int i=0;i {for(int j=0;j { if(i>0&&i { l0 = sqrt(vx0[i][j]*vx0[i][j]+vy0[i][j]*vy0[i][j]); l1 = sqrt(vx0[i-1][j-1]*vx0[i-1][j-1]+vy0[i-1][j-1]*vy0[i-1][j-1]); l2 = sqrt(vx0[i-1][j]*vx0[i-1][j]+vy0[i-1][j]*vy0[i-1][j]); l3 = sqrt(vx0[i-1][j+1]*vx0[i-1][j+1]+vy0[i-1][j+1]*vy0[i-1][j+1]); l4 = sqrt(vx0[i][j+1]*vx0[i][j+1]+vy0[i][j+1]*vy0[i][j+1]); l5 = sqrt(vx0[i+1][j+1]*vx0[i+1][j+1]+vy0[i+1][j+1]*vy0[i+1][j+1]); l6 = sqrt(vx0[i+1][j]*vx0[i+1][j]+vy0[i+1][j]*vy0[i+1][j]); l7 = sqrt(vx0[i+1][j-1]*vx0[i+1][j-1]+vy0[i+1][j-1]*vy0[i+1][j-1]); l8 = sqrt(vx0[i][j-1]*vx0[i][j-1]+vy0[i][j-1]*vy0[i][j-1]);//切向量模值就是梯度模值 if(vx0[i][j]*vx0[i-1][j-1]+vy0[i][j]*vy0[i-1][j-1]>0) { s1=1;} else{s1=-1;} if(vx0[i][j]*vx0[i-1][j]+vy0[i][j]*vy0[i-1][j]>0) { s2=1;} else{s2=-1;} if(vx0[i][j]*vx0[i-1][j+1]+vy0[i][j]*vy0[i-1][j+1]>0) { s3=1;} else{s3=-1;} if(vx0[i][j]*vx0[i][j+1]+vy0[i][j]*vy0[i][j+1]>0) { s4=1;} else{s4=-1;} if(vx0[i][j]*vx0[i+1][j+1]+vy0[i][j]*vy0[i+1][j+1]>0) { s5=1;} else{s5=-1;} if(vx0[i][j]*vx0[i+1][j]+vy0[i][j]*vy0[i+1][j]>0) { s6=1;} else{s6=-1;} if(vx0[i][j]*vx0[i+1][j-1]+vy0[i][j]*vy0[i+1][j-1]>0) { s7=1;} else{s7=-1;} if(vx0[i][j]*vx0[i][j-1]+vy0[i][j]*vy0[i][j-1]>0) { s8=1;} else{s8=-1;} M=100; vx2[i][j]=(s1*vx0[i-1][j-1]*l1+s2*vx0[i-1][j]*l2+s3*vx0[i-1][j+1]*l3+s4*vx0[i][j+1]*l4+s5*vx0[i+1][j+1]*l5+s6*vx0[i+1][j]*l6+s7*vx0[i+1][j-1]*l7+s8*vx0[i][j-1]*l8)/M; vy2[i][j]=(s1*vy0[i-1][j-1]*l1+s2*vy0[i-1][j]*l2+s3*vy0[i-1][j+1]*l3+s4*vy0[i][j+1]*l4+s5*vy0[i+1][j+1]*l5+s6*vy0[i+1][j]*l6+s7*vy0[i+1][j-1]*l7+s8*vy0[i][j-1]*l8)/M; } } } for(int i=0;i {for(int j=0;j { vx0[i][j] = vx2[i][j]; vy0[i][j] = vy2[i][j];}} } 實驗結(jié)果:如圖3所示:(a)是源圖像;(b)是一般的ETF模型所生成的流場的LIC結(jié)果圖;(c)是優(yōu)化的ETF模型所生成的抽象流場的LIC結(jié)果圖。從實驗結(jié)果對比中可以看出,(c)的流場具有局部線性特征,例如胡須、毛發(fā)表現(xiàn)出比較凸顯的平直特性,這些特性說明了優(yōu)化的ETF模型是能夠生成抽象線性的流場。 圖2 LIC方法Fig.2 LIC method 圖3 傳統(tǒng)的ETF與本論文優(yōu)化的ETF的LIC對比實驗圖Fig.3 LIC comparison between the traditional ETF and the optimized ETF in this paper 風(fēng)格化邊緣的實驗核心代碼為: for (s = -T; s <= T; s++) { x = d_x + vn0 * s; y = d_y - vn1 * s; if (x > (double)width1-1 || x < 0.0 || y > (double)height1-1 || y < 0.0) continue; x1 = round(x);if (x1 < 0) x1 = 0; if (x1 >width1-1) x1 = width1-1; y1 = round(y);if (y1 < 0) y1 = 0; if (y1 > height1-1) y1 = height1-1; val = licImage[x1][y1]; dd = ABS(s); if (dd > W) weight1 = 0.0; else weight1 = gauss(dd, sigmac); sum1 += val * weight1; w_sum1 += weight1; weight2 = gauss(dd, sigmas); sum2 += val * weight2; w_sum2 += weight2; } sum1 /= w_sum1; sum2 /= w_sum2; F[i][j] = sum1 - rol * sum2;///F即為DOG 對優(yōu)化的風(fēng)格化邊緣進(jìn)行實驗,結(jié)果如圖4所示。 圖4 優(yōu)化的風(fēng)格化邊緣實驗結(jié)果對比圖Fig.4 Comparison of optimized stylized edge experiment results 從圖4可以看出,與傳統(tǒng)的風(fēng)格化邊緣相比,經(jīng)過優(yōu)化的風(fēng)格化邊緣呈現(xiàn)局部線性平直特征,這種邊緣由強邊信息構(gòu)成,離散點比較少,圖像也較干凈,是一種抽象特征的風(fēng)格化邊緣。 1) 可行性分析。本文提出優(yōu)化的風(fēng)格化邊緣生成方法是對傳統(tǒng)的風(fēng)格化邊緣進(jìn)行改進(jìn),所生成的一種具有抽象線性特征的邊緣,它是對ETF的平滑模型作出了相應(yīng)的調(diào)整。經(jīng)理論和實驗驗證,這種邊緣是具有刻制特征的。 2) 應(yīng)用前景。傳統(tǒng)的邊緣提取方法是真實邊緣的反映,不具有抽象性;而本文優(yōu)化的風(fēng)格化邊緣具有抽象線性特征,由強邊信息構(gòu)成,線條簡潔、離散點較少。這些優(yōu)點決定著它可以應(yīng)用于一些刻制特征的風(fēng)格化繪制的模擬,例如壁刻、木刻版畫、雕刻等。凡是刻制作品的邊緣都需要經(jīng)過一刀一刀地刻制,線條不會很圓滑地過渡,并且只反映主要的信息,本文優(yōu)化的風(fēng)格化邊緣很適合這類刻制的模擬。 本文使用優(yōu)化的風(fēng)格化邊緣對壁刻作了實驗?zāi)M,實驗結(jié)果如圖5所示:(a)是源圖像,(b)是傳統(tǒng)的風(fēng)格化邊緣模擬壁刻的效果,(c)是優(yōu)化的風(fēng)格化邊緣模擬壁刻的效果。從(b)、(c)的效果對比中可以看出,本文提出的優(yōu)化的風(fēng)格化邊緣模擬壁刻的效果較好,產(chǎn)生的噪聲點更少,線條風(fēng)格趨向于筆直抽象,更適宜模擬刻制的邊緣。 圖5 模擬壁刻的對比圖Fig.5 Comparison of simulated wall carvings2.2 優(yōu)化的風(fēng)格化邊緣的實驗結(jié)果
3 結(jié) 語