張國(guó)有,王江帆,李 婧
(太原科技大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,太原 030024)
隨著多媒體技術(shù)和3D 打印技術(shù)的快速發(fā)展,三維模型[1]已廣泛應(yīng)用于醫(yī)學(xué)影像、工業(yè)制造和游戲等領(lǐng)域. 此外,在文物保護(hù)、化學(xué)和生物等領(lǐng)域,三維模型的應(yīng)用也越來越普遍. 它成為繼圖像、視頻、音頻3 大主流數(shù)據(jù)類型之后的數(shù)據(jù)類型. 但在使用和傳播這些數(shù)字產(chǎn)品的同時(shí)盜版和侵權(quán)等問題也隨之而來,使得如何安全有效的保護(hù)數(shù)字產(chǎn)品的版權(quán)成為學(xué)者研究的一個(gè)重點(diǎn)問題.
數(shù)字水印作為信息隱藏的一個(gè)重要分支,在數(shù)字產(chǎn)品的版權(quán)保護(hù)方面發(fā)揮了重要作用. 1997 年,在ACM 國(guó)際會(huì)議上Ohbuchi 等[2]首次提出將數(shù)字水印技術(shù)應(yīng)用到三維模型,為三維數(shù)字產(chǎn)品的版權(quán)保護(hù)提供了新思路. 此后,越來越多的學(xué)者開始研究三維網(wǎng)格模型數(shù)字水印技術(shù).
根據(jù)水印算法是否修改原始模型的數(shù)據(jù),可將其分為嵌入式水印算法[3–7]和零水印算法[8–10]. 大部分水印算法為嵌入式水印算法,它通過對(duì)模型進(jìn)行細(xì)微的修改來嵌入水印信息. Cho 等[3]提出了一種改變所有頂點(diǎn)與質(zhì)心之間歐氏距離分布的統(tǒng)計(jì)水印方法. 該方法能夠很好地抵抗相似變換和頂點(diǎn)重排序這種無失真的攻擊. 之后,Bors 等[11]對(duì)基于統(tǒng)計(jì)的水印進(jìn)行了擴(kuò)展,通過Levenberg-Marquardt 優(yōu)化方案進(jìn)行最優(yōu)保存,使目標(biāo)表面畸變最小化. 該方案對(duì)常見的網(wǎng)格攻擊具有很強(qiáng)的魯棒性,同時(shí)保證了曲面的最小失真.為了增強(qiáng)魯棒性,Liu 等[12]提出了一種對(duì)三角網(wǎng)格模型進(jìn)行多分辨率曲面自適應(yīng)參數(shù)化的魯棒水印算法.Liu 等將模型的所有頂點(diǎn)分為兩組. 一個(gè)是粗糙層,它可以建立一個(gè)不變量空間. 二是作為水印嵌入特征的精細(xì)層次. 該算法具有很強(qiáng)的隱蔽性,對(duì)常見攻擊具有很強(qiáng)的魯棒性. 但這些算法對(duì)裁剪攻擊的魯棒性相對(duì)較弱,而且嵌入式水印算法不可避免地要修改原始模型信息,無法應(yīng)用到對(duì)數(shù)據(jù)精度要求較高的模型;并且嵌入式水印算法嵌入水印的強(qiáng)度難以控制,若嵌入強(qiáng)度過低,算法的魯棒性較差,嵌入強(qiáng)度過高,又會(huì)影響模型的視覺效果. 所以,如何平衡水印的透明性與魯棒性之間的矛盾是嵌入式水印算法研究的一個(gè)難點(diǎn)問題.
為解決上述問題,溫泉等[13]提出了零水印算法,零水印算法不需要對(duì)原始模型進(jìn)行修改,而是利用模型本身特征構(gòu)造水印信息,并將水印信息在知識(shí)產(chǎn)權(quán)(intellectual property rights,IPR)信息數(shù)據(jù)庫(kù)中注冊(cè); 當(dāng)需要對(duì)版權(quán)進(jìn)行驗(yàn)證時(shí),再利用零水印算法構(gòu)造水印信息,并與IPR 數(shù)據(jù)庫(kù)中的水印信息進(jìn)行對(duì)比,以此驗(yàn)證模型所有者. 零水印算法并沒有將信息嵌入到模型中,從而避免了透明性和魯棒性之間的矛盾.
目前,在圖像方面關(guān)于零水印算法的研究[14,15]比較多,由于三維模型數(shù)據(jù)的不規(guī)則性,并且表示方法有多種,使得構(gòu)造穩(wěn)定的水印存在一定困難,三維模型零水印算法較少. 徐濤等[16]利用網(wǎng)格空域特征的提取和變換域二次能量集中構(gòu)造水印信息. 王新宇[17]提出一種三維網(wǎng)格模型空域零水印算法,該算法利用模型頂點(diǎn)范數(shù)以及該頂點(diǎn)的鄰域頂點(diǎn)范數(shù)構(gòu)造水印信息. 這兩種算法對(duì)剪切攻擊的抵抗能力都比較弱. 為了使算法能夠在抵抗旋轉(zhuǎn)、平移、縮放等常見攻擊的同時(shí)也能夠抵抗網(wǎng)格簡(jiǎn)化和剪切攻擊,本文提出一種基于矢量長(zhǎng)度比的零水印算法.
由于零水印算法不改變?cè)寄P托畔?而是利用模型自身屬性造水印信息,構(gòu)造信息的魯棒性直接影響算法的魯棒性,因此,構(gòu)造魯棒的特征對(duì)零水印算法至關(guān)重要[18]. 頂點(diǎn)范數(shù)是三維模型的一種全局特征,它能夠反映模型的整體形狀. 一般對(duì)模型進(jìn)行攻擊的時(shí)候不會(huì)改變模型的全局特征,否則模型的視覺效果就破壞,從而失去使用價(jià)值. 但僅利用這一特征構(gòu)造水印,在水印檢測(cè)階段,需要對(duì)模型進(jìn)行重定位和重采樣操作,否則就無法提取水印,重定位是為了使受到幾何攻擊的模型恢復(fù)到原始位置,重采樣是為了使拓?fù)浣Y(jié)構(gòu)發(fā)生改變的模型恢復(fù)原樣. 將頂點(diǎn)范數(shù)和頂點(diǎn)領(lǐng)域以及比例相結(jié)合,就可以避免對(duì)模型進(jìn)行重定位和重采樣. 若直接選擇模型質(zhì)心作為構(gòu)造水印的基元,算法容易受到剪切攻擊的影響,為了抵抗剪切攻擊,可以對(duì)模型分塊[19],然后用塊質(zhì)心代替模型質(zhì)心,接著計(jì)算均值,弱化受攻擊后模型頂點(diǎn)改變帶來的影響.
三維網(wǎng)格模型由頂點(diǎn)集合和這些頂點(diǎn)之間的連接組成. 為了避免頂點(diǎn)均勻縮放、平移、旋轉(zhuǎn)等相似變換的影響,可以對(duì)三維模型進(jìn)行預(yù)處理,即將頂點(diǎn)的笛卡爾坐標(biāo)轉(zhuǎn)換為球坐標(biāo),然后依據(jù)需要構(gòu)造的水印長(zhǎng)度以及經(jīng)度分量對(duì)頂點(diǎn)進(jìn)行分塊,對(duì)分塊中的每個(gè)頂點(diǎn)計(jì)算出該頂點(diǎn)到塊質(zhì)心的距離和鄰域頂點(diǎn)到塊質(zhì)心的平均距離,接著計(jì)算這兩個(gè)長(zhǎng)度之比,利用長(zhǎng)度之比和密鑰構(gòu)造水印信息. 水印構(gòu)造的流程如圖1所示.
圖1 水印構(gòu)造流程圖
三維網(wǎng)格模型可以表示為M={V,E},其中,V={Vi∈R3,02.1 模型預(yù)處理
為了更方便地對(duì)三維模型進(jìn)行零水印的構(gòu)造,需要對(duì)三維模型進(jìn)行預(yù)處理,將三維模型的直角坐標(biāo)系轉(zhuǎn)換為球面坐標(biāo)系,并根據(jù)經(jīng)度分量對(duì)模型分塊. 預(yù)處理步驟如下.
(1)為了實(shí)現(xiàn)三維模型坐標(biāo)轉(zhuǎn)換,需要計(jì)算三維模型質(zhì)心坐標(biāo),由于三維模型受到攻擊后可能造成模型的頂點(diǎn)分布不均勻,使模型質(zhì)心改變,以三角形面積為權(quán)重的方法可以弱化這種影響,獲得較穩(wěn)健的質(zhì)心. 因此,本文算法采用基于面積矩的方法計(jì)算三維模型的質(zhì)心,計(jì)算公式如式(1).
其中,Vc={xc,yc,zc}表示三維模型質(zhì)心坐標(biāo).A(Vi)表示Vi一環(huán)鄰域內(nèi)三角形的面積.
(2)平移模型即將三維模型質(zhì)心與直角坐標(biāo)系原點(diǎn)重合,計(jì)算公式如式(2).
(3)接著轉(zhuǎn)換為球面坐標(biāo)系,計(jì)算公式如式(3).
其中,(ρi,θi,?i)表示頂點(diǎn)Vi的球面坐標(biāo),ρi∈R,θi∈[0,2π],?i∈[0,π].
(4)利用模型現(xiàn)有的條件經(jīng)度分量對(duì)模型進(jìn)行分塊. 根據(jù)經(jīng)度坐標(biāo)分量將模型等分為塊,然后根據(jù)θ的取值將模型的頂點(diǎn)進(jìn)行分塊,建立頂點(diǎn)與θ之間的映射關(guān)系. 第i個(gè)頂點(diǎn)分塊的表示如式(4)所示.
其中,θi,j表示頂點(diǎn)Vi,j的球面坐標(biāo)經(jīng)度分量,Nθ,i表示頂點(diǎn)分區(qū)Bθ,i中的頂點(diǎn)數(shù)目.
(5)計(jì)算每個(gè)分塊中的質(zhì)心Vc1,計(jì)算方法如式(1).
零水印的構(gòu)造過程如下.
(1)對(duì)分塊中的每個(gè)頂點(diǎn)進(jìn)行以下操作.
1)計(jì)算每個(gè)頂點(diǎn)Vi與塊質(zhì)心Vc1之間的長(zhǎng)度Dcl.
2)計(jì)算Vi一環(huán)鄰域中的所有頂點(diǎn)與塊質(zhì)心之間的長(zhǎng)度并求均值
3)計(jì)算這兩個(gè)長(zhǎng)度的比值Qi,計(jì)算公式如式(5).
(3)構(gòu)建頂點(diǎn)的狀態(tài)序列Si={S0,S1,···,SN?1},其中頂點(diǎn)序列如式(7).
(4)統(tǒng)計(jì)每個(gè)分塊中0 和1 的數(shù)目,若1 的個(gè)數(shù)大于0 的個(gè)數(shù),則本塊構(gòu)造的水印為1,否則為0,最后得出水印序列Si.
(5)將版權(quán)信息轉(zhuǎn)換成與構(gòu)造的水印長(zhǎng)度相同的密鑰L={L0,L1,···,LN?1}.
(6)將密鑰與生成的水印序列進(jìn)行異或,按式(8)生成最終的水印序列Wi={W0,W1,···,WN?1}.
(7)將生成的零水印信息和密鑰交給知識(shí)產(chǎn)權(quán)信息數(shù)據(jù)庫(kù)IPR 進(jìn)行保存,當(dāng)發(fā)生版權(quán)糾紛時(shí)根據(jù)數(shù)據(jù)庫(kù)中的水印信息和密鑰就可以確定模型的所有者.
當(dāng)無法確定三維模型的版權(quán)所有者時(shí),就需要用零水印檢測(cè)算法對(duì)模型進(jìn)行版權(quán)驗(yàn)證. 零水印是一種特殊的盲水印,檢測(cè)時(shí)不需要原始模型的參與. 它的檢測(cè)過程與構(gòu)造過程相同,結(jié)合密鑰,重復(fù)水印的構(gòu)造過程,最終得到水印序列Wd,然后將Wd與數(shù)據(jù)庫(kù)中的水印序列W進(jìn)行比較,判定模型的版權(quán)歸屬.
在使用模型的時(shí)候可能對(duì)模型進(jìn)行有意或無意的操作,從而使模型發(fā)生改變,使構(gòu)造出的水印信息與原始水印信息不一致,難以判斷水印是否存在,因此為了評(píng)價(jià)算法的魯棒性,需要一個(gè)衡量指標(biāo),即相關(guān)性系數(shù)Corr,來判斷待檢測(cè)水印與原始水印之間的相關(guān)性. 計(jì)算方法如式(9)所示.
其中,wdi為待檢測(cè)模型的第i位水印,為待檢測(cè)水印的平均值,woi為原始水印的第i位水印,為原始水印的平均值,N為水印長(zhǎng)度.Corr值越大說明水印越相似. 一般在驗(yàn)證版權(quán)使會(huì)給定一個(gè)閾值,本文參考文獻(xiàn)[12] 的方法將閾值設(shè)為0.5,若相關(guān)性系數(shù)大于0.5 就說明受到了侵權(quán),否則認(rèn)為待檢測(cè)模型中沒有原始水印信息.
本文算法是使用Visual Studio 2013 開發(fā)平臺(tái)以及OpenGL 庫(kù)來實(shí)現(xiàn)的. 選取了bunny、dragon、rabbit、venus 這4 個(gè)具有代表性的模型進(jìn)行相關(guān)實(shí)驗(yàn). 模型的數(shù)據(jù)信息如表1 所示,在實(shí)驗(yàn)中,水印長(zhǎng)度W=64.
表1 三維模型數(shù)據(jù)信息
為了驗(yàn)證零水印算法的魯棒性,本文使用LIRIS實(shí)驗(yàn)室提供的攻擊軟件和MeshLab 軟件對(duì)三維模型分別進(jìn)行相似變換、隨機(jī)噪聲、平滑攻擊、網(wǎng)格簡(jiǎn)化等多種類型的攻擊,對(duì)攻擊后的模型重新構(gòu)造水印序列,然后與原始模型水印序列進(jìn)行比較,通過計(jì)算相關(guān)性系數(shù)來衡量算法的魯棒性,相關(guān)性系數(shù)的計(jì)算如式(9)所示. 圖2 為原始三維模型.
圖2 原始模型
(1)相似變換
因?yàn)楸疚氖褂玫氖侨S模型頂點(diǎn)的矢量長(zhǎng)度之比這一幾何變量,它不受平移,旋轉(zhuǎn)和均勻縮放的影響,而且在構(gòu)造水印之前已經(jīng)對(duì)模型進(jìn)行了預(yù)處理,所以能夠很好地抵抗相似變換的攻擊,即在受到這類攻擊后的模型構(gòu)造出來的水印與原始水印完全相同,實(shí)驗(yàn)結(jié)果如表2 所示.
表2 相似變換的相關(guān)系數(shù)結(jié)果
(2)平滑攻擊
平滑攻擊是對(duì)模型的頂點(diǎn)進(jìn)行輕微擾動(dòng),使模型表面變光滑,它會(huì)輕微改變模型質(zhì)心以及模型到塊質(zhì)心的距離,導(dǎo)致水印錯(cuò)誤,但該攻擊不會(huì)改變模型的整體形狀,本文選擇的矢量長(zhǎng)度比能夠反應(yīng)模型整體形狀,因此對(duì)該類攻擊具有較高的容忍性,并且當(dāng)該類攻擊造成模型頂點(diǎn)發(fā)生劇烈變化,構(gòu)造的水印嚴(yán)重錯(cuò)誤時(shí),模型必然已失去使用價(jià)值,無須再對(duì)模型進(jìn)行保護(hù).分別對(duì)模型平滑迭代10 次、20 次和30 次,部分攻擊后的venus 模型如圖3 所示,實(shí)驗(yàn)結(jié)果如表3 所示,實(shí)驗(yàn)表明,攻擊后的模型構(gòu)造出的水印信息仍與原始水印信息具有較高的相關(guān)性,即水印算法對(duì)平滑攻擊具有魯棒性.
圖3 平滑攻擊后的venus 模型
表3 平滑攻擊的相關(guān)系數(shù)結(jié)果
(3)隨機(jī)噪聲
針對(duì)噪聲攻擊,分別對(duì)三維模型的每個(gè)頂點(diǎn)添加一個(gè)0.05%、0.1%、0.2%的隨機(jī)噪聲,圖4 顯示的是不同強(qiáng)度噪聲攻擊后的bunny 模型,噪聲攻擊測(cè)試的實(shí)驗(yàn)結(jié)果如表4 所示. 噪聲攻擊對(duì)三維模型影響比較大,容易造成模型表面失真,從而使模型的視覺效果變差. 它與平滑攻擊類似都屬于信號(hào)處理攻擊,所以選取矢量長(zhǎng)度比這一特征也能夠抵抗該類攻擊. 實(shí)驗(yàn)結(jié)果顯示,當(dāng)噪聲攻擊達(dá)到0.2%時(shí),本文的算法對(duì)噪聲攻擊具有魯棒性.
圖4 噪聲攻擊后的模型
表4 噪聲攻擊的相關(guān)系數(shù)結(jié)果
(4)簡(jiǎn)化攻擊
簡(jiǎn)化攻擊是在保持模型整體形狀的前提下,減少模型點(diǎn)、線、面的個(gè)數(shù),這種減少是近乎等比例的減少,本文選擇的矢量長(zhǎng)度的向量比,是模型的全局幾何特征,能夠很好地抵抗簡(jiǎn)化攻擊,并且在對(duì)模型進(jìn)行預(yù)處理時(shí)使用面積矩計(jì)算模型的質(zhì)心,能夠弱化簡(jiǎn)化攻擊后模型頂點(diǎn)分布不均帶來的影響,進(jìn)而加強(qiáng)對(duì)抗簡(jiǎn)化攻擊的能力. 分別將模型的頂點(diǎn)數(shù)目簡(jiǎn)化30%、50%、70%,簡(jiǎn)化后的部分dragon 模型如圖5 所示,實(shí)驗(yàn)結(jié)果如表5 所示,實(shí)驗(yàn)表明,隨著模型簡(jiǎn)化率的增高,受攻擊后的模型構(gòu)造出的水印信息與原始水印信息仍然具有較高的相關(guān)性,即使簡(jiǎn)化率高達(dá)80%,本算法仍具有較好的魯棒性.
圖5 簡(jiǎn)化攻擊后的dragon 模型
表5 簡(jiǎn)化攻擊的相關(guān)系數(shù)結(jié)果
(5)剪切攻擊
剪切攻擊是將模型的部分點(diǎn)和面的信息切除,從而使模型的整體形狀改變,丟失的是局部信息,并且隨著剪切比例的升高,模型的質(zhì)心會(huì)發(fā)生偏移,使得對(duì)模型質(zhì)心依賴較大的算法難以提取出正確的水印信息.分別選取三維模型的3 個(gè)不同位置對(duì)三維模型進(jìn)行10%、20%、30%的剪切,剪切后的部分bunny 模型如圖6 所示,實(shí)驗(yàn)結(jié)果如表6 所示. 本文算法選取分塊后的塊質(zhì)心并取均值,能夠減小對(duì)模型質(zhì)心的依賴,從而較好的抵抗剪切攻擊,但隨著剪切比例的升高,會(huì)對(duì)模型的分塊產(chǎn)生較大的影響,所以本算法只能夠抵抗較低比例的剪切攻擊. 實(shí)驗(yàn)結(jié)果顯示,當(dāng)模型被剪切30%時(shí),本文算法仍具有較高的相關(guān)性系數(shù),能很好地提取出水印信息. 因此,本文算法在非對(duì)稱模型失去保護(hù)價(jià)值之前對(duì)剪切攻擊仍具有魯棒性.
表6 剪切攻擊的相關(guān)系數(shù)結(jié)果
圖6 剪切攻擊后的bunny 模型
為了更好地驗(yàn)證本文算法的魯棒性,本小節(jié)將本文的實(shí)驗(yàn)結(jié)果與比較經(jīng)典的水印算法的實(shí)驗(yàn)結(jié)果進(jìn)行了對(duì)比. bunny 模型的對(duì)比實(shí)驗(yàn)結(jié)果如圖7–圖10 所示.表7 為5 種水印算法魯棒性比較.
表7 5 種水印算法的魯棒性比較 (%)
圖7 噪聲攻擊
圖10 剪切攻擊
對(duì)于相似變換,本文使用矢量長(zhǎng)度之比這一變量,它不受旋轉(zhuǎn)、平移和縮放攻擊的影響,所以能很好的抵抗這類攻擊,而對(duì)于文獻(xiàn)[12]的算法是利用網(wǎng)格的低層分辨率建立不變空間,當(dāng)模型受到攻擊后,這些點(diǎn)頂點(diǎn)可能發(fā)生輕微擾動(dòng),所以該算法受旋轉(zhuǎn)縮放攻擊的影響.
圖8 平滑攻擊
如圖7–圖9 所示,本文算法在抵抗網(wǎng)格簡(jiǎn)化和剪切攻擊方面的優(yōu)勢(shì)比較明顯. 由于本文算法在對(duì)模型進(jìn)行預(yù)處理時(shí)使用面積矩計(jì)算模型的中心,并且在實(shí)現(xiàn)過程中加入了頂點(diǎn)與頂點(diǎn)鄰域之間的比值,使算法對(duì)抗不同程度的采樣能力加強(qiáng),所以本文算法對(duì)簡(jiǎn)化攻擊具有很強(qiáng)的魯棒性. 相對(duì)于其他算法,本文算法對(duì)模型中心的依賴更小,所以能較好地抵抗剪切攻擊. 對(duì)于噪聲和平滑攻擊,本文算法在模型失去使用價(jià)值之前,檢測(cè)出的閾值大于無法辨別模型歸屬的閾值0.5,所以本文算法也能夠抵抗噪聲和平滑攻擊. 總體來說,本文提出的算法不需要考慮透明性問題,能夠抵抗常見類型的攻擊,并且對(duì)簡(jiǎn)化攻擊有很強(qiáng)的魯棒性,也能夠抵抗一定比例的剪切攻擊.
圖9 簡(jiǎn)化攻擊
本文提出了一種基于矢量長(zhǎng)度比的三維網(wǎng)格模型零水印算法,該算法首先對(duì)三維網(wǎng)格模型進(jìn)行分塊并計(jì)算每塊質(zhì)心,用塊質(zhì)心代替模型質(zhì)心,利用頂點(diǎn)到塊質(zhì)心距離與鄰域頂點(diǎn)到塊質(zhì)心的平均距離構(gòu)造出魯棒的水印序列. 實(shí)驗(yàn)結(jié)果表明本算法能夠抵抗相似變換、噪聲、平滑、剪切等常見的攻擊,并且在簡(jiǎn)化攻擊和剪切攻擊方面的優(yōu)勢(shì)比較突出. 本文算法可應(yīng)用于對(duì)精度要求較高的三維模型中. 下一步計(jì)劃是加強(qiáng)算法抵抗攻擊的種類以及它們的聯(lián)合攻擊,進(jìn)一步加強(qiáng)算法的魯棒性.