包展愷 王中訓 孟令增
(煙臺大學光電信息科學技術學院 山東 煙臺 264005)
由于互聯網的開放性,使得人們可以輕松地在網上獲取一些圖片、音頻和視頻等。但是,更加開放的環境也會帶來更大的版權保護問題[1]。尤其是在互聯網飛速發展的今天,對于知識產權的侵犯嚴重損害到了產權所有者的直接利益。所以,為了解決侵權問題所帶來的困擾,人們提出了數字水印技術[2]。水印信息是一種用于保護版權和身份驗證的安全特征,它作為一種信息被秘密嵌入圖像、音頻和視頻等對象中,然后在接收端進行提取,以此來證明真正所有者的身份。
通常來講,數字水印技術的主要特征包括魯棒性(常見)、不可感知性和容量。根據數字水印技術的魯棒性可以將水印分為魯棒性水印和脆弱性水印,魯棒性水印要求水印信息經過信號處理(噪聲、剪切攻擊等)后仍然能提取出清晰可見的水印信息[3],脆弱性水印主要是用于驗證在信息傳遞的過程中是否受到了篡改[4],本文主要研究的是魯棒性水印。根據水印信息的加載位置,可以將數字水印技術分為空間域水印和變換域水印。空間域水印效率高,但是魯棒性差,在信息的傳遞過程中容易丟失大量的水印信息;變換域水印將載體信息進行頻域變換,然后把水印信息嵌入至某個頻域系數上[5]。相較于空間域水印,變換域水印具有更好的魯棒性,本文主要使用的是基于離散余弦變換(Discrete Cosine Transform,DCT)的數字水印技術。
針對數字水印技術魯棒性的特點,本文將低密度校驗碼LDPC碼與數字水印技術結合,在將水印信息嵌入到載體圖像之前對水印信息進行LDPC編碼處理,運用LDPC碼的良好的糾錯性能,來實現LDPC碼在數字水印技術中的應用。
LDPC碼是一種線性分組碼,Gallager[6]在論文中系統地論證了LDPC碼良好的糾錯性能。LDPC碼是一種具有很強糾錯能力的信道編碼,在壓縮圖像的傳輸中,LDPC碼可明顯改善重建圖像的質量。現有的研究中,使用LDPC碼對水印信息進行編碼,再進行BPSK調制后結合擴頻生成新的水印序列,實驗結果表明通過該算法得到的水印具有較好的魯棒性和不可見性[7]。
數字水印技術一般包括水印信息的生成、嵌入和提取三個方面。算法流程如圖1所示。

圖1 數字水印算法流程
根據水印信息嵌入的域,數字水印技術可以分為空間域技術和變換域技術。一般來說,基于變換域的數字水印在抗攻擊性方面的性能由于基于空間域的數字水印。在變化域數字水印算法中,先對載體圖像進行某種特定的變換,如離散余弦變換、小波變換(Discrete Wavelet Transformation,DWT)、離散傅里葉變換(Discrete Fourier Transform,DFT)等,再將水印信息根據一定的規則嵌入到載體的某個頻帶或者某些頻帶中。通常來說,載體的低頻信息反映了載體的主要輪廓,若把水印信息嵌入至低頻信息中將極大地影響水印信息的不可見性;而載體的高頻信息是人類視覺系統(Human Visual System,HVS)不敏感的信息,把水印信息嵌入將會有很好的不可見性,但是,高頻段通常會被壓縮技術所剔除,魯棒性差。所以,將水印信息嵌入到中頻系數中是較好的選擇。本文采用基于DCT的數字水印技術,水印嵌入過程如圖2所示。

