專(zhuān)利名稱(chēng):一種基于預(yù)測(cè)編碼的jpeg無(wú)損壓縮圖像隱寫(xiě)方法
技術(shù)領(lǐng)域:
本發(fā)明是屬于多媒體信號(hào)處理領(lǐng)域,具體涉及一種基于預(yù)測(cè)編碼的JPEG無(wú)損壓縮圖像的隱寫(xiě)方法。
背景技術(shù):
隨著多媒體信號(hào)處理技術(shù)的不斷進(jìn)步,信息隱藏正在越來(lái)越多地被應(yīng)用到信息安全領(lǐng)域。對(duì)于數(shù)字圖像的隱寫(xiě)主要有兩種方法,即空域和變換域方法??沼蜃畹湫偷碾[寫(xiě)算法是LSB替代法,該算法簡(jiǎn)單易行,但早已被攻破。作為變換域的隱寫(xiě)算法可分為基于DFT、DCT和DWT三種,其中大部分是針對(duì)基于DCT的JPEG有損壓縮圖像,代表算法有J-Steg、F5、OutGuess、Model-Based等,但這些算法都相繼被攻破。
對(duì)基于預(yù)測(cè)編碼的JPEG無(wú)損壓縮圖像的隱寫(xiě)算法,至今還沒(méi)有學(xué)者提出,只有一些用于圖像壓縮的基于預(yù)測(cè)編碼的隱寫(xiě)算法,但卻不能直接運(yùn)用JPEG無(wú)損壓縮圖像中,而且還存在著密文圖像質(zhì)量差,抗攻擊能力弱等缺點(diǎn),所以缺乏實(shí)用價(jià)值。
相關(guān)的參考對(duì)比文獻(xiàn)有以下2篇[1].Yuan-Hui Yu,Chin-Chen Chang,Yu-Chen Hu.Hiding secret data inimages via predictive coding.Pattern Recognition Vol.38,2005,pp.691-705[2].Guangjie Liu,Yuewei Dai,Zhiquan Wang.BreakingPredictive-Coding-Based Steganography and Modification for EnhancedSecurity.IJCSNS International Journal of Computer and Network Security,Vol.6,No.3B March 2006,pp.144-149.
發(fā)明內(nèi)容
本發(fā)明克服了現(xiàn)有的基于預(yù)測(cè)編碼的隱寫(xiě)算法的密文圖像質(zhì)量差、抗攻擊能力弱等缺點(diǎn),提出一種嵌入數(shù)據(jù)量大、密文圖像質(zhì)量好、對(duì)圖像統(tǒng)計(jì)特征破壞小的基于預(yù)測(cè)編碼的JPEG無(wú)損壓縮圖像隱寫(xiě)方法。
為了實(shí)現(xiàn)上述目的,本發(fā)明方法所采用的技術(shù)方案如下一種基于預(yù)測(cè)編碼的JPEG無(wú)損壓縮圖像隱寫(xiě)方法,包括機(jī)密數(shù)據(jù)的嵌入和提取兩個(gè)過(guò)程。JPEG無(wú)損壓縮的載體圖像先經(jīng)過(guò)Huffman解碼,恢復(fù)出預(yù)測(cè)誤差值,并對(duì)其進(jìn)行更新;然后將機(jī)密數(shù)據(jù)嵌入在更新后的預(yù)測(cè)誤差中;最后將嵌入數(shù)據(jù)后的預(yù)測(cè)誤差值再進(jìn)行Huffman編碼,生成JPEG無(wú)損壓縮的密文圖像。
嵌入時(shí)需要三個(gè)數(shù)據(jù)①未經(jīng)預(yù)測(cè)編碼的當(dāng)前像素灰度值x、②由鄰近的嵌入后的像素(a、b、c)對(duì)當(dāng)前像素的預(yù)測(cè)值 ③當(dāng)前像素待嵌入的h位機(jī)密序列轉(zhuǎn)換成的十進(jìn)制數(shù)d。其中x和 是在嵌入過(guò)程中暫存起來(lái)的,為此設(shè)計(jì)了一種先進(jìn)先出的、長(zhǎng)度為N+1(N為圖像每行的像素?cái)?shù)目)的鏈表隊(duì)列,如圖2所示,該隊(duì)列所有節(jié)點(diǎn)的初始化值為128。因?yàn)檫@種隊(duì)列的長(zhǎng)度限制為N+1,所以在任何時(shí)刻,它的第一、第二、以及最后一個(gè)值分別對(duì)應(yīng)于預(yù)測(cè)器模板(如圖3所示)內(nèi)的a、b、c像素值。在本發(fā)明中,需要使用兩個(gè)這樣的隊(duì)列,其中一個(gè)用于暫存載體圖像的灰度值;另一個(gè)用于暫存嵌入后的密文圖像的灰度值,具體嵌入過(guò)程如下(1)從載體圖像的隊(duì)列中讀取a、b、c的值,根據(jù)選擇的預(yù)測(cè)器類(lèi)型(由JPEG文件的標(biāo)記段得到),計(jì)算當(dāng)前像素的預(yù)測(cè)值。
(2)JPEG無(wú)損壓縮的源圖像經(jīng)過(guò)Huffman解碼就得到嵌入前的預(yù)測(cè)誤差值,該值加上第(1)步得出的預(yù)測(cè)值就是載體圖像當(dāng)前像素的灰度值x,并將計(jì)算結(jié)果x壓入載體圖像的隊(duì)列以用于恢復(fù)載體圖像的后續(xù)像素的灰度值。
(3)從密文圖像的隊(duì)列中讀取另外的a、b、c的值,同樣再計(jì)算預(yù)測(cè)值 然后,第(2)步得出的實(shí)際值x減去該預(yù)測(cè)值 得到更新后的預(yù)測(cè)誤差值e=x-x^.]]>(4)將機(jī)密數(shù)據(jù)嵌入到更新后的預(yù)測(cè)誤差值e中。
(5)預(yù)測(cè)誤差經(jīng)過(guò)數(shù)據(jù)嵌入后由e變?yōu)閑′,對(duì)e′進(jìn)行Huffman編碼,以生成JPEG無(wú)損壓縮的密文圖像碼流。
(6)計(jì)算嵌入后的密文圖像當(dāng)前像素的灰度值s=x^+e′,]]>并將其壓入到密文圖像的隊(duì)列中,以用于嵌入后續(xù)的鄰近像素。
其中,嵌入步驟(4)是本發(fā)明方法嵌入過(guò)程的主要步驟。假設(shè)嵌入率為每像素h位,h位二進(jìn)制序列轉(zhuǎn)換成十制數(shù)為d。嵌入方法的主要思想是,在e′mod2h=d和0≤e′+x^≤255]]>的條件下,使得嵌入前后的預(yù)測(cè)誤差e和e′的差值的絕對(duì)值最小,即e′=argmine′med2h=d0≤e′+x^≤255|e-e′|]]>詳細(xì)的嵌入流程如圖5所示,其中mod是模運(yùn)算,它的運(yùn)算結(jié)果一直為正,對(duì)負(fù)值e′,相當(dāng)于e′先加上255后再作模運(yùn)算。首先計(jì)算待嵌入秘密信息d與預(yù)測(cè)誤差模運(yùn)算后的差值m=d-emod2h,然后作如下判斷1)若m=0,則預(yù)測(cè)誤差e無(wú)需修改,直接取e′=e。
2)若|m|<2h-1,則預(yù)測(cè)誤差e要加上m,取e′=e+m。
3)若|m|=2h-1,則預(yù)測(cè)誤差e交替地加上2h-1或者減去2h-1,換言之,對(duì)于相同的e值,若前一次加上2h-1,則下一次減去2h-1,反之亦然。
4)若m>2h-1,則預(yù)測(cè)誤差e要加上m-2h,取e′=e+m-2h。
5)若m<-2h,則預(yù)測(cè)誤差e要加上m+2h,取e′=e+m+2h。
最后,要檢查數(shù)據(jù)嵌入是否造成了圖像灰度值超出
的范圍,若x^+e′>255,]]>則e′=e′-2h;若x^+e′<0,]]>則e′=e′+2h。
本發(fā)明方法具體的提取過(guò)程是JPEG無(wú)損壓縮的密文圖像先經(jīng)過(guò)Huffman解碼,得出嵌入后的預(yù)測(cè)誤差值e′;然后作模運(yùn)算求出嵌入的數(shù)據(jù)d,并將它轉(zhuǎn)換成二進(jìn)制序列。其中d=e′mod2h。
本發(fā)明方法的有益效果是密文圖像質(zhì)量好、圖像統(tǒng)計(jì)特性破壞小、算法安全性高、實(shí)用性強(qiáng)。
圖1是本發(fā)明方法的嵌入過(guò)程示意框圖。
圖2是本發(fā)明方法的提取過(guò)程示意框圖。
圖3是本發(fā)明中設(shè)計(jì)的鏈表隊(duì)列。
圖4是JPEG標(biāo)準(zhǔn)中定義的預(yù)測(cè)器模板。
圖5是本發(fā)明方法的詳細(xì)嵌入流程圖。
圖6是本發(fā)明方法的一個(gè)實(shí)施例,(a)發(fā)送端;(b)接收端。
圖7是本方法實(shí)施例所使用的圖像,(a)載體圖像Lena;(b)嵌入的秘密圖像(中大logo)。
圖8實(shí)驗(yàn)圖像數(shù)據(jù);(a)原始載體圖像圖7(a)的灰度值;(b)原始載體圖像預(yù)測(cè)誤差值;(c)嵌入后密文圖像圖7(b)預(yù)測(cè)誤差值;(d)嵌入后密文圖像灰度值。
圖9是采用PCB和本發(fā)明方法嵌入后的預(yù)測(cè)誤差直方圖比較,其中密文圖像是用隨機(jī)序列以每個(gè)像素2位對(duì)Lena圖像進(jìn)行滿(mǎn)嵌入;圖9(a)是嵌入前的預(yù)測(cè)誤差直方圖;圖9(b)是用PCB算法嵌入后的預(yù)測(cè)誤差直方圖;圖9(c)是采用本發(fā)明該當(dāng)嵌入后的預(yù)測(cè)誤差直方圖。
圖10是χ2分析方法對(duì)(a)PCB和(b)本發(fā)明方法的測(cè)試結(jié)果,其中密文圖像是用隨機(jī)序列以每個(gè)像素1位對(duì)Lena圖像進(jìn)行滿(mǎn)嵌入。
具體實(shí)施例方式
下面結(jié)合實(shí)施例和附圖對(duì)本發(fā)明作進(jìn)一步說(shuō)明。
如圖1至圖6所示,本發(fā)明方法的嵌入過(guò)程如下首先,選擇要傳遞的秘密信息,可以是文字、圖像、音頻等任何文件,并將其轉(zhuǎn)換成二進(jìn)制序列。本例以如圖6(b)所示95×90的灰度圖像作為秘密信息,文件大小為1142字節(jié),對(duì)其進(jìn)行加密并轉(zhuǎn)換成二進(jìn)制序列為01000010…0,共9136位。
其次,選擇一幅JPEG無(wú)損壓縮的載體圖像,圖像的尺寸可以秘密信息的長(zhǎng)度作為參考,即要選取合適的嵌入率h。本例以如圖7(a)所示512×512×8bits的Lena圖像作為載體圖像,其總文件大小為169140字節(jié),灰度值如圖8(a)所示。由于該圖像壓縮采用的是JPEG標(biāo)準(zhǔn)中定義的預(yù)測(cè)器1,即預(yù)測(cè)值取為x^=a]]>(見(jiàn)圖4中的預(yù)測(cè)器模板),所以Huffman編碼前的預(yù)測(cè)誤差值如圖9(b)所示。計(jì)算嵌入率h=9136/(512×512)=0.035,嵌入時(shí)取h=1,即每個(gè)像素嵌入1位。
然后,利用本發(fā)明的嵌入方法,將二進(jìn)制序列嵌入到載體圖像中。具體過(guò)程為a)第1個(gè)像素的預(yù)測(cè)值為128,加上預(yù)測(cè)誤差34,得出原始載體圖像灰度值為x=128+34=162;密文圖像的預(yù)測(cè)值為x^=128,]]>于是更新后的預(yù)測(cè)誤差仍為e=162-128=34。由于當(dāng)前像素要嵌入“0”,即d=0,根據(jù)嵌入公式得出嵌入后的預(yù)測(cè)誤差為e′=34,所以嵌入后密文圖像的第1個(gè)像素灰度值仍為s=128+34=162。
b)第2個(gè)像素的預(yù)測(cè)值為162,加上預(yù)測(cè)誤差0,得出原始載體圖像灰度值為x=162+0=162;密文圖像的預(yù)測(cè)值為x^=162,]]>于是更新后的預(yù)測(cè)誤差為e=162-162=0。由于當(dāng)前像素要嵌入“1”,即d=1,根據(jù)嵌入公式得出嵌入后的預(yù)測(cè)誤差為e′=1,所以嵌入后密文圖像的第2個(gè)像素灰度值為s=162+1=163。
c)第3個(gè)像素的預(yù)測(cè)值為162,加上預(yù)測(cè)誤差0,得出原始載體圖像灰度值為x=162+0=162;密文圖像的預(yù)測(cè)值為x^=163,]]>于是更新后的預(yù)測(cè)誤差為e=162-163=-1。由于當(dāng)前像素要嵌入“0”,即d=0,根據(jù)嵌入公式得出嵌入后的預(yù)測(cè)誤差為e′=0,所以嵌入后密文圖像的第3個(gè)像素灰度值為s=163+0=163。
d)第4個(gè)像素的預(yù)測(cè)值為162,加上預(yù)測(cè)誤差-1,得出原始載體圖像灰度值為x=162-1=161;密文圖像的預(yù)測(cè)值為x^=163,]]>于是更新后的預(yù)測(cè)誤差為e=161-163=-2。由于當(dāng)前像素要嵌入“0”,即d=0,根據(jù)嵌入公式得出嵌入后的預(yù)測(cè)誤差為e′=-2,所以嵌入后密文圖像的第4個(gè)像素灰度值為s=163-2=161。
e)……依此類(lèi)推,處理完載體圖像的每一個(gè)像素,最后得到JPEG無(wú)損壓縮的密文圖像,相對(duì)于原始載體圖像的峰值信噪比為65.79dB,其文件大小為169215字節(jié)。由此可見(jiàn)應(yīng)用本方法隱藏信息后,對(duì)載體圖像的改動(dòng)很小。
嵌入后的密文圖像經(jīng)過(guò)信道(可以是網(wǎng)絡(luò),無(wú)線(xiàn)等)傳輸?shù)浇邮斩?如圖6(b)所示)。在接收端的提取操作如下
首先,利用本發(fā)明的提取方法,從接收的密文圖像中提取出9136位的二進(jìn)制序列。具體過(guò)程為a)讀取密文圖像的第1個(gè)預(yù)測(cè)誤差值e′=34,根據(jù)提取公式,計(jì)算得出d=0;b)讀取密文圖像的第2個(gè)預(yù)測(cè)誤差值e′=1,根據(jù)提取公式,計(jì)算得出d=1;c)讀取密文圖像的第3個(gè)預(yù)測(cè)誤差值e′=0,根據(jù)提取公式,計(jì)算得出d=0;d)讀取密文圖像的第4個(gè)預(yù)測(cè)誤差值e′=-2,根據(jù)提取公式,計(jì)算得出d=0;e)……以此類(lèi)推,即可提取9136位的序列01000010…0。
最后,根據(jù)嵌入的加密方法對(duì)提取出的二進(jìn)制序列解密,并重組回圖像文件,達(dá)到數(shù)據(jù)的無(wú)失直、秘密的傳遞。
由于本發(fā)明方法具有較高的安全性,攻擊者很難從信道中截獲的圖像偵測(cè)出是否隱藏信息,即使他按本發(fā)明的方法對(duì)截獲的每幅圖像都進(jìn)行提取,因?yàn)榍度氲拿孛苄畔⒁呀?jīng)加了密,所以他只能得到無(wú)意義的二進(jìn)制序列。實(shí)際上,由于傳輸信道(如網(wǎng)絡(luò))中存在無(wú)數(shù)多的圖像,所以攻擊對(duì)每幅圖像都提取是不切實(shí)際的。因此,可以說(shuō)本發(fā)明的具有實(shí)際應(yīng)用意義,能夠提高秘密通信的安全性。
下面是本發(fā)明方法與文獻(xiàn)[1]中的基于預(yù)測(cè)編碼的隱寫(xiě)算法(以下簡(jiǎn)稱(chēng)PCB算法)相比所具有的優(yōu)點(diǎn)1.密文圖像質(zhì)量好。
表1給出了Lena圖像(如圖6(a)所示)分別采用PCB和本發(fā)明方法在不同嵌入率時(shí)的密文圖像PSNR值(單位dB),其中h表示每個(gè)像素嵌入的位數(shù),測(cè)試密文圖像是用隨機(jī)序列對(duì)Lena圖像進(jìn)行滿(mǎn)嵌入。從表1可以看出采用本發(fā)明方法嵌入后的密文圖像質(zhì)量明顯優(yōu)于采用PCB算法嵌入后的密文圖像。
表1用PCB和本發(fā)明方法嵌入的密文圖像的PSNR值(單位dB)
2.圖像統(tǒng)計(jì)特性破壞小。
圖9畫(huà)出了Lena圖像采用PCB算法和本發(fā)明方法嵌入后的預(yù)測(cè)誤差值的直方圖的比較,其中密文圖像的嵌入率為每個(gè)像素2位。圖9(a)是嵌入前的預(yù)測(cè)誤差直方圖。圖9(b)是用PCB算法嵌入后的預(yù)測(cè)誤差直方圖,在該圖中可以清楚地看到相鄰誤差值的出現(xiàn)頻率趨于相等,或者說(shuō),在直方圖上出現(xiàn)了明顯的階梯,留下了嵌入的痕跡,影響了算法的安全性。圖9(c)是用本發(fā)明方法嵌入后的預(yù)測(cè)誤差直方圖,與圖9(a)相比,圖9(c)變化較小,仍然保持平滑的輪廓,所以安全性高。
3.算法安全性高。
χ2分析方法常用來(lái)測(cè)試隱寫(xiě)算法的安全性。用PCB和JLS算法分別以每個(gè)像素1位的強(qiáng)度嵌入到Lena圖像,用χ2分析方法針對(duì)這兩種密文圖像的預(yù)測(cè)誤差值進(jìn)行測(cè)試,結(jié)果如圖10(a)和10(b)所示,其中,橫軸為測(cè)試所用的預(yù)測(cè)誤差的個(gè)數(shù)與總的預(yù)測(cè)誤差個(gè)數(shù)(或圖像總像素)的比例,縱軸為測(cè)試圖像被隱寫(xiě)的概率。從圖10(a)可以看出,用χ2分析方法很容易從載體圖像中區(qū)分出PCB嵌入的密文圖像。而圖10(b)說(shuō)明χ2分析方法對(duì)JLS算法不再有效。因此,JLS算法的安全性確實(shí)比PCB算法高。
4.實(shí)用性強(qiáng)。
PCB算法只能作為一種學(xué)術(shù)研究,并不能直接應(yīng)用到某種格式的圖像中,而本發(fā)明直接針對(duì)JPEG無(wú)損壓縮圖像進(jìn)行研究,具有一定的實(shí)用價(jià)值。
權(quán)利要求
1.一種基于預(yù)測(cè)編碼的JPEG無(wú)損壓縮圖像隱寫(xiě)方法,包括機(jī)密數(shù)據(jù)的嵌入和提取兩個(gè)過(guò)程,其特征是所述機(jī)密數(shù)據(jù)的嵌入過(guò)程包括以下步驟a.對(duì)JPEG無(wú)損壓縮的載體圖像進(jìn)行Huffman解碼,恢復(fù)出預(yù)測(cè)誤差值;b.將機(jī)密數(shù)據(jù)嵌入在預(yù)測(cè)誤差中;c.將改動(dòng)后的預(yù)測(cè)誤差值再進(jìn)行Huffman編碼,生成JPEG無(wú)損壓縮的密文圖像;所述機(jī)密數(shù)據(jù)的提取過(guò)程包括以下步驟a.對(duì)JPEG無(wú)損壓縮的密文圖像進(jìn)行Huffman解碼,得出嵌入后的預(yù)測(cè)誤差值e′;b.作模運(yùn)算求出嵌入的數(shù)據(jù)d,并將它轉(zhuǎn)換成二進(jìn)制數(shù)序列。
2.根據(jù)權(quán)利要求1所述的JPEG無(wú)損壓縮圖像隱寫(xiě)方法,其特征是所述機(jī)密數(shù)據(jù)嵌入時(shí)需要三個(gè)數(shù)據(jù)①未經(jīng)預(yù)測(cè)編碼的當(dāng)前像素灰度值x;②由鄰近的嵌入后的像素(a、b、c)對(duì)當(dāng)前像素的預(yù)測(cè)值 ;③當(dāng)前像素待嵌入的h位機(jī)密序列轉(zhuǎn)換成的十進(jìn)制數(shù)d。
3.根據(jù)權(quán)利要求2所述的JPEG無(wú)損壓縮圖像隱寫(xiě)方法,所述x和 是在嵌入過(guò)程中暫存起來(lái)的,采用先進(jìn)先出、長(zhǎng)度為N+1的鏈表隊(duì)列表示。
4.根據(jù)權(quán)利要求1或2所述的JPEG無(wú)損壓縮圖像隱寫(xiě)方法,所述機(jī)密數(shù)據(jù)就是嵌入在預(yù)測(cè)誤差值e=x-x^]]>中,假設(shè)嵌入后的預(yù)測(cè)誤差值為e′,則嵌入方法的主要思想是在e′mod2h=d和0≤e′+x^≤255]]>的條件下,使得嵌入前后的預(yù)測(cè)誤差e和e′的差值的絕對(duì)值最小,即e′=argmin|e-e′|;其中mod是指模運(yùn)算,它的運(yùn)算結(jié)果一直為正,對(duì)負(fù)值e′,相當(dāng)于e′先加上512后再作模運(yùn)算;當(dāng)|m|=2h-1時(shí),交替地加上2h-1或者減去2h-1,其中m=d-emod2h;換言之,對(duì)于相同的e值,若前一次加上2h-1,則下一次減去2h-1,反之亦然。
5.根據(jù)權(quán)利要求1所述的JPEG無(wú)損壓縮圖像隱寫(xiě)方法,所述機(jī)密數(shù)據(jù)提取步驟中嵌入數(shù)據(jù)d的計(jì)算公式為d=e′mod2h。
全文摘要
本發(fā)明公開(kāi)一種基于預(yù)測(cè)編碼的JPEG無(wú)損壓縮圖像的隱寫(xiě)方法,屬于多媒體信號(hào)處理領(lǐng)域。本方法在JPEG無(wú)損壓縮圖像中嵌入數(shù)據(jù)時(shí),首先進(jìn)行Huffman解碼,得到預(yù)測(cè)誤差;然后將機(jī)密數(shù)據(jù)嵌入在預(yù)測(cè)誤差中;最后再對(duì)修改后的預(yù)測(cè)誤差進(jìn)行Huffman編碼,以生成JPEG無(wú)損編碼的密文圖像。嵌入時(shí)利用模運(yùn)算,不但降低了由于數(shù)據(jù)嵌入對(duì)載體圖像的改動(dòng),保持了較高的密文圖像質(zhì)量;而且使得嵌入數(shù)據(jù)即存在于無(wú)損壓縮的JPEG碼流中,又存在于解壓縮后的密文圖像中。此外,交替的嵌入方法,很好地保持了載體圖像的預(yù)測(cè)誤差值的直方圖特征,因而能夠抵抗各種基于直方圖分析的攻擊。
文檔編號(hào)H04N7/32GK101080013SQ20071002868
公開(kāi)日2007年11月28日 申請(qǐng)日期2007年6月19日 優(yōu)先權(quán)日2007年6月19日
發(fā)明者方艷梅, 劉永清, 李斌, 黃繼武 申請(qǐng)人:中山大學(xué)