姚曉璐,張國(guó)有,王江帆,崔 健
(太原科技大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,山西 太原 030032)
隨著3D打印技術(shù)的廣泛應(yīng)用,三維模型[1]被應(yīng)用于多個(gè)領(lǐng)域,但是三維模型的數(shù)據(jù)信息內(nèi)容容易被復(fù)制篡改,版權(quán)得不到有效保護(hù)。隨著科學(xué)技術(shù)的發(fā)展,網(wǎng)頁(yè)瀏覽器的出現(xiàn)使得國(guó)際互聯(lián)網(wǎng)變得對(duì)用戶友好起來(lái),很明顯,人們?cè)敢庠诰W(wǎng)上下載圖片、視頻、三維模型等。網(wǎng)絡(luò)的傳播使得三維模型的數(shù)據(jù)更加日益被復(fù)制傳播,內(nèi)容的所有者也在急切地尋找能夠有效保護(hù)版權(quán)的材料。所以,三維模型的信息保護(hù)日益嚴(yán)峻。數(shù)字水印和加密技術(shù)作為信息安全的重要研究方向,是為實(shí)現(xiàn)版權(quán)保護(hù)和水印系統(tǒng)安全性[2]的重要手段,所以受到許多研究人員的重視。目前應(yīng)用在圖像上的水印算法較為成熟,很多學(xué)者也在致力于從圖像水印算法中尋求合適的水印算法應(yīng)用在三維模型上。
根據(jù)數(shù)字水印的可見(jiàn)性,三維模型數(shù)字水印算法分為2大類:1)非盲水印方案,在檢測(cè)過(guò)程中需要原始數(shù)據(jù)和原始水印。最近安新辰等人[3]提出了一種邊界自適應(yīng)的可見(jiàn)水印算法,模型打印出來(lái)水印信息無(wú)法保留。2)盲水印方案。Kim等人[4]提出的根據(jù)模型表面粗糙度自適應(yīng)地選擇水印嵌入強(qiáng)度,利用人類視覺(jué)的掩蔽特性來(lái)增強(qiáng)算法的魯棒性;有的水印算法的魯棒性很高,但是水印系統(tǒng)安全性得不到保障。
為了使水印系統(tǒng)的安全性得到保障,研究者利用混沌系統(tǒng)的隨機(jī)性和對(duì)初始條件的敏感性這2大特性與數(shù)字水印結(jié)合。文獻(xiàn)[5]利用混沌和小波變換的方式來(lái)嵌入水印,使得算法的魯棒性和安全性得到很大提高;文獻(xiàn)[6]提出特征點(diǎn)混沌算法,利用Tent混沌序列對(duì)圖像置亂,提供相關(guān)性函數(shù)來(lái)進(jìn)行水印檢測(cè),使得算法的安全性和魯棒性較好;文獻(xiàn)[7]提出了混沌加密和圖像水印相結(jié)合的二次加密系統(tǒng),具有較強(qiáng)的偽裝性;文獻(xiàn)[8]利用超混沌和Slant變換提出了一種新的魯棒水印算法,該算法具有很好的魯棒性,對(duì)數(shù)字產(chǎn)品的版權(quán)保護(hù)提供了新的實(shí)用價(jià)值。因此,研究一種加密的魯棒盲水印算法是必要的。
基于以上分析,本文針對(duì)三維模型水印系統(tǒng)安全性提出一種基于Logistic混沌加密[9]簡(jiǎn)化分層的盲水印算法,首先利用TTF字符庫(kù)[10]生成“科大3D”字樣的水印圖像信息,對(duì)二值水印圖像進(jìn)行混沌置亂,把水印信息加密保護(hù),然后利用網(wǎng)格簡(jiǎn)化算法對(duì)三維網(wǎng)格模型進(jìn)行頂點(diǎn)分層[11]表示,對(duì)低層內(nèi)的所有頂點(diǎn)建立不變空間[12],水印信息被嵌入到修改后的中層內(nèi)頂點(diǎn)的二環(huán)鄰域,高層內(nèi)的頂點(diǎn)抵抗網(wǎng)格簡(jiǎn)化、平滑、噪聲等強(qiáng)攻擊。所以該算法較好地解決了不可見(jiàn)性和魯棒性之間的矛盾,并且水印的提取無(wú)需原始圖像,實(shí)現(xiàn)了盲水印的提取。
點(diǎn)陣字體[13]是把每一個(gè)字符都分成若干個(gè)點(diǎn),然后用每個(gè)點(diǎn)的虛實(shí)來(lái)表示字符的輪廓。其優(yōu)點(diǎn)是數(shù)據(jù)量較小,繪制點(diǎn)數(shù)較少,顯示速度快,對(duì)三維網(wǎng)格模型的拓?fù)浣Y(jié)構(gòu)改變很少,作為水印信息對(duì)后續(xù)的模型影響較小。
首先要獲取水印信息內(nèi)容為“0”和“1”的二維數(shù)組,利用TTF字符庫(kù)中WindowsAPI函數(shù)GetGlyphOutline()來(lái)生成TrueType字體的字符,包括任何形式的字符,比如漢字、英文、字母的點(diǎn)陣字符,也可以將不同字符的點(diǎn)陣數(shù)組進(jìn)行結(jié)合生成更加豐富的內(nèi)容,然后將數(shù)組轉(zhuǎn)換為所需的二值水印圖像。如圖1所示,將“科大3D”字符轉(zhuǎn)換為二值圖像的水印圖像。GetGlyphOutline()函數(shù)會(huì)將“科大3D”字解析為字輪廓的各個(gè)頂點(diǎn)的坐標(biāo)信息及像素信息。黑色部分是點(diǎn)陣字體為1的區(qū)域,白色部分為點(diǎn)陣字體為0的區(qū)域。
圖1 字符點(diǎn)陣和二值水印圖像
高精度的三維網(wǎng)格模型的計(jì)算成本相對(duì)較高,所以對(duì)三維網(wǎng)格模型的簡(jiǎn)化非常有必要。這里主要利用二次誤差作為度量邊的邊收縮算法[14]進(jìn)行網(wǎng)格簡(jiǎn)化,最大程度地保留特征點(diǎn)和特征面片,該算法快速有效。其關(guān)鍵思想是依次選取收縮后新頂點(diǎn)誤差最小的邊進(jìn)行迭代收縮逐步簡(jiǎn)化模型。
定義1假設(shè)代價(jià)收縮的變量為Δ,先給網(wǎng)格的每個(gè)頂點(diǎn)vi=[xi,yi,zi,1]T分配一個(gè)誤差矩陣M,那頂點(diǎn)vi的誤差為:
(1)
(v1,v2)是收縮邊的2個(gè)頂點(diǎn),vd是邊收縮后的頂點(diǎn),vd的誤差矩陣Md的表示是:Md=M1+M2。為了計(jì)算vd的最小值,讓其一階導(dǎo)數(shù)為0,如公式(2):
(2)
其中,v′是新的收縮頂點(diǎn),選取代價(jià)誤差最小的邊進(jìn)行迭代收縮直到滿足要求。新頂點(diǎn)的坐標(biāo)為:
(3)
邊折疊的過(guò)程如圖2所示。
圖2 邊折疊過(guò)程
三維網(wǎng)格模型通過(guò)網(wǎng)格簡(jiǎn)化算法被進(jìn)行了分層表示,簡(jiǎn)化處理后的三維網(wǎng)格模型基本不會(huì)影響原始模型的整體視覺(jué)效果,特征點(diǎn)將會(huì)被保留下來(lái)。圖3顯示的是牛模型的分層表示的視覺(jué)效果。圖3(a)表示的是特征頂點(diǎn)數(shù)目高于原始的85%,圖3(b)表示的是精細(xì)的特征頂點(diǎn)數(shù)目在85%左右,圖3(c)表示的是粗略的特征頂點(diǎn)被簡(jiǎn)化到5%。表1為模型不同層內(nèi)的定點(diǎn)數(shù)。
(a) 高層 (b) 中層 (c) 低層圖3 水牛模型多層表示
表1 模型不同層內(nèi)的頂點(diǎn)數(shù)
2.2.1 水印置亂及Logistic混沌加密
混沌的最大特性就是對(duì)初始值非常敏感,即蝴蝶效應(yīng)。通過(guò)Logistic混沌序列加密,設(shè)定混沌系數(shù)以及初值,使得原始水印圖像達(dá)到混沌最佳的狀態(tài),即為L(zhǎng)ogistic混沌加密。
在密碼學(xué)中,安全性由密鑰[15]來(lái)提供,由特定密鑰加密的信息只能由這種密鑰來(lái)解密。在該算法中,只需要對(duì)密鑰進(jìn)行保密,就可以保證整個(gè)水印算法的安全性,用密鑰就可以評(píng)判算法的性能,并且不可以破壞水印系統(tǒng)的安全性。Arnold置亂和Logistic混沌加密使得算法對(duì)系數(shù)、初值等密鑰有著很強(qiáng)的敏感性,即只要有一個(gè)或者2個(gè)密鑰不正確,都會(huì)使得算法解密失敗。具體加密步驟如下:
Step1 采用上述32×32的有意義的二值圖像作為水印信息,對(duì)二值水印圖像進(jìn)行Arnold[16]置亂處理(公式(1)),通過(guò)改變像素坐標(biāo)而改變圖像灰度級(jí)別,經(jīng)過(guò)Arnold變換后的水印圖像會(huì)變得混亂不堪[17]。本文方法和文獻(xiàn)[14]的方法不同在于加密的對(duì)象不同,本文加密的二值水印圖像,多了一步Arnold置亂;同時(shí)應(yīng)用的對(duì)象不同,本文主要應(yīng)用于三維模型當(dāng)中。但是如果繼續(xù)進(jìn)行Arnold變換,一定會(huì)出現(xiàn)一幅與原圖相同的圖像,即Arnold變換具有周期性,經(jīng)過(guò)計(jì)算該二值圖像的周期為24。
Step2 參數(shù)μ和初值x0為密鑰,根據(jù)Logistic映射(公式(4))產(chǎn)生的一串混沌二值序列xk(k=0,1,2,…,1023),選取μ=0.975,x0=0.75,選取的序列長(zhǎng)度與水印大小相同,為32×32(1024)。
xn+1=μxn(1-xn), 0≤μ≤4,xn∈(0,1),n=1,2,3,…
(4)
Step3 對(duì)于生成的序列xk(k=0,1,2,…,1023),利用公式(5)進(jìn)行二值化,得到二值化序列wk。
(5)
Step4 再將置亂后的水印圖像與二值序列進(jìn)行異或[18]或者重新排列即可得到加密后的二值水印圖像,如圖4所示。
二值水印圖像 Arnold置亂 混沌加密圖4 水印圖像
2.2.2 建立新坐標(biāo)系
Step1 計(jì)算模型的低層內(nèi)的所有頂點(diǎn)的質(zhì)心Vc(即仿射不變空間的原點(diǎn)O′),公式為:
(6)
其中,Nl是低層模型內(nèi)的頂點(diǎn)數(shù),頂點(diǎn)Vi=(xi,yi,zi),1
Step2 計(jì)算仿射空間坐標(biāo)。按照公式(7)計(jì)算協(xié)方差矩陣Cov:
(7)
選擇最大的3個(gè)特征值記為a1,a2,a3(a1 Step3 抵抗仿射變換攻擊。通過(guò)正交變換將原網(wǎng)格模型從原坐標(biāo)系Oxyz變換到不變空間O′mvn。公式為: (8) 2.2.3 水印嵌入?yún)^(qū)域 為了保證水印嵌入的視覺(jué)效果,選擇中層頂點(diǎn)密度較大且凹凸幅度較大的區(qū)域,這些區(qū)域的特點(diǎn)是具有良好的視覺(jué)掩蔽效果,不容易變成簡(jiǎn)化惡意攻擊的目標(biāo),水印嵌入的容量可以達(dá)到所需的要求。 Step1 計(jì)算二環(huán)鄰域[19]面積,公式為: (9) 其中,Si是頂點(diǎn)Vi二環(huán)鄰域的面積。Sc是頂點(diǎn)Vi的二環(huán)鄰域中第c個(gè)網(wǎng)格的面積,Ni是二環(huán)鄰域中三角網(wǎng)格的數(shù)量。 Step2 將這些頂點(diǎn)二環(huán)鄰域三角網(wǎng)格的面積按升序排列。閾值為Se。當(dāng)Si≤Se時(shí),水印嵌入頂點(diǎn)坐標(biāo)。水印容量決定Se的大小。 2.2.4 水印嵌入強(qiáng)度 計(jì)算模型表面的一環(huán)鄰域和二環(huán)鄰域的平均法向量來(lái)自適應(yīng)調(diào)整水印嵌入強(qiáng)度,即曲率。 (10) (11) 2.2.5 水印嵌入 水印嵌入的流程圖如圖5所示。 圖5 水印嵌入過(guò)程 Step1 按2.2.2節(jié)建立新坐標(biāo)系。 Step2 尋找合適的水印嵌入?yún)^(qū)域。冗余嵌入可提高對(duì)抗剪切等攻擊的魯棒性,所以如果在中層區(qū)域內(nèi)選擇k個(gè)頂點(diǎn),將每一位水印信息重復(fù)h次嵌入,那么需要在三維模型中選擇h×k個(gè)頂點(diǎn)進(jìn)行水印嵌入。 Step3 計(jì)算水印嵌入的強(qiáng)度sin(β),根據(jù)公式(10)計(jì)算出的法向量計(jì)算水印嵌入強(qiáng)度sin(β)。 Step4 通過(guò)修改模型頂點(diǎn)的m分量(公式(12))來(lái)嵌入水印信息。 (12) 其中: (13) V′i,m是原模型頂點(diǎn)Vi的m分量,w′i是第i位加密后的的二值水印序列,頂點(diǎn)Vi的其他分量保持不變。其余h×k-1個(gè)頂點(diǎn)也進(jìn)行同樣的處理。 Step5 將新坐標(biāo)系O′mvn下的模型的頂點(diǎn)運(yùn)用逆變換(公式(10)逆過(guò)程)得到含有水印的三維網(wǎng)格模型。 水印提取的過(guò)程如圖6所示。 圖6 水印提取過(guò)程 水印檢測(cè)無(wú)需輸入原始網(wǎng)格模型,具體提取過(guò)程如下: Step1 與水印嵌入的前3個(gè)過(guò)程相同。 Step2 用公式(14)提取水印。 (14) w″i是被檢測(cè)的第i位水印信息位,V′i,m是待檢測(cè)的模型頂點(diǎn)V′i的m分量,b1、b2是由公式(13)計(jì)算出來(lái)的。 Step3 求水印corr相關(guān)系數(shù)值如公式(15),設(shè)置相關(guān)系數(shù)的閾值為0.5,如果corr>0.5,則水印信息提取成功。 (15) Step4 當(dāng)水印信息提取出來(lái)時(shí),需要根據(jù)嵌入水印的系數(shù)μ和初值x0進(jìn)行混沌解密,輸入嵌入時(shí)設(shè)置的2個(gè)密鑰,再進(jìn)行Arnold逆置亂,置亂周期為24,即可得到解密后的正確二值水印圖像。 本文提出的算法是在Visual Studio 2013開(kāi)發(fā)平臺(tái)上開(kāi)發(fā)并且利用OpenGL庫(kù)顯示模型。實(shí)驗(yàn)選用了Bunny、Dragon、Rabbit這3個(gè)標(biāo)準(zhǔn)模型進(jìn)行實(shí)驗(yàn)。在實(shí)驗(yàn)部分,通過(guò)一些實(shí)驗(yàn)結(jié)果來(lái)說(shuō)明水印算法的安全性、透明性與魯棒性。 實(shí)驗(yàn)驗(yàn)證當(dāng)水印沒(méi)有被嵌入時(shí),由置亂預(yù)處理后的水印恢復(fù)出原始水印圖像。算法所采取的水印圖像為32×32具有“科大3D”標(biāo)志的二值水印圖像(圖7(a)),圖像置亂恢復(fù)到原始水印的周期為24。圖7(b)是將水印圖像置亂了6次之后水印的錯(cuò)亂顯示,混沌加密時(shí)選取的參數(shù)是μ=0.975,初值x0=0.75,此時(shí)的置亂性和混沌性達(dá)到最佳。所以當(dāng)密鑰正確時(shí)實(shí)驗(yàn)結(jié)果如圖7所示。 (a) 原始水印 (b) 置亂后水印 (c) 加密后水印 (d) 解密后水印 (e) 恢復(fù)后水印圖7 密鑰正確時(shí)的實(shí)驗(yàn)結(jié)果 同樣,當(dāng)提取水印時(shí),如果輸入的密鑰不正確,這里分別對(duì)置亂次數(shù)、系數(shù)μ和初值x0這3個(gè)密鑰做了測(cè)試,即在只有一個(gè)密鑰不正確而其他2個(gè)都正確的情況下驗(yàn)證恢復(fù)后的水印,如圖8所示。 (a) 逆置亂次數(shù)17 (b) μ=3.97500001 (c) x0=0.7500001圖8 密鑰不正確時(shí)的實(shí)驗(yàn)結(jié)果 由圖8可以看出,3個(gè)子圖都是只有一個(gè)密鑰出錯(cuò)時(shí)水印恢復(fù)的狀態(tài)??梢钥闯?,盡管只有一個(gè)密鑰錯(cuò)誤,但是恢復(fù)后的水印也已經(jīng)完全無(wú)法辨認(rèn),即使初值x0只相差10-7這樣微小的差值,恢復(fù)后的水印也是面目全非,無(wú)法識(shí)別。由此可見(jiàn),在密鑰未知的情況下或者只記得一個(gè)或者2個(gè)密鑰的情況下,水印系統(tǒng)仍然具有極高的安全性。水印系統(tǒng)不易被破解。所以通過(guò)置亂和混沌加密的處理,水印系統(tǒng)有著很高的安全性。 為了定量地分析水印系統(tǒng)的性能,采用相關(guān)系數(shù)(corr)(公式(15))來(lái)分析提取出來(lái)的水印與原始水印的相似性,用信噪比(SNR)(公式(16))來(lái)分析水印嵌入后在沒(méi)有攻擊前和嵌入水印經(jīng)過(guò)各種攻擊實(shí)驗(yàn)后提取的水印質(zhì)量變化和原模型的質(zhì)量變化(信噪比達(dá)到50 dB以上,透明性得到保證)。如圖9所示。 (16) (a) 原始圖像 (b) 嵌入水印后的圖像(SNR=84.33) (c) 原始和預(yù)處理后的水印 (d) 提取和恢復(fù)后的水印(NC=1.0000) 圖9是水印圖像在未受到任何攻擊時(shí)的實(shí)驗(yàn)結(jié)果。圖9(a)是原始水印圖像,圖9(b)是嵌入水印后的圖像(SNR=84.33),可見(jiàn)嵌入水印后三維模型的失真度很小,同時(shí)也很難察覺(jué)到水印的存在,說(shuō)明水印的透明性很高。圖9(c)是原始的二值圖像水印和混沌加密后的圖像水印,可以看到水印圖像已經(jīng)變得完全混亂。圖9(d)是提取和恢復(fù)后的水印圖像(NC=1.0000),可見(jiàn)在未受到攻擊時(shí),嵌入的水印可以完全恢復(fù)。 魯棒性是水印具有安全性的一個(gè)必要條件?,F(xiàn)在來(lái)測(cè)試水印檢測(cè)中幾種主要類型的失真影響。主要包括噪聲、平滑、網(wǎng)格簡(jiǎn)化、平移、旋轉(zhuǎn)、縮放等攻擊。 1)噪聲攻擊。嵌入水印的位置選擇、自適應(yīng)地嵌入水印強(qiáng)度對(duì)噪聲攻擊有一定的抵抗效果。圖10顯示的是在不同強(qiáng)度噪聲的攻擊下的Bunny模型,通過(guò)計(jì)算相關(guān)系數(shù)可知該算法可以抵抗一定的噪聲攻擊。 (a) 原始Bunny 模型 (corr=1) (b) 噪聲強(qiáng)度(σ=0.0001)(corr=0.86) (c) 噪聲強(qiáng)度(σ=0.001)(corr=0.48) 2)平滑攻擊。模型多分層的表示及由二環(huán)鄰域面積決定的水印嵌入位置,提高了水印對(duì)抗網(wǎng)格平滑攻擊的魯棒性。 由圖11可見(jiàn)模型Dragon在不同程度的Taubin[20]平滑處理下,水印信息還能夠從受攻擊的模型中提取。當(dāng)平滑攻擊k≥0.04時(shí),水印信息不能夠被成功提取。說(shuō)明該算法對(duì)平滑攻擊具有一定的的魯棒性。 (a) 平滑攻擊(k=0.01)(corr=0.84) (b) 平滑攻擊(k=0.03)(corr=0.58) (c) 平滑攻擊(k=0.04)(corr=0.46) 3)簡(jiǎn)化攻擊。當(dāng)網(wǎng)格簡(jiǎn)化在15%以下時(shí),水印信息的重復(fù)嵌入使得提取水印的相關(guān)系數(shù)在0.5以上。因此,該算法可以抵抗一般的網(wǎng)格簡(jiǎn)化攻擊。如圖12所示。 (a) 5%網(wǎng)格簡(jiǎn)化(corr=0.95) (b) 15%網(wǎng)格簡(jiǎn)化(corr=0.53) (c) 20%網(wǎng)格簡(jiǎn)化(corr=0.48) 4)仿射變換攻擊。代表輪廓控制點(diǎn)層的頂點(diǎn)使得水印算法很容易抵抗平移、旋轉(zhuǎn)、縮放等攻擊。圖13顯示網(wǎng)格模型受到旋轉(zhuǎn)、縮放等攻擊,算法還能夠捕獲到水印的信息。在坐標(biāo)系變換前后,水印的嵌入信息沒(méi)有發(fā)生改變,因此,仿射變換并沒(méi)有削弱算法的魯棒性。 (a) 模型原坐標(biāo)系 (b) 旋轉(zhuǎn)攻擊的坐標(biāo)系(corr=0.96) (c) 縮放攻擊的坐標(biāo)系(corr=0.98) 本文方法與其他水印算法[21-23]的比較如表2所示。以Dragon模型為測(cè)試模型。 表2 水印方法的比較 圖14 算法魯棒性比較 通過(guò)上述實(shí)驗(yàn)表明,置亂和混沌加密的三維模型盲水印算法對(duì)水印進(jìn)行了雙重加密處理,有效地保證了水印系統(tǒng)的安全性;同時(shí),該算法簡(jiǎn)單易行,能夠有力地保證水印的不可感知性和魯棒性。 本文提出了一種基于Logistic混沌加密的三維模型盲數(shù)字水印算法。為了保障水印系統(tǒng)的安全性,對(duì)二值水印圖像進(jìn)行置亂和混沌加密處理。為了提高算法的魯棒性,方案中對(duì)三維網(wǎng)格模型進(jìn)行網(wǎng)格簡(jiǎn)化將頂點(diǎn)分為粗層次和精細(xì)層次的頂點(diǎn),精細(xì)層次的點(diǎn)具有視覺(jué)掩蔽的效果,攜帶大容量的水印信息,粗層次的輪廓控制點(diǎn)在受到攻擊后仿射空間受到影響長(zhǎng)度較小。實(shí)驗(yàn)表明提出的水印算法能夠抵抗噪聲、平滑、網(wǎng)格簡(jiǎn)化、裁剪和仿射變換等攻擊。今后的工作將進(jìn)一步提高算法的魯棒性。2.3 水印的提取
3 實(shí)驗(yàn)結(jié)果與分析
3.1 安全性
3.2 透明性
3.3 魯棒性
4 結(jié)束語(yǔ)