趙楊
(云南師范大學傳媒學院動畫系,云南昆明,650500)
流場可視化是科學可視化的重要研究領域。現有的二維流場可視化技術可劃分為三大類:基于紋理,基于線形以及基于圖像[1]。
二維流場可視化技術可將矢量流場數據轉換為二維動畫進行呈現。該項技術除了在計算流體力學研究與工程實踐領域得到了廣泛應用外,其在電影、動漫制作和視頻娛樂等方面也有著特殊的運用[2]。
視頻媒體的風格化技術已成為當下十分重要的研究熱點,各種采用不同理論思想和技術路線的研究工作也在不斷展開[2]。當前,對圖像及視頻的水彩風格化渲染技術主要分為兩類:一類是基于物理方法的模擬,一類是基于圖像的濾波處理[3]。
本文主要探討基于光流導向的二維流場可視化算法的設計與實現,并將該項技術拓展到對視頻進行水彩風格化渲染方面。本文創新點在于結合以上兩種處理技術對視頻進行水彩風格化渲染,并進一步提出采用GPU對整個算法進行硬件加速處理。
1999年,Curtis等[4]首先提出基于物理模型的水彩風格渲染技術。該算法將畫布分為3層:淺水層,顏料沉淀層,滲透層。通過模擬顏料及水在畫布上的物理變化以實現逼真的水彩效果,但該算法計算代價高昂。
2007年,Bou等人根據視頻光流,應用非剛性變形紋理控制生成具有水彩風格的視頻[2]。該方法主要采用紋理傳輸方法[2],通過使紋理沿著光流場在時間域上向前向后傳輸,克服了紋理傳輸過程中隨時間延伸而出現的紋理拉伸變形的缺點[5],但該算法難以實現對視頻的實時水彩風格化處理。
2013年,賈立兵等人提出采用Voronoi圖來實時處理視頻幀,通過簡化視頻幀的顏色信息,并融合邊緣信息,進而實現水彩畫風格渲染[6]。該算法的特點是實現簡單,但是較難模擬水彩的各種復雜的表現技法。
2014年,王妙一等人提出一種新穎的算法用于對圖像和照片進行水彩渲染。該系統主要運用圖像處理技術實現對水彩畫所具有的復雜特征,比如湍流現象,邊界羽化現象進行模擬。此外,該算法的優點在于可以較容易地實現并行化處理,適合交互式圖像水彩化處理[7]。
2020年,趙楊等人提出了基于GPU加速的視頻水彩風格化實時渲染算法,并實現了可用的實時繪制系統[3]。該系統利用GPU并行計算的特性,實現對輸入視頻水彩風格的快速風格遷移,為用戶提供了較好的交互體驗。
要解決二維流場的可視化問題,首先需構造合理的流場可視化模型。本文首先結合Navier-Stokes方程構造流體動力學模型;其次以紋理坐標映射方式,實現二維流場的紋理可視化算法;最后采用視頻光流作為流體動力學模型的輸入速度場,通過光流引導,實現二維流場的可視化。本文結合物理方法模擬以及圖像處理技術,實現對視頻的水彩風格化渲染。下面將詳細介紹算法的基本思想和具體實現,以及采用GPU對本文提出的算法進行改進和優化。
本文采用Jos Stam[8]提出的Navier-Stokes方程作為流體動力學物理模型。不可壓縮流體的NS方程組主要由兩部分組成:一是動量方程;另一個是連續性方程[9]。形式化定義為:

其中??u=0。公式(1)右第一項稱作平流項;第二項,稱作壓力項,代表微觀上的不均勻壓力;第三項表示流體濃稠度的不均勻形成的動量擴散;第四項是外力施加到流體上所增加的加速度[10]。
外力項由外界對流體施加的力組成,形式化定義為:

平流項表示速度場沿著擴散方向傳輸自身流體粒子,形式化定義為:

對擴散項的求解轉化為對泊松方程的求解,形式化定義為:

可采用Gauss-Seidel法進行求解[10]。
經過外力、平流、擴散運算后得到一個有散度的速度場w3(x),通過投影算子將其改變為無散度的速度場w4(x)。為求解以上方程,本文通過Helmholtz-Hodge 分解得到流體運動的物理模擬計算方法。整個求解過程,按從左到右順序,首先是外力,平流,接著是擴散和投射,即:

