趙久影, 王洪君
(1 吉林師范大學(xué) 數(shù)學(xué)學(xué)院, 吉林 四平136000; 2 吉林師范大學(xué) 計算機學(xué)院, 吉林 四平 136000)
隨著計算機的迅速發(fā)展,保護數(shù)字產(chǎn)品的版權(quán)已成為近年來的一個重要問題。目前,研究人員提出了許多保護數(shù)字圖像知識產(chǎn)權(quán)的技術(shù)。其中,數(shù)字水印技術(shù)就是在載體圖像中隱藏有意義的數(shù)字水印,以保護版權(quán)和完整性檢查。當(dāng)需要證實圖像的合法所有權(quán)時,可以提取隱藏的水印進行所有權(quán)驗證。
曲長波等人[1-2]給出了基于視覺密碼的零水印算法,對載體圖像進行置亂和奇異值分解等操作提取特征矩陣,利用視覺密碼生成零水印。零水印算法沒有將水印嵌入到載體圖像中,所以載體圖像不會被修改。侯翔等人[3]給出了一種定位篡改實體組的脆弱水印算法,該算法采用優(yōu)化的k均值聚類進行分組,構(gòu)建特征參數(shù)及混沌映射生成脆弱水印。Li等人[4]提出了一種基于DCT算法的數(shù)字水印,利用離散余弦變換對圖像像素值和頻域系數(shù)矩陣進行變換,實現(xiàn)了盲水印的嵌入和提取。文獻[5-10]也對數(shù)字水印算法進行了研究。羅昊等人[11]提出了一種在加密域中來做直方圖平移的可逆水印算法,利用直方圖平移的方法實現(xiàn)水印的嵌入和提取,在此過程中不會影響原始載體圖像。劉連山等人[12]提出了基于分塊的預(yù)測差值直方圖平移的可逆水印算法。文獻[13-16]也提出了不同的可逆水印算法。
本文提出基于像素不擴展視覺密碼的可逆水印算法,該算法既能提取水印,又能無損地恢復(fù)載體圖像。利用(2,2)像素不擴展視覺密碼方案將水印分割為2幅分享圖像。將分享圖像中的一個嵌入載體圖像中,另一個分配給所有者。提取時,從嵌入水印后的圖像中提取分享圖像,將這2幅分享圖像合并顯示水印,在此過程中還能完整地恢復(fù)載體圖像。實驗結(jié)果表明,該算法實現(xiàn)簡單,具有良好的抗攻擊能力。
1994年,Naor和Shamir[17]提出了一種新的加密方法,稱為視覺密碼(VSS)。將一幅秘密圖像編碼為n幅分享圖像,然后分發(fā)給n個參與者,每人一幅分享圖像。解密時只需將分享圖像打印到透明膠片上,n幅分享圖像中的任意k幅或k幅以上進行疊加,用人眼即可辨認出秘密圖像。傳統(tǒng)視覺密碼方案的分享圖像大小比原秘密圖像大,并且分享圖像無意義。為了解決上述問題,王洪君等人[18-19]給出了像素不擴展的(2,3)視覺密碼方案和具有掩蓋圖像的像素不擴展的(2,2)視覺密碼方案。李春燕[20]提出了基于像素不擴展視覺密碼的盲水印算法,利用像素不擴展的(2,2)視覺密碼的基礎(chǔ)矩陣修改載體圖像的低位來嵌入水印。
像素不擴展的(2,2)視覺密碼方案見表1。對于一個白(黑)色像素,有2條加密規(guī)則。對于每一次編碼一個白(黑)色像素,隨機選擇一個加密規(guī)則,根據(jù)所選的規(guī)則將像素分割為2個子像素。
表1 加密規(guī)則
假設(shè)載體圖像H是一個M×N的灰度圖像,水印圖像W是一個m×n的二值圖像。利用密鑰K產(chǎn)生m×n個隨機數(shù),從M×N個像素位置篩選出符合嵌入條件的m×n對像素值。將水印圖像W利用像素不擴展的(2,2)視覺密碼方案分割成2幅分享圖像,分享1嵌入到載體圖像中,分享2和密鑰K分配給所有者,根據(jù)水印嵌入算法,得到嵌入水印后的載體圖像。嵌入水印的算法流程具體如下。
(1)利用密鑰K產(chǎn)生m×n個隨機整數(shù)。隨機整數(shù)對應(yīng)圖像的像素位置,將選取位置的像素值與其相鄰的像素值進行比較。每當(dāng)一對像素值(x,y)被讀入時,當(dāng)x (1) 反之亦然,否則不能嵌入水印,重新選擇嵌入位置。 (2)水印圖像W利用像素不擴展的(2,2)視覺密碼方案分割成2幅分享圖像(見表1),分享1嵌入到載體圖像中,分享2分配給所有者。嵌入過程的闡釋表述如下。 ① 求出每對像素值差值的絕對值h,差值與2作取余運算,余數(shù)為r。 ② 分享圖像1的像素w與差值h和余數(shù)r作如下運算得到q,其數(shù)學(xué)公式可表示為: q=2×h-r+2×w, (2) ③ 判斷(x,y)的大小關(guān)系,先用較小的值與q作減法,再用較小的值與q作加法,得到嵌入水印后的像素值(x',y')。x',y'之間的大小關(guān)系與x,y之間的大小關(guān)系相同。假設(shè)x x'=x-q, (3) y'=x+q. (4) 由此可得x' 當(dāng)所有者想要證明所有權(quán)時,利用密鑰K在嵌入水印位置提取像素值,每當(dāng)一對(x',y')的值被讀入時,根據(jù)水印的提取算法,得到w和(x,y),直到把所有像素值都提取出來就得到分享1,將其與所有者的分享2疊加,可以得到原水印圖像。將(x',y')替換成(x,y)就可以恢復(fù)原始載體圖像。水印提取的完整算法詳見如下。 (1)利用密鑰K提取m×n對嵌入水印的像素值(x',y')。 (2)比較(x',y')的大小,求出x',y'的平均值,x',y'中較小值對應(yīng)的x或y為平均值。假設(shè)x' (5) (3)求x與x'差值的絕對值s,差值s與4作取余運算,余數(shù)為t。 (4)被除數(shù)為余數(shù)t,除數(shù)為2,得到的商就是嵌入水印圖像的像素值w,余數(shù)為p。 (5)將差值s,提取的水印像素值w和余數(shù)p作如下運算得到c,其數(shù)學(xué)公式可表示為: (6) (6)x,y中,較小值已經(jīng)確定,較大值即為較小值與c的和,得到原載體圖像像素對(x,y)。假設(shè)x' y=x+c, (7) 同理,如果嵌入過程利用較大的值與q作加減法得到(x',y'),則提取時,利用較大的值為平均值,較小值即為較大值與c的差。 假設(shè)有一對灰度值(x,y),x,y∈Z,0≤x,y≤255,嵌入w,w∈{0,1},并恢復(fù)(x,y)的可逆方法如下。假設(shè): x=127,y=132,w=0, x,y滿足嵌入條件,則有: x'=118,y'=136 嵌入一對像素(x',y'),根據(jù)水印提取算法提取嵌入值w并且恢復(fù)原始對(x,y)。其推導(dǎo)運算過程如下: (8) 1÷2=w…r, (9) w=0, (10) y=x+c=132. (11) 以512×512的Lena為載體圖像,133×133的水印圖像如圖1所示,嵌入水印的圖像見圖2(a),恢復(fù)載體圖像見圖2(b)。提取的分享圖像1見圖3(a)和所有者的分享圖像2見圖3(b),2幅分享圖像的疊加結(jié)果如圖3(c)所示。在實驗中,使用峰值信噪比(PSNR)來測量嵌入水印后圖像的質(zhì)量。PSNR的計算公式的數(shù)學(xué)表述如下: (12) 其中, (13) 式中,pi,j是原載體圖像的像素值,p'i,j是嵌入水印后圖像的像素值。PSNR越大,嵌入水印后的圖像與原載體圖像越相似。一般來說,如果PSNR大于30,人類的眼睛就無法察覺到差異。原載體圖像與嵌入水印后的圖像的峰值信噪比為43.95,這意味著人眼幾乎看不到嵌入水印后的圖像與原載體圖像的區(qū)別?;謴?fù)的載體圖像與原載體圖像的峰值信噪比為正無窮,意味著2張圖像完全相同。 對嵌入水印后的圖像分別引入加噪聲、剪切、濾波、縮放等擾動因素。提取的水印由測量值NC(歸一化相關(guān))來進行表征,如式(14)所示: (14) 其中,Wi, j是原始水印的像素值,W'i, j是提取水印的像素值。如果NC接近1,則提取的水印與原始水印相似。不同攻擊下提取的水印圖像如圖4所示,PSNR值是被攻擊的圖像和恢復(fù)的載體圖像計算出來的,在有攻擊和無攻擊的疊加結(jié)果間測量NC值,可求得PSNR和NC數(shù)據(jù)見表2。結(jié)果表明,該方案能夠抵御常見的攻擊。 圖1 原始水印圖像 (a) 嵌入水印后的圖像 (b) 恢復(fù)的載體圖像 (a) Watermarked image (b) Recovered image 圖2 嵌入水印后的圖像及恢復(fù)的圖像 Fig. 2 The watermarked image and recovered image (a) 分享圖像1 (b) 分享圖像2 (c) 疊加結(jié)果 (a) Shared image1 (b) Shared image 2 (c) Stacked result 圖3 分享圖像及疊加結(jié)果 Fig. 3 Shared and stacked result 圖4 不同攻擊下提取的水印 表2 常見攻擊 將像素不擴展的視覺密碼方案與可逆水印相結(jié)合,提出了基于像素不擴展視覺密碼的可逆水印算法,既能保證原始載體圖像的隱私,又能保證水印的安全。近年來,視覺密碼與水印相結(jié)合多為零水印算法,零水印算法沒有將水印圖像嵌入到載體圖像中,載體圖像不會被修改。其它視覺密碼與水印相結(jié)合的算法不能完整地恢復(fù)載體圖像。該算法不僅能正確地提取水印圖像,并且能無損地恢復(fù)載體圖像。對嵌入水印后的圖像進行攻擊,提取的水印和原始水印圖像也較為相似。實驗結(jié)果表明,該算法能抵御常規(guī)的攻擊。2.2 水印的提取
2.3 實驗結(jié)果
3 結(jié)束語