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