具體實現代碼可參考文獻[8]。
由于采用傳統的半拉格朗日方法計算會引起數值耗散,同時二維紋理映射后,紋理坐標隨速度場進行遷移的過程中,隨著時間流逝,會出現紋理的拉伸和變形。為使二維紋理隨流場遷移映射的過程中盡量保持其結構特征不變,本文引入漩渦限制因子來增加紋理旋流的細節[11]。


圖1 基于圖像紋理映射的流場可視化效果圖

圖2 基于噪聲圖像紋理映射的流場可視化效果圖
光流是一種便捷的圖像運動顯示方法,通常定義為視頻圖像序列中圖像亮度模型的表觀運動[12]。光流算法一般分為稀疏光流算法和密集光流算法,其中密集光流場可用于像素級圖像的對準[13],雖然計算量較大,但效果通常比稀疏光流要好。

本文采用Farneback密集光流算法提取運動區域內的光流信息,并以光流場運動方向作為NS流體模型的輸入速度場,從而實現對二維流體紋理場的引導。

圖3 基于Farneback算法的光流場計算效果圖

圖4 基于光流場引導的二維流場可視化效果圖
本節將詳細介紹如何利用上述提出的二維流場可視化算法實現對視頻的水彩風格化渲染。本文提出的視頻水彩風格化渲染算法主要包含四個步驟:Step1:運用二維Perlin噪聲函數生成水彩紋理,作為流場的輸入紋理;Step2:運用NS方程以光流場為導向模擬二維流場的紋理傳輸遷移效果;Step3:運用Kuwahara算子進行圖像抽象化濾波;Step4:將水彩紋理圖與濾波圖進行融合。

圖5 2D Perlin生成水彩紋理效果圖
2.3.1 水彩紋理生成算法
由于水彩繪制過程中,其紙張紋理有一定的細微的隨機褶皺紋理。為模擬這一特性,本文采用Perlin噪聲函數來生成看起來較為自然的隨機雜點[3],并以此作為二維流場可視化算法的輸入紋理,通過光流導向,控制該紋理的變形,從而模擬視頻序列隨時間流逝時,水彩紋理的變化走向情況。如何利用二維Perlin 噪聲模擬水彩紙張紋理的褶皺感,主要方法可參考文獻[14]。
2.3.2 Kuwahara濾波算法
Kuwahara濾波將濾波核劃分為N組鄰域,算法分別計算各分區內像素的均值和方差,選擇最小方差對應的均值作為濾波結果。


實驗表明,Kuwahara濾波在平滑圖像的同時能夠保留圖像邊緣和角點,從而可抽象地模擬生成水彩暈染的變化效果。

圖6 Kuwahara濾波生成水彩暈染效果圖
2.3.3 紋理圖像融合算法
通過將本文提出的二維流場可視化技術計算得到的視頻水彩紋理圖與Kuwahara濾波生成的水彩暈染效果圖進行融合,即可得到具有水彩風格的視頻序列圖。紋理圖像顏色混合模型類似于Photoshop軟件提供的圖像疊加運算,其可以形式化定義為:

公式中A代表基色;B代表混合色;C代表圖層混合后的顏色值,稱為結果色。

圖7 紋理融合算法生成的水彩風格化效果圖
本文運用GPU在二維網格上求解NS方程進而實現實時的二維流場的模擬[11]。對二維流場紋理進行渲染的每一個時間步內,GPU對NS方程的每一個算子分別進行運算,前次的計算結果將作為下次計算的輸入,重復進行直到程序退出。GPU渲染流程圖如圖8所示。

圖8 GPU加速二維流場渲染流程圖
本文采用Visual C++語言及GLSL語言實現核心算法。本文提出了一個簡單新穎的光流導向的流場可視化算法及視頻水彩風格化技術,取得了較為良好的合成效果,但仍存在大量需要改進和優化的工作。主要改進方向是如何進一步解決二維紋理流場的拉伸與變形問題,從而實現保持紋理結構的流場可視化算法。