新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 用于圖像認(rèn)證的半脆弱水印算法研究

用于圖像認(rèn)證的半脆弱水印算法研究

作者: 時(shí)間:2012-02-11 來源:網(wǎng)絡(luò) 收藏


在Matlab進(jìn)入市場前,國際上的許多軟件包都是直接以FORTRANC語言等編程語言開發(fā)的。這種軟件的缺點(diǎn)是使用面窄,接口簡陋,程序結(jié)構(gòu)不開放以及沒有標(biāo)準(zhǔn)的基庫,很難適應(yīng)各學(xué)科的最新發(fā)展,因而很難推廣。Matlab的出現(xiàn),為各國科學(xué)家開發(fā)學(xué)科軟件提供了新的基礎(chǔ)。在Matlab問世不久的80年代中期,原先控制領(lǐng)域里的一些軟件包紛紛被淘汰或在Matlab上重建。


MathWorks公司1993年推出了Matlab 4.0版,1995年推出4.2C版(for win3.X)1997年推出5.0版。1999年推出5.3版。Matlab5.X較Matlab 4.X無論是界面還是內(nèi)容都有長足的進(jìn)展,其幫助信息采用超文本格式和PDF格式,在Netscape 3.0或IE 4.0及以上版本,Acrobat Reader中可以方便地瀏覽。


時(shí)至今日,經(jīng)過MathWorks公司的不斷完善,Matlab已經(jīng)發(fā)展成為適合多學(xué)科,多種工作平臺的功能強(qiáng)大大大型軟件。在國外,Matlab已經(jīng)經(jīng)受了多年考驗(yàn)。在歐美等高校,Matlab已經(jīng)成為線性代數(shù),自動控制理論,數(shù)理統(tǒng)計(jì),數(shù)字信號處理,時(shí)間序列分析,動態(tài)系統(tǒng)仿真等高級課程的基本教學(xué)工具;成為攻讀學(xué)位的大學(xué)生,碩士生,博士生必須掌握的基本技能。在設(shè)計(jì)研究單位和工業(yè)部門,Matlab被廣泛用于科學(xué)研究和解決各種具體問題。在國內(nèi),特別是工程界,Matlab一定會盛行起來。可以說,無論你從事工程方面的哪個學(xué)科,都能在Matlab里找到合適的功能〔7〕。


第三章 算法原理與總體設(shè)計(jì)


技術(shù)既可以在一定程度上容忍施加于含水印數(shù)字媒體上的常見信號處理操作(如疊加噪聲、平滑濾波、有損壓縮等),又能夠?qū)阂獯鄹淖龀鰣?bào)警反應(yīng)且具有定位篡改區(qū)域的能力,故在網(wǎng)絡(luò)時(shí)代具有更重要的應(yīng)用價(jià)值。近幾年,半脆弱圖像數(shù)字水印技術(shù)研究取得了很大進(jìn)展,陸續(xù)提出了諸如與JPEG編解碼器相結(jié)合、基于視覺掩蔽特性、基于量化系數(shù)等多種水印嵌入算法。這些半脆弱型水印算法普遍具有篡改檢測較出色、虛警率較低的優(yōu)點(diǎn),但也不同程度存在透明性較差、對某些常規(guī)信號處理不夠魯棒、篡改區(qū)域定位不夠準(zhǔn)確等不足。


3.1 用于算法的特殊要求分析
的目的是確認(rèn)作品沒有受到任何改變,可用脆弱水印來實(shí)現(xiàn)圖像認(rèn)證。為了便于檢測,脆弱水印對某些變換(如壓縮),具有較低的健壯性,面對其他變換的健壯性更低。脆弱水印對圖像的改變極其敏感,適于圖像的精確認(rèn)證,但對數(shù)字圖像來說,少量比特的改變不會造成原作品實(shí)質(zhì)上的不同,事實(shí)上有的失真(如有損壓縮等)會修改作品中很多的比特,但在視覺上不會造成改變。在許多應(yīng)用中,兩幅圖像在視覺上相似就意昧著其壓縮版本是可接受的。此時(shí),基于脆弱水印的精確認(rèn)證無法實(shí)現(xiàn)圖像認(rèn)證,這促使研究人員提出能夠進(jìn)行選擇認(rèn)證的。目前大多數(shù)圖像數(shù)字水印研究都集中在版權(quán)保護(hù)水印上,而對圖像認(rèn)證水印的研究相較少,針對這種情況,論文中提出了一種能經(jīng)受JPEG壓縮的半脆弱水印算法。該方法將兩個水印位嵌入到圖像每個8*8塊的高頻DCT(Discrete Cosine Transform,離散余弦變換)系數(shù)中,水印信號和嵌入的位置由DCT系數(shù)樣本和密鑰決定。這種水印可以從嚴(yán)重的JPEG壓縮中保存下來,但對低通濾波和噪聲等極為敏感,可用于圖像的選擇認(rèn)證〔8〕。


