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