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