李亞琴 方立剛 廖黎莉,2 楊元峰
1(江蘇省現(xiàn)代企業(yè)信息化應用支撐軟件工程技術研發(fā)中心 江蘇 蘇州 215104)2(蘇州大學 江蘇 蘇州 215104)
隨著互聯(lián)網(wǎng)技術的飛速發(fā)展,數(shù)字影視傳播途徑愈發(fā)廣泛。視頻網(wǎng)站、互聯(lián)網(wǎng)電視、云存儲服務使數(shù)字影視傳播迅速,視頻的傳播從傳統(tǒng)媒體時代一對多地線性傳播模式,進化成為各種不同媒介面向不同對象地網(wǎng)狀傳播模式[1],與此同時數(shù)字影視的版權問題愈發(fā)突出[2]。
文獻[3]中提到了在數(shù)字多媒體產(chǎn)品的設計、制作、存儲、播放與傳播等環(huán)節(jié)中,一臺個人計算機設備就可以非法復制,并強調了數(shù)字水印在數(shù)字產(chǎn)品版權保護方面的有效意義。文獻[4]中設計并實現(xiàn)了一種基于數(shù)字水印技術的視頻安全追蹤系統(tǒng),系統(tǒng)包括兩個組成模塊,即水印嵌入模塊和水印檢出模塊。在嵌入模式上分為服務器端嵌入模式和用戶端嵌入模式。文獻[5]提出能量差分水印算法,將視頻幀信息進行DCT域變換,通過修改DCT變換后系數(shù)中代表細節(jié)信息的高頻系數(shù),在原始視頻幀信息數(shù)據(jù)中嵌入水印信息。文獻[6]提出了一種抗攻擊性強的基于時空特征的壓縮域數(shù)字視頻水印算法,由一個公共密鑰和一個私有密鑰組成框架,用于阻止自我共謀攻擊,將一個雙水印序列嵌入到視頻候選塊中。文獻[7]中提出一種基于改進置亂變換的非壓縮視頻圖像多重數(shù)字水印隱藏方法。文獻[8]提出了基于Android系統(tǒng)的視頻水印系統(tǒng),并提出基于空間域的雙偽隨機序列的水印算法。Lee 等[9]充分利用3D動畫的插值節(jié)點和幾何節(jié)點,實現(xiàn)了兩套獨立又同步的水印方案,使這種方案適用于脆弱水印和魯棒水印的場景。Tsai等[10]提出一種對3D網(wǎng)格模型某些節(jié)點的水印方案,這種水印方案有好的魯棒性。以上這些算法均是性能優(yōu)良的算法,不過都是針對視頻形式的文件,而不是針對輸出成視頻之前的動畫源文件形式。
基于以上分析,本文提出了一種應用于Maya三維動畫的數(shù)字水印方法,主要是應用于Maya的鏡頭參數(shù)中。首先收集一部三維動畫中所有的鏡頭參數(shù),包括鏡頭、視野角度、環(huán)境范圍遠距、近距等,記錄所有鏡頭參數(shù);其次將鏡頭參數(shù)形成一個矩陣,對矩陣進行Cholesky分解,對水印信息矩陣進行LU分解;再將分解水印信息得到的元素嵌入到分解鏡頭數(shù)據(jù)得到的下三角矩陣中;最后用新的鏡頭參數(shù)來約束鏡頭,形成含有水印信息的三維動畫。
第一步確定待嵌入水印的三維動畫,記為A。
第二步一部動畫中會有大量鏡頭的變換,在校動漫專業(yè)大學生制作的動畫作業(yè)中至少有幾十個鏡頭,動漫企業(yè)制作的熒幕播出的動畫會有幾百上千的鏡頭。每個鏡頭數(shù)據(jù)包括鏡頭、視野角度、環(huán)境范圍遠距、近距、平移x,y,z、旋轉x,y,z等。收集三維動畫A中的鏡頭數(shù)據(jù)記為矩陣X(若動畫中鏡頭數(shù)據(jù)龐大,收集主要鏡頭的數(shù)據(jù))。
第三步對矩陣X進行Cholesky分解,X=GGH。
G是一個正對角元素的下三角方陣,GH是G的厄米矩陣(復共軛)的轉置。
第四步將Cholesky分解得到的下三角矩陣分為若干個2×2的小方陣,記為:
第五步確定待嵌入的水印信息,水印信息須選擇可代表作者版權的有用信息,如作者姓名、身份證號、公司名稱、公司logo等。
第六步將水印信息轉換成矩陣,記為W。
第七步對水印信息矩陣W進行LU分解。[L,U]=LU(W)返回U中的上三角矩陣和L中的置換下三角矩陣,使W=L×U。返回值L是下三角矩陣和置換矩陣的乘積。
第八步將矩陣L嵌入到矩陣中,即將矩陣L的每個元素依次嵌入矩陣G的每個2×2方陣中,改變后的各方陣記為:
(2) 計算L中每個元素各位上的平均值,記為AVELj=average(Lj);
(3)i=1,j=1;
if(AVELj>AVEGi)
/*?代表異或運算,last代表各個元素的最后一位
/*p=1,2,3,4;
/*q=1,2,3,4;
}
i++;
j++;
第九步利用含有水印的G*和它的轉置矩陣G*H重構矩陣,記為X*。
第十步利用X*中的數(shù)據(jù)重新設置動畫中的鏡頭,即用新的鏡頭參數(shù)來設置動畫中鏡頭的屬性。至此,動畫中已經(jīng)成功嵌入了數(shù)字水印信息。嵌入位置和矩陣U作為嵌入水印的密鑰,妥善保存在作品所有者或第三方公共安全平臺上,供提取水印時使用。
當網(wǎng)絡上傳播的三維動畫的版權發(fā)生爭議時,作者可以利用提取算法從動畫中提取水印,以此證明對動畫的所有權。
提取算法基本上是嵌入算法的逆過程,旨在提取出動畫中嵌入的水印信息,以重構初始形態(tài)。
第一步確定待提取水印的三維動畫,記為A′。
第二步按照嵌入水印時的規(guī)則,收集三維動畫A′中的鏡頭數(shù)據(jù)記為矩陣X′。
第三步對矩陣X′進行Cholesky分解,X′=G′GH′。
第五步從矩陣G′中提取水印信息,即從矩陣G′的每個2×2方陣中提取水印信息,提取出的信息組成矩陣記為L′。
(2) 使用嵌入時的信息:
AVELj=average(Lj)
(3)i=1,j=1;
{
/*p=1,2,3,4;
/*q=1,2,3,4;
}
i++;
j++;
第六步利用LU逆變換,矩陣L′與上三角矩陣U重構矩陣,得到的矩陣記為W′,這也是提取出來的完整的水印矩陣。
第七步通過比對原始水印矩陣W和提取出的水印矩陣W′,判定動畫的所有權歸屬。
為了驗證算法的性能,選擇了大量的由Maya軟件設計制作的三維動畫短片做了實驗。選擇的短片中都設置了攝像機,因此都具有鏡頭數(shù)據(jù),不同時間長度的動畫短片,鏡頭數(shù)據(jù)的數(shù)量也不盡相同。本文實驗全部在MATLAB 2011b和Maya2014中完成。
下面選擇一例具體說明,選擇的三維動畫短片《感同身受》,動畫時長6分08秒。提取動畫中的鏡頭數(shù)據(jù)組成512×512的矩陣。
圖1是仿真實驗的GUI界面,然后在callback中編寫代碼完成實驗。
圖1 仿真實驗的MATLAB界面
算法選擇動畫中的鏡頭數(shù)據(jù)作為水印嵌入載體,每部動畫中的鏡頭在整個動畫中會根據(jù)故事情節(jié)需要而變換,而且每一個鏡頭都具有多個參數(shù)[11],所以嵌入載體是足夠大的。譬如《感同身受》中,共有60號鏡頭,鏡頭常見的有平移、旋轉、縮放變化,另外包括垂直膠片光圈、水平膠片光圈、視角、焦距、攝影機本身比例、遠剪裁平面、近剪裁平面。膠片又具有膠片縱橫比、鏡頭擠壓比、膠片適配偏移、膠片偏移等參數(shù)[12]。由此可見鏡頭數(shù)據(jù)是非常龐大的。水印信息可以選擇有代表意義的信息,本文水印信息選擇圖2所示的圖片,是88×101的二值圖像。文獻[7]中的水印圖像僅為35×35的二值圖像。文獻[13]中實驗選取的文印圖像大小分別為32×32、41×41、43×43、53×53。
圖2 水印信息圖片
本文算法選擇的嵌入載體是鏡頭數(shù)據(jù),將水印嵌入到鏡頭的某些參數(shù)中,動畫中的攝影機本身就是不可渲染的,所以動畫被輸出成視頻格式后,用戶觀看時,肉眼無法察覺水印的存在,故算法具有很好的隱蔽性。本文算法的峰值信噪比PSNR是42.869 2 dB;文獻[5]中算法的PSNR值均在38.19~39.72 dB;文獻[8]中,LSB算法的PSNR是40.166 9 dB;DCT算法的PSNR是40.637 5 dB;DWT算法的PSNR是39.226 8 dB;基于Android系統(tǒng)視頻水印算法的PSNR是41.187 1 dB??梢姡疚乃惴ㄝ^高的PSNR值較好地保證了三維動畫的視覺效果。
1) 攻擊一:修改鏡頭平移、旋轉、縮放數(shù)據(jù)。三維動畫中,鏡頭最常見的變換有平移、旋轉、縮放,以跟上角色的位置和表情變化,或者變換全景、近景、中景、特寫等鏡頭[14]。所以,鏡頭有關平移、旋轉、縮放的數(shù)據(jù)是最多的。篡改三維動畫時,在這方面做修改的概率也是最大的。表1是修改鏡頭數(shù)據(jù)的數(shù)量和提取出水印與原始水印的相關系數(shù)。
表1 修改鏡頭數(shù)據(jù)的數(shù)量和提取出水印與原始水印的相關系數(shù)
2) 攻擊二:修改垂直膠片光圈、水平膠片光圈數(shù)據(jù)。垂直膠片光圈和水平膠片光圈的數(shù)據(jù)量稍小,表2是修改垂直膠片光圈和水平膠片光圈的數(shù)量及提取出水印與原始水印的相關系數(shù)。
表2 修改垂直膠片光圈和水平膠片光圈的數(shù)量及提取出水印與原始水印的相關系數(shù)
3) 攻擊三:修改景深參數(shù)。景深,是指在相機鏡頭或者人眼視覺系統(tǒng)前,物體能夠獲得清晰成像所測定的被攝物體前后距離范圍[15]。攝影機的景深參數(shù)包括聚焦距離、F制光圈、聚焦區(qū)域比例。三維動畫中,根據(jù)需要會凸顯某個角色或某個重要物件,所以會設置景深效果。一部動畫中的景深鏡頭數(shù)量有限,故景深數(shù)據(jù)的數(shù)量不會太大,實驗中先后修改了1、3、5、7處景深數(shù)據(jù)。表3是提取出的水印信息與原始水印信息的相關系數(shù)。
表3 修改景深數(shù)據(jù)的數(shù)量及提取出水印與原始水印的相關系數(shù)
4) 攻擊四:修改環(huán)境效果數(shù)據(jù)。環(huán)境效果、特殊效果、正交視圖,這些參數(shù)都是可變可修改的。由于環(huán)境效果能很好地烘托故事情節(jié),所以,不能過多地修改環(huán)境效果數(shù)據(jù),否則會影響動畫的觀賞效果。實驗中,最多修改了5處環(huán)境效果數(shù)據(jù),表4是提取出的水印信息與原始水印信息的相關系數(shù)。
表4 修改環(huán)境效果數(shù)據(jù)的數(shù)量及提取出水印與原始水印的相關系數(shù)
5) 攻擊五:刪除鏡頭。另一種極端攻擊是刪除鏡頭,刪除鏡頭會導致此鏡頭的所有參數(shù)被連帶刪除,但刪除鏡頭會明顯地影響動畫觀看效果,所以實驗中刪除了2個鏡頭。表5是提取出的水印信息與原始水印信息的相關系數(shù)。
表5 刪除鏡頭的數(shù)量及提取出水印與原始水印的相關系數(shù)
本文算法應用于三維動畫中,是數(shù)字水印技術一個新的應用領域,故攻擊類型也較新穎,文獻[16-17]只做了常見的高斯噪聲、椒鹽噪聲、剪切1/16、JPEG壓縮攻擊。
本文提出了一種可以應用于由Maya軟件制作的三維動畫的水印算法,水印信息的嵌入載體是動畫中的鏡頭數(shù)據(jù)。由于在制作三維動畫時,絕大多數(shù)情況下都會設置攝影機,即絕大多數(shù)三維動畫中都擁有鏡頭數(shù)據(jù),所以,本文算法應用范圍較廣。算法不僅可以應用到Maya制作的三維動畫中,還可以應用到3ds max軟件制作的三維動畫中,具有較好的的擴展性。算法的嵌入量、隱蔽性、抗攻擊性都能達到批量使用的規(guī)格。目前,網(wǎng)絡帶給人們的便利不言而喻,然而,惡意從網(wǎng)絡上下載拷貝資源的現(xiàn)象也比比皆是,每年畢業(yè)設計答辯時,都會出現(xiàn)從網(wǎng)絡上下載的作品作為畢業(yè)設計作品,而非出自本人之手。這種現(xiàn)象有悖于公平公正的教育理念,也不利于良好學風的建設,所以必須加強三維動畫短片的版權保護。下一步,為了減少密鑰被攻擊竊取的風險,將在水印盲檢測方面做進一步研究。