圖2 水印的嵌入過程
將水印信息嵌入到DC系數的一般算法如下。
(1) 將載體圖片分為8×8像素的互不覆蓋的像素塊。
(2) 對每一個像素塊分別進行DCT變換。
(3) 將經過DCT變換后像素塊的中頻系數與水印信息做如下計算:
x′ij=xij(1+αmi)
(1)
式中:xij(i,j=[0,1,…,8])為所選擇的DCT系數;mi為第i個水印信息;x′ij為隱藏后的DCT系數;α為嵌入強度系數。
(4) 將嵌入水印后的像素塊進行DCT反變換,再把像素塊按原來的順序組合起來,即得到嵌入水印后的圖像。
為了提高數字水印的魯棒性與不相關性,我們將LDPC碼編譯碼算法引入數字水印技術中,在水印信息嵌入載體圖像之前,對水印信息使用LDPC碼進行編碼,并在提取出嵌入的信息后再進行解碼[8],算法流程如圖3所示。

圖3 基于LDPC碼的數字水印技術
與傳統的數字水印技術不同的是,基于LDPC碼的數字水印技術在水印信息嵌入載體圖像之前,先使用LDPC碼對水印信息進行糾錯編碼,之后再嵌入至載體圖像中,最后利用LDPC譯碼算法對提取出的水印信息進行譯碼,進一步提升水印信息的魯棒性[9]。
在已有的基于LDPC碼的數字水印技術中,譯碼算法方面通常采用的是對數似然比置信傳播(Log-Iikelihood Ratio Belief Propagation,LLR-BP)譯碼算法。但由于用于對水印信息編碼的LDPC碼碼長通常較短,LDPC碼字就很容易出現短的圍長,使得LLR-BP譯碼算法有時不能得到有效的收斂。短圍長(girth)的存在加重了振蕩迭代現象對于LDPC碼譯碼算法性能的不良影響,針對LLR-BP譯碼算法中由于短圍長引起的譯碼不收斂的問題,我們對LLR-BP譯碼算法進行改進。
LDPC碼由一個非常稀疏的校驗矩陣H定義,稀疏是指該矩陣的行和列均由大量的0和少量的1構成。可以通過坦納圖表示這種稀疏校驗矩陣,例如當校驗矩陣H由式(2)所示,那么與該校驗矩陣H對應的坦納圖如4所示。
(2)

圖4 校驗矩陣H對應的坦納圖
圖4中的變量節點和校驗節點分別對應校驗矩陣中的列和行,當校驗矩陣H中的元素為1時,則該元素所在的第m行和第n列所對應的第m個校驗節點和第n個變量節點之間通過一條連接線連接。
LLR-BP譯碼算法是一種優秀的迭代譯碼算法,若校驗矩陣對應的坦納圖上無環,LLR-BP譯碼算法可以實現最大后驗概率譯碼[10]。下面我們將對LLR-BP譯碼算法進行簡要概述。

初始化:
(3)
式中:σ2為信道噪聲。
迭代處理:
步驟1校驗節點更新。
(4)
步驟2變量節點更新。
(5)
(6)
判決:

當LDPC碼校驗矩陣對應的坦納圖無環并且信道噪聲較低時,譯碼器會收斂至一個有效的碼字。由文獻[11]可知,譯碼過程中出現的三種誤差分別是:收斂到錯誤的碼字、收斂至局部最大值、值不收斂于平衡點[12]。文獻[13]指出,LLR值不收斂于平衡點,這可能是由于通過某個節點的兩個甚至是多個周期造成的,當在周期中循環的消息在某一時刻發生改變(由正變負或者由負變正),就說明該節點的LLR值是振蕩的[14]。即低可靠度的節點得到的信息通過環在節點之間不斷循環,削弱了其他節點信息的可靠性,即使繼續增加迭代次數,也不會使得LLR的值收斂,這種錯誤在LDPC碼擁有短環的情況下尤其嚴重。
由以上結論,得出振蕩的表達式如式(7)和式(8)所示。
(7)
(8)

圖5給出了LDPC碼在LLR-BP譯碼算法過程中發生振蕩的信息比特數目與產生錯誤的信息比特數目的關系。

