肖振久, 韓 帥, 唐曉亮, 姜 東
(1.遼寧工程技術(shù)大學(xué) 軟件學(xué)院,遼寧 葫蘆島 125100; 2.中國科學(xué)院海西研究院泉州裝備制造研究所,福建 晉江 362200)
隨著計算機技術(shù)的快速發(fā)展,數(shù)字圖像在互聯(lián)網(wǎng)上的傳播變得越來越容易,其在傳播過程被惡意修改和非法復(fù)制的問題也逐漸凸顯出來。因此,保證數(shù)字圖像的完整性和防止非法復(fù)制變得至關(guān)重要。
數(shù)字水印技術(shù)[1~3]是驗證版權(quán)和維護圖像完整性的常用方法。從水印的嵌入過程來分類,可將水印算法分為空間域算法和變換域算法,因變換域水印算法對常規(guī)攻擊有更好的魯棒性,受到了當(dāng)前研究者們廣泛關(guān)注。如Sheth R K>等人[4]提出一種基于離散余弦變換和離散小波變換(discrete wavelet transform,DWT)的安全數(shù)字圖像水印,提升了宿主圖像嵌入水印信息后的魯棒性和感知透明性,可以有效抵抗裁剪、噪聲等常規(guī)攻擊。Li J等人[5]提出一種將小波變換和非負(fù)矩陣分解(non-negative matrix factorization,NMF)相結(jié)合的水印算法,原始載體圖像首先經(jīng)過兩次小波變換,然后通過NMF將水印嵌入到中頻子圖中,算法常規(guī)攻擊測試中提取的水印出現(xiàn)失真現(xiàn)象,魯棒性表現(xiàn)不足。張秋余等人[6]對此進行了改進,將DWT與奇異值分解(singular value decomposition,SVD)相結(jié)合,由于宿主圖像的輕微擾動不會對其奇異值造成過大影響,因此,算法在抗攻擊測試時表現(xiàn)出較好的魯棒性。為解決水印算法中存在的不可見性與魯棒性之間的矛盾,2003年溫泉等人[7]提出了零水印的概念。零水印是利用載體圖像的內(nèi)部特征構(gòu)造,不會破壞圖像的完整性。曲長波等人[8]提出一種小波域視覺密碼零水印算法,該算法使用SVD和視覺密碼構(gòu)造零水印,算法攻擊測試時有不錯的魯棒性和感知透明性。文獻[9]提出一種利用增強SVD(boost normed SVD,BN-SVD)的零水印算法,有效解決了對角線失真問題。此外,防止數(shù)字圖像被惡意修改,保證其完整性,一直以來受到研究者們的關(guān)注。Trivedy S等人[10]利用Logistic映射的混沌序列生成脆弱水印并嵌入到載體圖像中來保證其完整性。Zhang H等人[11]提出一種利用SVD特性實現(xiàn)圖像認(rèn)證的脆弱水印,原宿主圖像經(jīng)過SVD構(gòu)成脆弱水印并嵌入到自身的最低有效位中,實驗結(jié)果表明,算法對常規(guī)攻擊有較高的敏感性。
綜上所述,國內(nèi)外現(xiàn)有水印算法只針對完整性檢驗或魯棒性加強一個方面展開研究,因此本文提出一種包含兩方面的雙重水印方案。第1重認(rèn)證水印用于保證數(shù)字圖像的完整性。第2重零水印具有強魯棒性和不可見性,當(dāng)受到攻擊時,依然可以有效提取出完整水印。該算法的優(yōu)勢在于第1重水印可將被篡改圖像復(fù)原,保證圖像信息的完整性;零水印構(gòu)造過程中通過天牛須搜索(beetle antennae search,BAS)算法自適應(yīng)確定BN-SVD中參數(shù)β的最優(yōu)值,克服了實驗參數(shù)隨機性的問題,同時采用視覺密碼對零水印進行加密,算法的安全性得到了進一步的提升。
環(huán)面自同構(gòu)映射[12]是一種典型的混沌映射,其公式為
(1)
式中A為一個的2×2矩陣,并且detA=1;(x0,y0)為初始像素點的坐標(biāo);(x1,y1)為經(jīng)過一次變換后得到的用于替換的像素點坐標(biāo);mod為取余運算。
本文是對圖像塊的映射,由于圖像塊序列是一維序列,因此,轉(zhuǎn)換為一維的環(huán)面自同構(gòu)映射的變換公式
X′=f(X)=(k×X)mod(N)+1
(2)
式中X′,X(∈[1,N])分別為映射序列號和當(dāng)前序列號;k(∈[0,N-1])為秘鑰且必須為素數(shù);N為圖像塊總數(shù)。
BN-SVD[13]是對SVD的改進,通過引入?yún)?shù)β,有效解決了數(shù)字圖像SVD后產(chǎn)生的對角線方向上灰度不均衡的問題[9]。矩陣A的BN-SVD為
A=U×(S)β×VT,0≤β≤1
(3)
式中U,V分別為左奇異矩陣和右奇異矩陣;S=diag(σi)為A的奇異值矩陣,非對角元素均為0。
BAS算法[14]是于2017年提出的一種仿生智能優(yōu)化算法,具有運算量小,尋優(yōu)速度快等特點。生物原理為:天牛通過兩個觸角搜尋食物,當(dāng)左邊觸角接收到比右觸角更強的氣味時,天牛就會向左邊前進,而不會向右邊,根據(jù)這一原理,天牛不斷檢測氣味并移動位置,可以快速、有效地找到食物空間坐標(biāo)。算法主要步驟如下:
1)初始化最大迭代次數(shù)為nmax,并隨機化天牛朝向g
(4)
式中k為空間維度,rands()為隨機函數(shù)。
2)第t次迭代時天牛的左、右兩須的空間坐標(biāo)為
(5)
3)迭代更新天牛下一次移動的位置,并移動到所得位置,位置更新公式為
(6)
式中δt為步長因子,sign()為符號函數(shù),f為氣味強度測定函數(shù),即適應(yīng)度函數(shù)
f=(1-(2×NC))/2
(7)
式中 NC(normalized correlation)為歸一化相關(guān)值。
4)迭代執(zhí)行步驟(2)~步驟(3),當(dāng)?shù)螖?shù)達到最大nmax時,結(jié)束迭代過程,得到的最終位置Xbest,即所求參數(shù)β。
雙重水印的構(gòu)造流程如圖1所示。
圖1 雙重水印的構(gòu)造
選取大小為N×N的原始圖像R,(N/16)×(N/16)的水印圖像W2為,具體的流程如下:
1)對載體圖像R2×2不重疊分塊,隨機生成一個素數(shù)K1,以圖像塊為單位利用環(huán)面自同構(gòu)映射生成恢復(fù)矩陣B。
2)計算每個圖像塊的均值構(gòu)造認(rèn)證水印W1。
3)原始載體圖像R進行DWT獲得低頻子帶并進行不重疊分塊,得到子塊Ai(i=1,2,…,(N/16)×(N×16))并利用NMF對Ai進行分解,即
Ai≈Pi×Qi
(8)
式中Pi和Qi分別為n×k和k×n的非負(fù)矩陣,其中k為Ai的秩,且k≤n。
4)利用BN-SVD對得到特征矩陣Qi進行分解,即
(9)
式中Si為對角矩陣,參數(shù)β通過BAS找到最優(yōu)值。
5)取對角矩陣Si中的最大值,記作ηi(1,2,…,(N/16)×(N/16))并計算均值為mean(ηi)。
6)對比ηi和mean(ηi)的大小生成特征向量M
(10)
(11)
8)將零水印圖像H通過視覺密碼進行加密,生成秘密圖份Gi(i=1,2)。
雙重水印的檢測流程如圖2所示。
圖2 雙重水印的檢測
具體步驟為:
2)將原始載體圖像R′進行DWT獲得低頻子帶并進行不重疊分塊,得到子塊A′i(1,2,…,(N/16)×(N/16)),并利用NMF對A′i進行分解,即
A′i≈P′i×Q′i
(12)
3)利用BN-SVD對Q′i進行分解,獲得對角矩陣S′i。
5)對比η′i和mean(η′i)的大小生成特征向量M′。
6)將秘密圖份Gi(i=1,2)疊加恢復(fù)成零水印圖像H′。
7)將恢復(fù)的零水印H′和特征向量M′做異或運算,得到加密的水印圖像W′2,即
W′2=XOR(H′,M′)
(13)
8)最后,利用秘鑰K3和K2對加密的水印圖像W′2依次進行逆Logistic映射和Arnold逆變換得到原始水印圖像W2。
為了驗證本文算法的可行性,使用MATLAB 2016a作為實驗平臺,選取如圖3(a)~(d)所示的4幅圖像作為測試圖像。初始化水印圖像加密時所需的參數(shù),Arnold變換的變換次數(shù)K2=20;Logistic映射的控制參數(shù)r=3.654,初值K3設(shè)置為0.54。初始化BAS的最大迭代次數(shù)為30。仿真過程中通過歸一化相關(guān)值(NC)來評價提取的水印和原水印的相似度,NC∈[0,1],NC值越接近1說明提取的水印和原始水印越相同。NC表示為
(14)
式中x1,x2分別為初始水印和提取的水印。
圖3 測試圖像和水印圖像
圖4 第1重水印構(gòu)造示意
當(dāng)圖像被篡改時,需要恢復(fù)圖像。具體的恢復(fù)步驟為:
1)找到認(rèn)證水印中發(fā)生變化的像素點。
2)對應(yīng)找到載體圖像中被篡改的圖像塊,設(shè)為A。
3)利用環(huán)面自同構(gòu)映射找到恢復(fù)矩陣中對應(yīng)的圖像塊,設(shè)為B。
4)將圖像塊A替換為圖像塊B。
5)將圖像中被篡改的位置依次進行步驟(1)~步驟(4),從而完成對整個數(shù)字圖像的篡改恢復(fù)。
為了驗證本文算法的篡改恢復(fù)效果,分別對圖像Lena、圖像Plane、圖像Baboon和二維碼圖像進行剪切攻擊,然后對被攻擊的圖像進行篡改恢復(fù)。如圖5為部分實驗結(jié)果。實驗結(jié)果表明,第1重水印對篡改攻擊具有較高的敏感性,并且能夠很好地恢復(fù)被篡改的數(shù)字圖像,有效保證了數(shù)字圖像的真實性和完整性。
圖5 第1重水印的恢復(fù)效果
當(dāng)數(shù)字圖像被攻擊,其自身的原始性將會受到影響,導(dǎo)致提取的水印存在失真現(xiàn)象。因此為了驗證第2重水印的魯棒性,分別對圖像Lena、圖像Plane和圖像Baboon 3幅載體圖像做了9種不同的攻擊。表1列出的是3幅載體圖像在受到不同強度的各種攻擊后,該算法提取的水印圖像的NC值。通過表中的數(shù)據(jù)可以看出,當(dāng)沒有攻擊時,NC值為1,這說明該算法提取的水印是無損的,當(dāng)載體圖像受到噪聲、濾波、壓縮、旋轉(zhuǎn)、剪切攻擊時,本文算法提取的水印的NC不低于0.99。分析表1中數(shù)據(jù)可知,載體圖像在受到攻擊后,依然可以有效提取出水印,表明該算法具有強魯棒性。
由于第2重水印是零水印,對于添加水印信息的載體圖像,并不會看出和原始載體圖像有何不同,即使攻擊者知道數(shù)字圖像中嵌入了零水印,在不確定秘鑰K2,K3的情況下想要提取準(zhǔn)確的水印也是相當(dāng)困難的。
本文算法使用視覺密碼對零水印圖像加密形成秘密圖份,由圖6對比可以看出,零水印圖像(a)和秘密圖份中的圖像(b)或圖像(c)之間看不出任何聯(lián)系,所以,即使攻擊者獲得了秘密圖份中的部分圖像,也無法復(fù)原零水印圖像。由以上分析可知,本文算法安全性較高。
表1 待測圖像受攻擊后提取水印圖像的NC值
圖6 視覺密碼下的安全性分析圖像
以Baboon作為測試圖像,將本文算法與文獻[15,16]進行對比實驗,實驗結(jié)果如表2所示。
表2 本文算法與文獻[15,16]算法的NC值對比
在受到剪切攻擊時,隨著剪切強度加大,本文算法提取水印的NC值優(yōu)于文獻[15],雖不如文獻[16]的表現(xiàn)出色,但NC值依然在0.99以上。在受到高斯噪聲、JPEG壓縮、椒鹽噪聲、旋轉(zhuǎn)攻擊時,本文算法的實驗結(jié)果普遍優(yōu)于文獻[15]和文獻[16]。由上述分析可知,本文算法具有一定的優(yōu)越性。
本文分析了單一水印算法難以同時滿足算法的強魯棒性和保證數(shù)字圖像完整性的問題,并且為了進一步提高算法的安全性,提出了一種基于環(huán)面自同構(gòu)映射和BAS的雙重水印。第1重認(rèn)證水印用于檢測數(shù)字圖像的完整性和篡改恢復(fù),第2重零水印用于數(shù)字圖像版權(quán)保護。算法中利用視覺密碼對零水印圖像進行加密,讓算法的安全性得到了進一步的提升。實驗結(jié)果表明:雙重水印在實現(xiàn)算法強魯棒性的同時保證了數(shù)字圖像的完整性,其中認(rèn)證水印對篡改攻擊具有較高的敏感性,并且能夠很好地恢復(fù)被篡改的數(shù)字圖像;零水印算法部分有效解決了對角線失真問題,在受到噪聲、旋轉(zhuǎn)、濾波等攻擊時,依然可以準(zhǔn)確提取到水印圖像。在未來工作中,針對剪切、旋轉(zhuǎn)等幾何攻擊方面仍需進一步探索。