李亞琴 方立剛 廖黎莉,2 楊元峰
1(江蘇省現代企業信息化應用支撐軟件工程技術研發中心 江蘇 蘇州 215104)2(蘇州大學 江蘇 蘇州 215104)
隨著網絡技術的不斷發展,信息傳播、信息共享越來越便利,除了使用電腦外,手機端處理文字、圖片、音樂和視頻等也很方便。但是,微信朋友圈、QQ空間、微博里的圖片和視頻可以任意下載轉發,這樣的便利性為版權保護帶來了史無前例的壓力。三維動畫因其高仿真性和大信息量,應用越來越廣泛,所以三維動畫的版權保護也應受到高度重視。
數字水印技術在版權保護方面的功能強大,已經受到人們的廣泛關注,其在文字、圖片、音頻、視頻等方面的應用已相當成熟[1]。同樣,數字水印技術也可應用到三維動畫領域,利用優秀的算法來保護三維動畫的版權。
迄今為止,關于數字水印技術用于保護動畫版權已有若干研究。文獻[2]選取動畫的關鍵幀參數,利用DCT變換、輪廓波變換來嵌入水印,并輔助置亂技術提高算法的安全性。文獻[3]從理論角度描述了動漫作品中數字水印的添加與應用。文獻[4]提出一種數字水印方案,旨在保護SWF矢量動畫的版權,水印的攻擊類型比較獨特。文獻[5]提出了一種應用于三維動畫變換域的算法,采用了離散小波變換和離散余弦變換。文獻[6]提出一種針對二維Flash動畫的數字水印算法,將灰度圖像壓縮置亂加密后嵌入到原始SWF格式的動畫中。文獻[7]將二值水印圖像置亂后按照行列順序嵌入到二維SWF格式動畫的圖形文件中。文獻[8]利用MATLAB平臺,將置亂后的水印圖像嵌入二維swf文件的結束標簽之后,不影響動畫的正常播放。文獻[9]提出的水印方案提取時不需要原始水印信息或密鑰,以修改LSB的方法將水印編碼后嵌入到二維動畫的嵌入點序列中。文獻[10]提出了一種針對三維動畫材質參數的數字水印,將動畫中的材質參數形成一個矩陣,利用嵌入算法將水印信息嵌入到材質參數中,算法隱蔽性非常好,且因為材質參數數量巨大,故算法嵌入量較大。
通過對現有技術和算法的分析,本文提出了一種用于保護三維動畫版權的數字水印算法,將數字水印信息嵌入到三維動畫中的骨骼數據中,由于骨骼創建后是在角色身體內部的,所以算法具有很好的隱蔽性。
在三維動畫中,按照動畫情節需要,角色欲通過表情和肢體動作來表現動畫主題,渲染動畫氣氛,就要用到骨骼技術來制作動畫。為角色添加骨骼,調整骨骼的尺寸、角度和位置,并將骨骼綁定到角色。骨骼涉及的參數有高度、寬度、錐化度、鰭的大小、始端錐化、末端錐化等。一部三維動畫中為角色添加若干段骨骼,每段骨骼都有自己的參數,在動畫中,通過骨骼旋轉和位置變化,來表現角色的動作。
3D MAX中可以制作多種類型的動畫,其中一種是骨骼動畫,為角色創建骨骼,根據角色的特點和動作需要,修改骨骼的參數,并通過蒙皮把骨骼與角色結合起來,通過動態地調整骨骼動作,從而完成動畫效果。
第一步 采集一部三維動畫中的全部骨骼數據(如果骨骼數據量太大,采集部分有效的主要骨骼數據即可),組成一個矩陣,記為A。
第二步 對矩陣A進行Householder變換,得到矩陣H。
第三步 對矩陣H進行Schur分解,得到n階酉矩陣U和上三角矩陣T。
第四步 選取有效的水印信息,建議選取能代表作者身份的有意義的信息作為水印,將水印信息轉化為矩陣,記為W=[w1,w2,…,wn]。
第五步 將水印矩陣W=[w1,w2,…,wn]嵌入到矩陣T的n個特征值λ1,λ2,…,λn中。
嵌入過程:
(1) 通過算法找出λi(i=1,2,…,n)中的最小位,記為λmin;
int arr[n];
int i,min;
min=arr[0];
for(i=0;i { if (arr[i] min=arr[i]; } (2) 通過異或“⊕”運算,比較wi與λi min是否相等,若不相等,用wi代替λi min; if(wi!=λi min) λi min=wi; 依次執行上述嵌入步驟,將水印矩陣W=[w1,w2,…,wn]嵌入到矩陣T的n個特征值λ1,λ2,…,λn中,修改后的T記為T*。 第六步 利用矩陣U和修改后的矩陣T*,重組矩陣A,重組后得到的矩陣記為A*,A*=UT*U-1,A*是嵌入水印的骨骼數據矩陣。 第七步 利用A*中新的數據來修改動畫中的骨骼參數,從而得到嵌入水印的動畫。 當三維動畫的版權發生糾紛時,可以在目標動畫中提取水印,提取步驟如下: 第一步 按照嵌入算法中的順序和規則,收集動畫中的骨骼數據,組成矩陣B。 比較步驟: (3) 執行結束后,W*中存儲的即是提取出的水印信息。 intw*[50],λ[50],λ*[50],i,j; for (i=0;i<50;i++) for (j=0;j<50;j++) {if (λ[i][j]!=λ*[i][j]) w*[i]=λ*[i][j]} 第四步 將矩陣格式的W*還原成原始水印信息的格式,便于與原始水印比較。 為了驗證算法的性能,本文做了大量的實驗,在此列舉一例。實驗選擇一部恐龍大戰毒甲蟲的三維動畫短片,動畫共有800幀。動畫中有恐龍和毒甲蟲兩個角色,共有174段骨骼,每段骨骼有自己的參數,收集所有有效骨骼參數組成一個64×64的二維矩陣。實驗在3DS MAX 2014、MATLAB 2011b和Visual C++ 6.0環境下完成。 按照本文提出的嵌入算法,將作者的18位二代身份證號碼嵌入動畫中,隨后對含有水印信息的動畫進行攻擊,以驗證算法的可靠性、有效性等性能。圖1是在MATLAB中設計的實驗的GUI界面,然后在相應組件和按鈕的callback中編寫代碼完成實驗,得到實驗結果。 圖1 實驗的GUI界面 水印嵌入后,由于骨骼是隱藏在角色內部的,所以肉眼看不出區別。為了通過數據來定量地比較嵌入水印前后視頻的變化,將3DS MAX動畫的所有幀渲染成連續的靜態圖片,原始動畫和嵌入水印的動畫各有225幀,以渲染連續靜幀圖片的形式渲染后,兩部動畫都各生成225幅連續的圖片,每一幅圖片對應一幀畫面。將對應位置的兩幅圖片分別求峰值信噪比,最后將225個峰值信噪比的數據平均,得出本文算法的峰值信噪比PSNR為44.925 4。結果證明本文算法的水印隱蔽性較好,不會影響動畫的觀賞效果。本文PSNR值與其他文獻的比較結果如表1所示。 表1 本文方法PSNR值與其他文獻方法的比較 原始骨骼數據矩陣A和嵌入水印信息后的骨骼數據矩陣A*的相關系數為0.996 2,再次證明本文算法具有很好的水印透明性。 圖2為原始動畫中第0幀、第60幀、第120幀、第180幀的場景。 (a) 第0幀 (b) 第60幀 (c) 第120幀 (d) 第180幀圖2 原始圖像 圖3是水印動畫中第0幀、第60幀、第120幀、第180幀的場景。 (a) 第0幀 (b) 第60幀 (c) 第120幀 (d) 第180幀圖3 水印動畫 由圖2、圖3可以看出,水印信息嵌入在角色的骨骼中,骨骼又被包裹在角色的身體內部,所以肉眼無法察覺水印,水印的隱蔽性非常好。三維動畫在嵌入水印后,幾乎不影響觀看效果。 對含有水印信息的三維動畫實施攻擊,攻擊類型選擇的是針對三維動畫特點的攻擊。 (1) 增減骨骼數量。本動畫中共有174段骨骼,實驗中,通過移除骨骼、連接骨骼的方式將骨骼數量最低減少到170,骨骼參數組成63×63的矩陣,從中提取水印,提取水印與原始水印的相關系數為0.945 6。由于過多減少骨骼會影響角色的動作,破壞動畫的效果,所以攻擊者不能大幅度地減少骨骼,故此相關系數幾乎是最差情況了。同樣,通過創建骨骼、細化骨骼的方式將骨骼數量最高增加到178,骨骼參數組成65×65的矩陣,從中提取水印,提取水印與原始水印的相關系數為0.953 9。表2為增減骨骼數量,提取水印與原始水印的相關系數。 表2 增減骨骼數量,提取水印與原始水印的相關系數 (2) 改變骨骼參數。實驗中,通過調整工具修改部分骨骼的參數。由于骨骼參數調整過多,在動畫中會出現露骨等穿幫鏡頭,所以攻擊者不能大肆改變骨骼數據,本次最多修改了動畫中8段骨骼的部分數據,提取水印與原始水印的相關系數為0.902 4。表3為修改骨骼參數的數量,提取水印與原始水印的相關系數。 表3 修改骨骼參數的數量,提取水印與原始水印的相關系數 續表3 (3) 文件壓縮。使用格式工廠、貍窩視頻轉換器、萬能視頻格式轉換器等軟件對動畫進行壓縮或者文件格式轉換。為了不影響動畫的視覺效果,大多的壓縮算法主要選擇動畫背景和其他肉眼難區別的非重要元素[9],而對于主要的運動元素不會做過多處理,本文算法將運動物體的骨骼參數作為水印嵌入載體,所以抗壓縮能力較強。并且算法是將水印嵌入到角色的骨骼數據中,輸出動畫文件被壓縮時對源文件中的角色骨骼不會造成影響。 (4) 修改動畫播放時間。同樣的動畫情節,增加或減少動畫的播放時間僅會導致動畫播放速度加快或降低,所以對水印影響較小。表4為增加或減少動畫的播放時間,提取水印與原始水印的相關系數。 表4 增加或減少動畫的播放時間,提取水印與原始水印的相關系數 (5) 二次水印。二次水印即在同一數據載體中,在已經嵌入水印的基礎上,再次加入另外的水印信息。二次水印攻擊會使水印信息之間互相影響,導致無法正常檢測出其中一個或多個水印。 在動畫中,利用嵌入算法再次嵌入一個不同的身份證號碼,然后利用提取算法提取出2個水印,通過比較,提取水印與原始水印的相關系數為0.869 4。 3D電影是目前喜聞樂見的一種電影形式,三維動畫的應用范圍也隨之越來越廣。需要一種有效的版權保護技術來維護三維動畫的知識產權,保護動漫作品的版權,維護動漫公司的經濟利益,形成一種良好的原創氛圍。本文提出一種利用三維動畫骨骼數據的數字水印算法,把骨骼數據作為嵌入載體,也可以選擇骨骼權重參數等,具有很好的延伸性。但算法性能如魯棒性等方面還需改進,下一步將把算法應用到動漫專業學生作品中做進一步深入研究。3 水印提取算法




4 算法性能分析










5 結 語