圖5 發生振蕩的信息比特數目與產生 錯誤的信息比特數目的關系
其中LDPC碼的碼長為512,碼率為1/2,SNR為2.5 dB 。由圖5可知,產生錯誤的比特數目與發生振蕩的比特數目成正比。并且,產生錯誤的比特數目并沒有隨著迭代的增加而減少,說明增加迭代并不能解決振蕩產生的不收斂問題。
當在譯碼算法中發生振蕩時,比特的符號會發生變化,但符號的變化不是連續的,而是隨機的,因此,我們無法判定前后哪次的結果是正確的[15]。為減少振蕩效應產生的不利影響,本文對迭代前后的信息進行加權處理,從而減少低可靠度節點產生的錯誤信息對于譯碼算法的負面影響。具體算法如下:
初始化:
(9)
式中:σ2為信道噪聲。
迭代處理:
步驟1校驗節點更新。
(10)
步驟2變量節點更新。
(11)
(12)
(13)
與傳統LLR-BP譯碼算法的區別在于式(12),我們比較當前迭代中LLR的符號與前一次迭代中LLR的符號是否相同,若二者符號發生改變,我們判定發生了振蕩并對二者進行加權處理,得到一個接近二者的值以減小振蕩迭代對譯碼算法帶來的不利影響。
對LLR-BP譯碼算法與針對振蕩迭代改進后的LLR-BP譯碼算法的比較結果如圖6所示。

圖6 LLR-BP譯碼算法與改進后的LLR-BP譯碼 算法在相同信噪比下誤碼率的比較
其中,校驗矩陣的構造方式為利用Mackay的構造法1A構造校驗矩陣,碼長為512,碼率為1/2,迭代系數為20,加權系數為α=0.5。
在現有的基于LDPC碼的數字水印技術中,由于BP譯碼算法的優越性,在譯碼算法方面多采用LLR-BP譯碼算法[16]。但是用于數字水印編碼的碼字較短,容易有短環的出現,所以在傳統的LLR-BP譯碼算法的基礎上,增加計算復雜度以提高譯碼算法性能。計算量的增加意味著更長的計算時間,但由于數字水印技術對于即時性要求不高的特點,計算時間的增加對于數字水印技術性能的影響可以忽略不計,所以改進后的譯碼算法相比于傳統的LLR-BP譯碼算法更適用于數字水印技術。
下面將分別基于兩種譯碼算法對其相應的數字水印技術進行實驗測試。
實驗采用256×256像素的圖片作為載體,16×32像素的圖片作為水印信息,水印嵌入算法為基于DCT的數字水印算法,將載體圖片分為32×32個8×8的像素塊,將水印信息嵌入像素塊的中頻DC系數中,LDPC碼編碼方式為Mackay的構造法1A構造校驗矩陣。
由圖7可知,數字水印技術在加入改進后的LDPC譯碼算法之后,能夠完整地將水印信息提取出來,驗證了算法的可行性。

圖7 基于改進的LLR-BP譯碼算法 的數字水印技術
對基于LLR-BP算法的數字水印技術和基于改進的譯碼算法的水印技術進行攻擊測試,實驗結果如表1所示。

表1 加入高斯白噪聲后的誤碼率
可以看出,改進的譯碼算法在相同程度高斯白噪聲的影響下,誤碼率等于或低于基于LLR-BP譯碼算法的數字水印技術,魯棒性優于基于LLR-BP譯碼算法的數字水印技術。
一般而言,用于數字水印技術中進行編碼的LDPC碼較短。而在譯碼過程中,較短的碼長就意味著更容易出現短環,短環的存在加劇了振蕩問題對譯碼算法的不利影響。本文針對以上問題,在LLR-BP譯碼算法的基礎上,對其中變量節點的更新過程進行加權處理,以減小振蕩問題對譯碼算法的影響。實驗表明,改進的譯碼算法在相同信噪比的情況下,誤碼率低于LLR-BP譯碼算法,并提高了數字水印算法的魯棒性。