3.2 實(shí)現(xiàn)認(rèn)證功能的總體設(shè)計(jì)
所謂認(rèn)證水印就是在保證數(shù)字媒體信息一定視(或聽)覺質(zhì)量的前提下,將與媒體內(nèi)容相關(guān)或不相關(guān)的標(biāo)志信息作為水印直接嵌入媒體內(nèi)容中,當(dāng)媒體內(nèi)容需要認(rèn)證時(shí),可將水印提出鑒定其是否真實(shí)完整。認(rèn)證水印除了具有數(shù)字水印的一般特征,如不可見、穩(wěn)健性、安全性外,水印本身對篡改必須具有一定的敏感性和脆弱性。因此,同樣在數(shù)字媒體中嵌入信息,認(rèn)證水印與魯棒水印的不同之處在于當(dāng)信息內(nèi)容發(fā)生改變時(shí),認(rèn)證水印信息會發(fā)生一定程度的改變。要實(shí)現(xiàn)對于圖像的認(rèn)證功能,在水印嵌入和檢測上就有一些要求了。本身嵌入的水印就不能對要保護(hù)的圖像在感官上有太大的改變,這就要求嵌入的水印要在較低的有效位上,嵌入的水印不能是顯式的。提取出水印后,我們要把水印和嵌入的水印進(jìn)行比較,以確定水印是否被篡改,最終才能認(rèn)證圖像。


3.2.1模塊劃分
本算法共分為四個部分,水印預(yù)處理,水印嵌入,水印檢測,攻擊檢測。

圖3.1 算法模塊劃分圖
3.2.2算法框架圖
認(rèn)證水印系統(tǒng)的一般框架如圖3.2,系統(tǒng)主體包括三部分,水印的產(chǎn)生,嵌入和檢測認(rèn)證。


認(rèn)證水印系統(tǒng)首先將提取的宿主圖像信息(特征或圖像內(nèi)容)或自定義信息(圖像標(biāo)志或序列號)轉(zhuǎn)變?yōu)樗⌒盘?,通過嵌入算法將其嵌入原始圖像中,得到的含水印的圖像經(jīng)過信道在信宿端被接收.通過檢測認(rèn)證算法進(jìn)行認(rèn)證,得到檢測結(jié)果。檢測認(rèn)證時(shí),要求僅僅借助待測圖像,或者再加上水印信息,即可得認(rèn)證結(jié)果。在實(shí)際應(yīng)用中,在嵌入和檢測的過程中,還需加入密鑰。


圖3.2 認(rèn)證水印系統(tǒng)的一般框架圖
圖3.3給出一典型認(rèn)證水印實(shí)現(xiàn)的例子??梢钥闯觯瑘D3.3(a)(b)無明顯視覺差異。圖3.3(d)能較好的定位篡改部位。

(a)原始圖像 (b)嵌入水印后的圖像 (c)篡改圖像 (d)檢測結(jié)果
圖 3.3 認(rèn)證水印的實(shí)現(xiàn)例子
而本論文的設(shè)計(jì)思想就是要實(shí)現(xiàn)對于圖像的認(rèn)證。由于其特有的性質(zhì),我的算法也有一定的特性。首先產(chǎn)生的水印信息是高斯偽隨機(jī)碼,這是因?yàn)槲铱紤]到,在具體的一副圖像中,不同的主體植入的水印信息是不同的,而我現(xiàn)在植入隨機(jī)序列作為信息,就具有一定的普遍性了。還有,我做的是不可見水印,也就無所謂植入的信息是否有直觀意義了。之后是對水印信息進(jìn)行海明編碼,其作用是為了防止在傳輸過程中的客觀出錯。對信息進(jìn)行置亂則是加密的需要了。做完了這些準(zhǔn)備工作后即可以植入水印信息了。我的算法采用分塊DCT植入的方法,即把圖像分成8*8的小塊,每個都植入水印信息。最后就是對圖像進(jìn)行攻擊測試了。我一共選用了10種常見的攻擊,一一做實(shí)驗(yàn),驗(yàn)證我算法的性能。
下面就給出這個算法的框架圖。

圖3.4 本程序的框圖
第四章 圖像認(rèn)證半脆弱水印算法的詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)
在實(shí)際應(yīng)用中,一個實(shí)用的數(shù)字媒體認(rèn)證系統(tǒng)應(yīng)大致滿足一些基本要求。如對篡改操作與否應(yīng)具備極強(qiáng)的判斷能力;應(yīng)對數(shù)字媒體內(nèi)容被篡改的程度進(jìn)行有效描述;在無法得知原始數(shù)字媒體內(nèi)容或其它與真實(shí)信號內(nèi)容相關(guān)的信息條件下,判斷可能發(fā)生的篡改操作的具體類別,例如信號處理中的濾波、壓縮、還是替換操作等。


