摘要:通過對LSB算法的綜合研究,該文給出了一種LSB改進算法。該算法增強了魯棒性,增加了密鑰功能,可以自動判別圖像水印和文本水印,使用更加方便。
關鍵詞:LSB 算法;水印;嵌入;提取
中圖分類號:TP311文獻標識碼:A 文章編號:1009-3044(2009)33-9248-03
An Improved Algorithm Based on LSB in Digital Watermarking
CHENG Hua
(Jiangsu Food Science College,Huaian 223003,China)
Abstract: By studyingthe LSB algorithms,this paper gives an improved algorithm based on LSB in digital watermarking.It can enhance the robustness,add the key function ,recognisethe image watermarking and the text watermarking,and it can be used conveniently.
Key words: LSB algorithm; watermarking; embed; extract
1 空域LSB水印模型
1.1位圖的位面
對一幅用多比特值表示其灰度的圖像來說,每個比特可看作表示一個二值平面,也稱作“位面”。1幅灰度級用8 bit表示的圖像有8個位面,一般用0代表最低位面,位面7代表最高位面。一般的LSB算法中,水印加在圖像的后4位。在圖像中加入水印信息,可直接修改圖像象素的象素值,空間域水印算法就是基于此思想的。
1.2 位圖結構
1.2.1 位圖文件的標頭
位圖文件的標頭包含位圖文件的類型大小信息和版面信息。結構如下:
Typedef struct tagBITMAPFILEHEADER {
UINT bfType;
DWORD bfSize;
UINT bfReserved1;
UINT bfReserved2;
DWORD bfOffBits;
}BITMAPFILEHEADER;
bfType:指定文件類型,其值始終為\"BM\"。
bfSize:指定整個文件的大小(以字節(jié)為單位)。
bfOffBits:指定從 BitmapFileHeader 到圖像首部的字節(jié)偏移量。
1.2.2 位圖信息標頭
位圖信息標頭包含圖像本身的屬性。結構如下:
Typedef struct tagBITMAPINFOHEADER {
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BITMAPINFOHEADER;
biSize:指定 BITMAPINFOHEADER 結構所需的字節(jié)數。
biWidth:指定位圖的寬度(以象素為單位)。
biHeight:指定位圖的高度(以象素為單位)。
1.3LSB算法模型
LSB算法采用直接改變圖像中像素的最后一位bit值來嵌入水印信息。在圖像的后四位嵌入水印信息,一般都不會對圖像造成視覺上的影響。因此,后四位均是LSB數字水印的嵌入范圍。嵌入水印的過程可以分為兩個階段,其分別為:嵌入過程、提取過程。
1.4 LSB算法的實現
1) 嵌入水印信息
第一步:讀入載體文件,并顯示它;
第二步:決定載體的LSB及嵌入的位數,采用嵌入圖像中所有象素的最后四位,即第5,6,7,8位;
第三步:對載體圖像做預處理,置其LSB為0;
第四步:將水印信息以ASCII碼的形式讀入,并存儲;
第五步:在每一個象素的第LSB位上,存儲水印信息的一個bit;
第六步:顯示嵌入水印信息的圖像;
2) 讀取水印信息
第一步:讀入含有水印信息的圖像;
第二步:得到每一個象素點的LSB位;
第三步:由每8個LSB位組成一個ASCII還原水印信息;
第四步:將還原的信息進行重新組合,得到水印文件;
第五步:將水印信息顯示出來;
這種算法的優(yōu)點在于簡單,方便,嵌入信息量大。但是,其缺點是魯棒性不強,當遭受各種不同的水印信息之后,水印信息很可能會被破壞,甚至被抹去。
2 基于空域改良型LSB算法
2.1 改良型的LSB算法模型
該改良型的LSB算法,將DCT和LSB算法進行了有效的結合,使之它既具有LSB算法所固有的優(yōu)點,同時也具有DCT算法所具有的魯棒性。
2.2改良型的LSB算法
2.2.1嵌入算法
1)對原始圖像和水印圖像進行DCT變換。變換公式為:
Gc(m,n)=a(m)a(n) ■
其中系數為:
a(0)=■并且a(m)=■其中 1<<M< 2)密鑰按素數位并入水印序列。 密鑰合并可用以下公式表示: S[I]=Key[J] S[I]代表水印信息存儲的矩陣序列。 Key[J]代表密鑰存儲的矩陣序列。 I代表每一個素數位,也就是素數。 J為密鑰的每一位,大小根據水印信息的實際情況而定。 3)計算出原始圖像的最低有效位,進行最低位的替換(LSB)。 4) 對嵌入后的圖像進行DCT反變換。 反變換公式為: G(i,k)= ■ 其中系數為: a(0)■= 并且a(m)=■其中 1< 2.2.2提取算法 1)對加密圖像進行DCT變換。 2)計算DCT變換的加密圖像的最低有效位,并進行提取(LSB)。 3)提取密鑰并進行數據重建。 密鑰合并可用以下公式表示: Key[I]= S[J] S[I]代表水印信息提取的臨時矩陣序列。 Key[J]代表密鑰存儲的臨時矩陣序列。 I為密鑰的每一位,大小根據水印信息的實際情況而定。 J代表每一個素數位,也就是素數。 然后將數組中的素數位數據刪除并移位數據,使數組中的數據保持連貫。 4)將提取的數組中的序列進行DCT反變換。 3 基于空域改良型LSB算法的數字水印方案 3.1 總體框架 圖5為總體框架圖。 3.2 嵌入算法過程 本方案采用空域LSB算法,LSB算法的基本原理是計算圖像像素的每一個最低有效位,利用最低有效位的遮掩效應來隱藏水印信息,而同時結合了DCT算法,所以該算法具有一定的魯棒性,可以抵御一般的攻擊。步驟如下: 1) 獲取原始圖像的數據區(qū)域指針,即指向圖像的實際像素區(qū)域。得到*P。獲取水印信息的頭指針*Q。 2) 對*P所指向序列進行DCT變換。 3) 獲取密鑰K,并按素數位插入到*Q指向的序列中去。 4) 計算水印信息長度L,同時進行的DCT變換。 5) 建立兩個8位臨時數組X[8]、S[8]用以儲存臨時的信息。 6) 將*P指向的原始數據的前8位讀入數組X,并將高七位異或,將結果放入最低有效位X[0]。 7) 將水印圖像序列前8位讀入數組S[8],并從第一位開始插入X[0],然后再計算下一個X[0],不斷重復f),g)步,直到將水印信息插入完成。 8) 對插入后的原始圖像序列進行DCT反變換,從而獲得加密圖像。 3.3 提取算法過程 提取算法是嵌入算法的逆過程,復雜度也比嵌入算法要簡單。主要有以下步驟: 1) 獲取加密圖像的像素指針*P。 2) 對*P所指向的序列進行DCT變換。 3) 建立8位臨時數組X[8],用以儲存臨時的信息。 4) 讀取水印文件長度信息L,并建立與此相關大小的字符型數組S[L]。 5) 按8位為一組,計算出最低有效位X[0],并將信息讀入S[]。 6) 按素數位讀取密鑰。并和用戶提供的對比,若相符,則提取,否則提示錯誤 g) 將S[L]進行重組,即將數據向前移位,補齊素數位,使之連貫。 7) 對S[L]指向的序列進行DCT反變換,得到水印圖像。 4 結束語 該文重點介紹了基于改良型 LSB算法的數字水印系統(tǒng)的模型、算法結構及其原理,給出了一種采用此算法的數字水印方案。與原算法相比較,增強了魯棒性,增加了密鑰功能,可以自動判別圖像水印和文本水印,使用更加方便。 參考文獻: [1] 姜吉濤,周雪芹,劉曉紅.一種基于LSB的數字圖像隱藏的改進算法[J].山東理工大學學報,2006,20(3). [2] 馮雪峰.改進LSB算法及其在BMP圖像中的應用[J].信息技術,2006(1). [3] 張建偉.基于圖像的LSB隱藏算法位平面分析及算法改進[J].裝備指揮技術學院院報,2003(2). [4] 李鋼,張國良,張仁斌.一種基于分塊大容量的LSB算法[J].合肥工業(yè)大學學報,2006(6).