DWT域數(shù)字水印算法的FPGA實(shí)現(xiàn)
摘 要: 根據(jù)離散小波變換原理的特點(diǎn),提出了一種基于DWT域的數(shù)字水印算法,并用FPGA硬件實(shí)現(xiàn)其中關(guān)鍵部分的DWT變換。詳細(xì)介紹了相關(guān)模塊的設(shè)計(jì)和時(shí)序,并對(duì)整個(gè)系統(tǒng)進(jìn)行了綜合仿真,驗(yàn)證了設(shè)計(jì)的正確性。分析與仿真結(jié)果表明,與軟件實(shí)現(xiàn)相比,用FPGA實(shí)現(xiàn)水印算法具有高速實(shí)時(shí)處理的優(yōu)點(diǎn)。
關(guān)鍵詞: DWT; 數(shù)字水??; FPGA
隨著計(jì)算機(jī)網(wǎng)絡(luò)和通信技術(shù)的飛速發(fā)展,數(shù)字媒體(包括數(shù)字圖像、數(shù)字視頻、數(shù)字音頻)已得到了廣泛的應(yīng)用,隨之而來(lái)的數(shù)字媒體的信息安全、知識(shí)產(chǎn)權(quán)保護(hù)和認(rèn)證等問(wèn)題也變得日益突出。數(shù)字水印作為傳統(tǒng)加密方法的有效補(bǔ)充手段,是一種可以在開(kāi)放的網(wǎng)絡(luò)環(huán)境下保護(hù)版權(quán)和認(rèn)證來(lái)源以及完整性的新技術(shù)[1]。
根據(jù)水印的實(shí)現(xiàn)過(guò)程,圖像水印算法可分為空域算法和變換域算法。空域算法是通過(guò)直接改變?cè)紙D像的像素值來(lái)嵌入水印,通常具有較快的速度,但魯棒性差,且水印容量也會(huì)受到限制;變換域算法是通過(guò)改變某些變換系數(shù)來(lái)嵌入水印,通常具有很好的魯棒性和不可見(jiàn)性,其實(shí)現(xiàn)一般基于圖像變換(如DCT、DFT、DWT等)。大多數(shù)水印算法采用軟件實(shí)現(xiàn),軟件實(shí)現(xiàn)具有易于應(yīng)用、升級(jí)和適應(yīng)性較好等特點(diǎn),但存在速度受限、難以滿足實(shí)時(shí)處理的問(wèn)題。而采用硬件實(shí)現(xiàn)則可以克服這些問(wèn)題。本文基于上述考慮,利用FPGA設(shè)計(jì)了基于DWT(Discrete Wavelet Transform)域的數(shù)字水印算法,其中提升小波變換是該數(shù)字水印方案的關(guān)鍵單元之一,采用硬件描述語(yǔ)言Verilog HDL對(duì)算法進(jìn)行描述,并用ModelSim完成了功能和時(shí)序仿真。
1 離散小波變換原理
1.1 Mallat算法及提升格式
1987 年,Mallat將計(jì)算機(jī)視覺(jué)領(lǐng)域的多分辨思想引入了小波分析,提出了多分辨分析MRA(Multi-resolution Analysis)的理論,并給出了數(shù)學(xué)描述和一種子帶濾波器的離散小波變換與重構(gòu)算法——Mallat算法。在圖像處理領(lǐng)域,需要處理的通常是二維圖形。因此,將Mallat算法擴(kuò)展到二維空間, 適當(dāng)?shù)剡x取一組行和列變換正交的小波系數(shù),對(duì)圖像(或分解后的低頻子圖)分別進(jìn)行行變換和列變換。然后,根據(jù)后續(xù)的具體應(yīng)用對(duì)N次分解所得的圖像在不同的分辨率下進(jìn)行分析、處理或數(shù)據(jù)壓縮。二維Mallat算法的結(jié)構(gòu)如圖1所示。
首先,用濾波器組g(n)和h(n)對(duì)圖像的每一行信號(hào)進(jìn)行濾波和2抽取,然后用相同的濾波器組對(duì)所得結(jié)果的每一列再次進(jìn)行濾波和2抽取。這樣,原始圖像就被分解成為4個(gè)子帶圖像,分別表示為L(zhǎng)L、LH、HL和HH。其中,LL為水平和垂直方向的低通信號(hào);LH為水平方向低通,垂直方向高通;HL為水平方向高通,垂直方向低通;HH為水平和垂直方向的高通信號(hào)。
相對(duì)于Mallat算法而言,提升算法[2]是一種更快更有效的小波變換方法,標(biāo)準(zhǔn)的提升算法包含分裂(Split)、預(yù)測(cè)(Prediction)、更新(Update)三個(gè)步驟。分裂是將輸入數(shù)據(jù)分為偶數(shù)序列和奇數(shù)序列兩個(gè)部分;預(yù)測(cè)是用分裂的偶數(shù)序列預(yù)測(cè)奇數(shù)序列,得到的預(yù)測(cè)誤差為變換的高頻分量;更新是由預(yù)測(cè)誤差來(lái)更新偶數(shù)序列,得到變換的低頻分量。提升算法的結(jié)構(gòu)框圖如圖2所示,其提升實(shí)現(xiàn)過(guò)程由式(1)和式(2)表示,其中濾波系數(shù)α=-1/2, β=1/4。
本文將采用5/3小波濾波器來(lái)實(shí)現(xiàn)小波變換。
1.2 邊界處理
由于圖像數(shù)據(jù)是有限長(zhǎng)的,因此離散小波變換必須對(duì)圖像數(shù)據(jù)進(jìn)行邊界延拓,在做小波提升算法時(shí),同樣需要對(duì)其邊界數(shù)據(jù)進(jìn)行延拓,以保證邊緣數(shù)據(jù)的正確?;谫Y源消耗和功耗的考慮,這里采用內(nèi)嵌對(duì)稱延拓提升算法[3-4],將延拓的過(guò)程融合到提升變換過(guò)程中。精簡(jiǎn)后的內(nèi)嵌延拓方式如圖3所示,其中Xn表示圖像數(shù)據(jù),dn表示高頻分量,cn表示低頻分量。
2 數(shù)字水印方案的設(shè)計(jì)
基于小波的圖像水印算法有很多,本文采用LSB方法[5]直接將水印信號(hào)嵌入到經(jīng)過(guò)小波變換的子圖中,這里所用到的水印信號(hào)是由線性移位寄存器產(chǎn)生的m序列。圖像經(jīng)過(guò)小波變換后,低頻子帶 LL 表示為 L(n),數(shù)字水印序列設(shè)為a(n),在低頻子帶中嵌入水印序列,算法如下:
其中α為常數(shù),當(dāng)水印序列為“1”時(shí),對(duì)子帶數(shù)據(jù)加α;當(dāng)水印序列為“0”時(shí),對(duì)子帶數(shù)據(jù)減α。
整個(gè)設(shè)計(jì)過(guò)程的核心為提升小波變換的FPGA的實(shí)現(xiàn)。根據(jù)二維小波變換的特點(diǎn),將總體設(shè)計(jì)分為水平一維DWT 單元、垂直一維DWT單元、外部存儲(chǔ)單元和控制單元??傮w設(shè)計(jì)框圖如圖4所示。
2.1 二維DWT單元
二維提升式小波變換可以分解為兩個(gè)一維小波變換,先進(jìn)行行方向的離散小波變換,再進(jìn)行列方向離散小波變換,這樣就可以完成二維提升式小波變換。在本設(shè)計(jì)中采用的是并行的二維提升離散小波變換,根據(jù)提升式小波變換的特點(diǎn),當(dāng)列變換處理完三行數(shù)據(jù)后,即可以進(jìn)行行方向的變換。因此可以根據(jù)二維小波變換[6]這個(gè)特點(diǎn),使用四行緩存來(lái)緩存列方向小波變換后的系數(shù)。在第三行緩存存滿后就開(kāi)始從左向右進(jìn)行“行方向”小波變換。因?yàn)樵谶M(jìn)行行方向小波變換的同時(shí),仍然在進(jìn)行列方向的小波變換,所以需要第四行緩存繼續(xù)緩存列方向變換得到的小波系數(shù)以避免數(shù)據(jù)的丟失。通過(guò)以上的處理,實(shí)現(xiàn)了并行的二維離散小波變換,極大地提高了小波變換的速度。在這整個(gè)架構(gòu)包含了列方向小波變換模塊及其控制模塊、行方向小波變換模塊及其控制模塊,以及用于緩存一維小波系數(shù)的緩存組。其中列方向變換模塊在列方向變換控制模塊的控制下,從系統(tǒng)外部讀入影像數(shù)據(jù)進(jìn)行列方向小波變換處理,并根據(jù)列變換的控制信號(hào)將處理后得到的小波高、低頻系數(shù)存儲(chǔ)到系統(tǒng)內(nèi)部緩存中。行方向變換模塊在行方向變換控制模塊的控制下,從緩存器中取出列方向小波變換處理后的小波系數(shù),進(jìn)行行方向小波變換處理,得到二維小波變換后的LL、LH、HL、HH小波系數(shù),最后輸出到系統(tǒng)外。
2.2 存儲(chǔ)單元
在變換過(guò)程中,首先對(duì)圖像數(shù)據(jù)進(jìn)行行方向的一維提升式小波變換,將變換后的數(shù)據(jù)存放在存儲(chǔ)器或臨時(shí)寄存器中,行方向變換結(jié)束后,再對(duì)該存儲(chǔ)器中的數(shù)據(jù)進(jìn)行列方向變換。這里使用的是FIFO存儲(chǔ)器。FIFO是一種先進(jìn)先出的存儲(chǔ)器,就好像一個(gè)單向管道,數(shù)據(jù)只能按照固定的方向從管道一頭進(jìn)來(lái),再按照相同的方向從管道另一頭出去,最先進(jìn)來(lái)的數(shù)據(jù)必定最先出去。
2.3 控制單元
控制單元接收外部控制信號(hào)(芯片使能、數(shù)據(jù)時(shí)鐘等),由內(nèi)部計(jì)數(shù)器進(jìn)行計(jì)時(shí)、產(chǎn)生水平一維DWT 單元、垂直一維 DWT 單元和存儲(chǔ)單元的控制信號(hào)(模塊使能、起始終止信號(hào)等),對(duì)外部數(shù)據(jù)或前一級(jí)的LL輸出數(shù)據(jù)進(jìn)行鎖存、處理、緩沖、輸出等操作。
3 實(shí)驗(yàn)結(jié)果
在整個(gè)電路設(shè)計(jì)過(guò)程中,采用Verilog HDL語(yǔ)言對(duì)二維小波變換結(jié)構(gòu)進(jìn)行了RTL設(shè)計(jì),并且采用ModelSim仿真對(duì)設(shè)計(jì)進(jìn)行驗(yàn)證,其結(jié)果與 Matlab仿真結(jié)果一致,說(shuō)明二維提升小波變換結(jié)構(gòu)的正確。圖5為α=2時(shí)嵌入水印后的圖片和算法仿真結(jié)果。由圖可知,嵌入水印后對(duì)圖的影響不大,基本不能被人的眼睛所感知。但當(dāng)α>8時(shí),圖像質(zhì)量還是有了一定的影響,這是因?yàn)長(zhǎng)L子帶包含了圖像的主要信息。
本文實(shí)現(xiàn)了一種基于DWT域的數(shù)字水印算法,其中DWT變換算法的實(shí)現(xiàn)是該設(shè)計(jì)中數(shù)字水印方案的關(guān)鍵算法之一。采用ModelSim仿真對(duì)設(shè)計(jì)進(jìn)行驗(yàn)證,其結(jié)果與Matlab仿真結(jié)果一致,說(shuō)明了該設(shè)計(jì)的正確性。實(shí)驗(yàn)結(jié)果表明,該方案利用FPGA實(shí)現(xiàn)水印算法比用軟件實(shí)現(xiàn)法速度更快,性能更穩(wěn)定。
參考文獻(xiàn)
[1] COX I J, MILLER M L, BLOOM J A.數(shù)字水印[M].王穎,黃志蓓,譯.北京:電子工業(yè)出版社,2003.
[2] SWELDENS W. The lifting scheme: a construction of second generation wavelets [J]. SIAM J Math Anal, 1997,29(2):511-546.
[3] 喬世杰,王國(guó)裕.離散小波變換的VLSI實(shí)現(xiàn)[J].微電子學(xué),2001,31(2):143-145.
[4] 張波. 基于提升小波變換的圖像數(shù)字水印算法IP核的研究與設(shè)計(jì)[D]. 成都:西南交通大學(xué),2009.
[5] 鐘樺,張小華,焦李成. 數(shù)字水印與圖像認(rèn)證:算法及應(yīng)用[M]. 西安:西安電子科技大學(xué)出版社,2006.
[6] 劉軍偉. 基于FPGA的數(shù)字水印算法的設(shè)計(jì)和實(shí)現(xiàn)[D].成都:電子科技大學(xué),2005.