4.1 算法思路
由于本算法是要實(shí)現(xiàn)對圖像的認(rèn)證功能,故在算法上有一定的特點(diǎn)。由于具體水印信息的不確定性,本論文加入的水印信息是個隨機(jī)的噪聲碼,這樣在水印信息上就具有一定的普遍性了。算法首先是在擴(kuò)頻域?qū)λ⌒畔⑦M(jìn)行預(yù)處理,采用的方法有海明編碼,直序擴(kuò)展,以達(dá)到一定的加密和抗傳輸錯誤要求。嵌入算法是在DCT域分塊植入水印信息。檢測算法和嵌入算法是個相逆的過程。最后把提取的水印和原水印進(jìn)行相關(guān)系數(shù)比較,從而判斷是否受到篡改攻擊。


4.2 各步驟詳細(xì)設(shè)計(jì)
模塊化程序設(shè)計(jì)就是把一個復(fù)雜的程序分成若干小部分,分部來進(jìn)行設(shè)計(jì),以達(dá)到簡化設(shè)計(jì)的目的。水印算法現(xiàn)在大都采用這種方法。論文的算法把程序分成如下三個部分:水印預(yù)處理、水印嵌入和水印檢測。


4.2.1水印預(yù)處理的實(shí)現(xiàn)
要想得到安全的水印,在嵌入目標(biāo)水印前必須要對其進(jìn)行一個預(yù)處理的過程。也就是加密的過程。本算法是用海明編碼和偽隨機(jī)碼進(jìn)行置亂以隱藏加入的水印信息。如果傳輸?shù)臄?shù)據(jù)位是m位,加了r位冗余位,那么總共傳輸?shù)臄?shù)據(jù)單元是m+r位。 為了能夠發(fā)現(xiàn)這m+r位數(shù)據(jù)單元在傳輸?shù)侥康亩撕笫欠癯鲥e,并能夠指明是在哪一位出錯,那么r至少應(yīng)該能夠代表m+r+1種狀態(tài)。r比特能夠代表2r不同狀態(tài)。 因此,2r>=m+r+1 。若m=7,則滿足上式的最小r值為:4。下面以一個例子來說明海明碼的糾錯原理。
海明碼的接收端的公式:
S3= P3⊕ D4⊕D3 ⊕D2
S2= P2⊕D4 ⊕D3 ⊕D1 (4.1)
S1= P1⊕D4 ⊕D2 ⊕D1
假定海明碼1010101在傳送中由于偶然錯誤變成了1000101 ,
S3= P3⊕ D4⊕D3 ⊕D2=0⊕1⊕0 ⊕0 =1
S2= P2⊕D4 ⊕D3 ⊕D1=0⊕1⊕ 0 ⊕1=0
S1= P1⊕D4 ⊕D2 ⊕D1=1⊕1⊕ 0 ⊕1=1
因此,由S3S2S1= 101,指出第5位錯,應(yīng)由0變1。這樣就可以糾錯了。
本文的算法要求先實(shí)現(xiàn)海明編碼,根據(jù)本論文加入的水印信息是34*4的偽隨機(jī)碼,所以實(shí)現(xiàn)海明編碼后得到的是36*7的編碼。
for i=1:36
s=8*x0(i,1)+4*x0(i,2)+2*x0(i,3)+x0(i,4);
switch s
case 0
x0(i,5)=0;x0(i,6)=0;x0(i,7)=0;
case 1
x0(i,5)=0;x0(i,6)=1;x0(i,7)=1;
case 2
x0(i,5)=1;x0(i,6)=1;x0(i,7)=0;
case 3
x0(i,5)=1;x0(i,6)=0;x0(i,7)=1;
case 4
x0(i,5)=1;x0(i,6)=1;x0(i,7)=1;
case 5
x0(i,5)=1;x0(i,6)=0;x0(i,7)=0;
case 6
x0(i,5)=0;x0(i,6)=0;x0(i,7)=1;
case 7
x0(i,5)=0;x0(i,6)=1;x0(i,7)=0;
case 8
x0(i,5)=1;x0(i,6)=0;x0(i,7)=1;
case 9
x0(i,5)=1;x0(i,6)=1;x0(i,7)=0;
case 10
x0(i,5)=0;x0(i,6)=1;x0(i,7)=1;
case 11
x0(i,5)=0;x0(i,6)=0;x0(i,7)=0;
case 12
x0(i,5)=0;x0(i,6)=1;x0(i,7)=0;
case 13
x0(i,5)=0;x0(i,6)=0;x0(i,7)=1;
case 14
x0(i,5)=1;x0(i,6)=0;x0(i,7)=0;
case 15
x0(i,5)=1;x0(i,6)=1;x0(i,7)=1;
end;
end;
由于本身我們嵌入的水印信息是高斯正態(tài)分布序列,本身就具有一定的無序性,再加上之后用偽碼進(jìn)行了置亂,很好的達(dá)到了加密的目的。為了抵抗在傳輸過程中的偶然錯誤,偽碼用了海明碼糾錯。所以檢測的時(shí)候我用相關(guān)的糾錯解碼技術(shù)就可再現(xiàn)水印信息。



關(guān)鍵詞: 圖像認(rèn)證 半脆弱水印

評論


技術(shù)專區(qū)

關(guān)閉