趙楊
(云南師范大學傳媒學院動畫系,云南昆明,650500)
流場可視化是科學可視化的重要研究領(lǐng)域?,F(xiàn)有的二維流場可視化技術(shù)可劃分為三大類:基于紋理,基于線形以及基于圖像[1]。
二維流場可視化技術(shù)可將矢量流場數(shù)據(jù)轉(zhuǎn)換為二維動畫進行呈現(xiàn)。該項技術(shù)除了在計算流體力學研究與工程實踐領(lǐng)域得到了廣泛應(yīng)用外,其在電影、動漫制作和視頻娛樂等方面也有著特殊的運用[2]。
視頻媒體的風格化技術(shù)已成為當下十分重要的研究熱點,各種采用不同理論思想和技術(shù)路線的研究工作也在不斷展開[2]。當前,對圖像及視頻的水彩風格化渲染技術(shù)主要分為兩類:一類是基于物理方法的模擬,一類是基于圖像的濾波處理[3]。
本文主要探討基于光流導向的二維流場可視化算法的設(shè)計與實現(xiàn),并將該項技術(shù)拓展到對視頻進行水彩風格化渲染方面。本文創(chuàng)新點在于結(jié)合以上兩種處理技術(shù)對視頻進行水彩風格化渲染,并進一步提出采用GPU對整個算法進行硬件加速處理。
1999年,Curtis等[4]首先提出基于物理模型的水彩風格渲染技術(shù)。該算法將畫布分為3層:淺水層,顏料沉淀層,滲透層。通過模擬顏料及水在畫布上的物理變化以實現(xiàn)逼真的水彩效果,但該算法計算代價高昂。
2007年,Bou等人根據(jù)視頻光流,應(yīng)用非剛性變形紋理控制生成具有水彩風格的視頻[2]。該方法主要采用紋理傳輸方法[2],通過使紋理沿著光流場在時間域上向前向后傳輸,克服了紋理傳輸過程中隨時間延伸而出現(xiàn)的紋理拉伸變形的缺點[5],但該算法難以實現(xiàn)對視頻的實時水彩風格化處理。
2013年,賈立兵等人提出采用Voronoi圖來實時處理視頻幀,通過簡化視頻幀的顏色信息,并融合邊緣信息,進而實現(xiàn)水彩畫風格渲染[6]。該算法的特點是實現(xiàn)簡單,但是較難模擬水彩的各種復(fù)雜的表現(xiàn)技法。
2014年,王妙一等人提出一種新穎的算法用于對圖像和照片進行水彩渲染。該系統(tǒng)主要運用圖像處理技術(shù)實現(xiàn)對水彩畫所具有的復(fù)雜特征,比如湍流現(xiàn)象,邊界羽化現(xiàn)象進行模擬。此外,該算法的優(yōu)點在于可以較容易地實現(xiàn)并行化處理,適合交互式圖像水彩化處理[7]。
2020年,趙楊等人提出了基于GPU加速的視頻水彩風格化實時渲染算法,并實現(xiàn)了可用的實時繪制系統(tǒng)[3]。該系統(tǒng)利用GPU并行計算的特性,實現(xiàn)對輸入視頻水彩風格的快速風格遷移,為用戶提供了較好的交互體驗。
要解決二維流場的可視化問題,首先需構(gòu)造合理的流場可視化模型。本文首先結(jié)合Navier-Stokes方程構(gòu)造流體動力學模型;其次以紋理坐標映射方式,實現(xiàn)二維流場的紋理可視化算法;最后采用視頻光流作為流體動力學模型的輸入速度場,通過光流引導,實現(xiàn)二維流場的可視化。本文結(jié)合物理方法模擬以及圖像處理技術(shù),實現(xiàn)對視頻的水彩風格化渲染。下面將詳細介紹算法的基本思想和具體實現(xiàn),以及采用GPU對本文提出的算法進行改進和優(yōu)化。
本文采用Jos Stam[8]提出的Navier-Stokes方程作為流體動力學物理模型。不可壓縮流體的NS方程組主要由兩部分組成:一是動量方程;另一個是連續(xù)性方程[9]。形式化定義為:
其中??u=0。公式(1)右第一項稱作平流項;第二項,稱作壓力項,代表微觀上的不均勻壓力;第三項表示流體濃稠度的不均勻形成的動量擴散;第四項是外力施加到流體上所增加的加速度[10]。
外力項由外界對流體施加的力組成,形式化定義為:
平流項表示速度場沿著擴散方向傳輸自身流體粒子,形式化定義為:
對擴散項的求解轉(zhuǎn)化為對泊松方程的求解,形式化定義為:
可采用Gauss-Seidel法進行求解[10]。
經(jīng)過外力、平流、擴散運算后得到一個有散度的速度場w3(x),通過投影算子將其改變?yōu)闊o散度的速度場w4(x)。為求解以上方程,本文通過Helmholtz-Hodge 分解得到流體運動的物理模擬計算方法。整個求解過程,按從左到右順序,首先是外力,平流,接著是擴散和投射,即:
具體實現(xiàn)代碼可參考文獻[8]。
由于采用傳統(tǒng)的半拉格朗日方法計算會引起數(shù)值耗散,同時二維紋理映射后,紋理坐標隨速度場進行遷移的過程中,隨著時間流逝,會出現(xiàn)紋理的拉伸和變形。為使二維紋理隨流場遷移映射的過程中盡量保持其結(jié)構(gòu)特征不變,本文引入漩渦限制因子來增加紋理旋流的細節(jié)[11]。
圖1 基于圖像紋理映射的流場可視化效果圖
圖2 基于噪聲圖像紋理映射的流場可視化效果圖
光流是一種便捷的圖像運動顯示方法,通常定義為視頻圖像序列中圖像亮度模型的表觀運動[12]。光流算法一般分為稀疏光流算法和密集光流算法,其中密集光流場可用于像素級圖像的對準[13],雖然計算量較大,但效果通常比稀疏光流要好。
本文采用Farneback密集光流算法提取運動區(qū)域內(nèi)的光流信息,并以光流場運動方向作為NS流體模型的輸入速度場,從而實現(xiàn)對二維流體紋理場的引導。
圖3 基于Farneback算法的光流場計算效果圖
圖4 基于光流場引導的二維流場可視化效果圖
本節(jié)將詳細介紹如何利用上述提出的二維流場可視化算法實現(xiàn)對視頻的水彩風格化渲染。本文提出的視頻水彩風格化渲染算法主要包含四個步驟:Step1:運用二維Perlin噪聲函數(shù)生成水彩紋理,作為流場的輸入紋理;Step2:運用NS方程以光流場為導向模擬二維流場的紋理傳輸遷移效果;Step3:運用Kuwahara算子進行圖像抽象化濾波;Step4:將水彩紋理圖與濾波圖進行融合。
圖5 2D Perlin生成水彩紋理效果圖
2.3.1 水彩紋理生成算法
由于水彩繪制過程中,其紙張紋理有一定的細微的隨機褶皺紋理。為模擬這一特性,本文采用Perlin噪聲函數(shù)來生成看起來較為自然的隨機雜點[3],并以此作為二維流場可視化算法的輸入紋理,通過光流導向,控制該紋理的變形,從而模擬視頻序列隨時間流逝時,水彩紋理的變化走向情況。如何利用二維Perlin 噪聲模擬水彩紙張紋理的褶皺感,主要方法可參考文獻[14]。
2.3.2 Kuwahara濾波算法
Kuwahara濾波將濾波核劃分為N組鄰域,算法分別計算各分區(qū)內(nèi)像素的均值和方差,選擇最小方差對應(yīng)的均值作為濾波結(jié)果。
實驗表明,Kuwahara濾波在平滑圖像的同時能夠保留圖像邊緣和角點,從而可抽象地模擬生成水彩暈染的變化效果。
圖6 Kuwahara濾波生成水彩暈染效果圖
2.3.3 紋理圖像融合算法
通過將本文提出的二維流場可視化技術(shù)計算得到的視頻水彩紋理圖與Kuwahara濾波生成的水彩暈染效果圖進行融合,即可得到具有水彩風格的視頻序列圖。紋理圖像顏色混合模型類似于Photoshop軟件提供的圖像疊加運算,其可以形式化定義為:
公式中A代表基色;B代表混合色;C代表圖層混合后的顏色值,稱為結(jié)果色。
圖7 紋理融合算法生成的水彩風格化效果圖
本文運用GPU在二維網(wǎng)格上求解NS方程進而實現(xiàn)實時的二維流場的模擬[11]。對二維流場紋理進行渲染的每一個時間步內(nèi),GPU對NS方程的每一個算子分別進行運算,前次的計算結(jié)果將作為下次計算的輸入,重復(fù)進行直到程序退出。GPU渲染流程圖如圖8所示。
圖8 GPU加速二維流場渲染流程圖
本文采用Visual C++語言及GLSL語言實現(xiàn)核心算法。本文提出了一個簡單新穎的光流導向的流場可視化算法及視頻水彩風格化技術(shù),取得了較為良好的合成效果,但仍存在大量需要改進和優(yōu)化的工作。主要改進方向是如何進一步解決二維紋理流場的拉伸與變形問題,從而實現(xiàn)保持紋理結(jié)構(gòu)的流場可視化算法。