周琳娜,唐 鑫,吳正哲,鄧云騰,李岱霖
(1.北京郵電大學(xué) 網(wǎng)絡(luò)空間安全學(xué)院,北京 100876;2.國(guó)際關(guān)系學(xué)院 網(wǎng)絡(luò)空間安全學(xué)院,北京 100091)
隨著全球信息化的建設(shè),信息安全在各個(gè)領(lǐng)域變得越來越重要,例如云數(shù)據(jù)安全技術(shù)[1-3]、水印算法研究[4-5]??赡嫘畔㈦[藏[6-12]是信息安全領(lǐng)域的關(guān)鍵技術(shù)之一,其以可逆的方式將秘密數(shù)據(jù)嵌入到覆蓋載體中。到目前為止,可逆信息隱藏主要工作有基于差值擴(kuò)展[6]、直方圖平移[7-10]和預(yù)測(cè)誤差擴(kuò)展[11-12]的算法。像素值排序(Pixel Value Ordering,PVO)[13]是實(shí)現(xiàn)可逆信息隱藏的一種新興的有效手段。通過對(duì)一個(gè)塊中的像素值按升序排序,使用次大值像素預(yù)測(cè)最大值像素,使用次小值像素預(yù)測(cè)最小值像素,分別生成預(yù)測(cè)誤差,并通過預(yù)測(cè)誤差擴(kuò)展來實(shí)現(xiàn)數(shù)據(jù)嵌入。與傳統(tǒng)的預(yù)測(cè)誤差擴(kuò)展方法相比,基于像素值排序的方法通過排序使得預(yù)測(cè)更準(zhǔn)確,從而減少了擴(kuò)展中的無效平移。然而,對(duì)于粗糙塊,由于像素間的波動(dòng)性較大,預(yù)測(cè)的準(zhǔn)確性仍然面臨很大的不確定性。隨之而來的無效平移不可避免地影響了數(shù)據(jù)嵌入的不可感知性。
像素塊按波動(dòng)性排序是解決這一問題的一種有效手段。通過計(jì)算像素塊的波動(dòng)值,可以區(qū)分平滑塊和粗糙塊。通過優(yōu)先在平滑塊中嵌入數(shù)據(jù),可有效減少無效平移,從而提高不可感知性。當(dāng)前,像素塊的波動(dòng)值計(jì)算方法可分為4類。① 基于塊內(nèi)的非擴(kuò)展像素計(jì)算塊波動(dòng)值[13-16]。其中,最常見的方法是計(jì)算塊內(nèi)次大值與次小值的差值作為塊的波動(dòng)值。但是,在這類方法中,外部大量像素往往被忽略,即使其中一些像素也能反映塊的波動(dòng)性。而且,只使用塊內(nèi)兩個(gè)像素來定義塊波動(dòng)性并不準(zhǔn)確,缺乏對(duì)于豎直和水平方向像素相關(guān)性的考量;② 考慮了外部右鄰域和下鄰域的鄰接像素,使用像素塊右側(cè)兩列像素和底部?jī)尚邢袼豙17-20],定義波動(dòng)值為鄰接上下文像素豎直和水平方向差的絕對(duì)值之和。由于涉及到周圍塊的像素值變化,為了保證可逆性,按照從下到上、從右到左逆序進(jìn)行數(shù)據(jù)提取和恢復(fù)。然而,這類方法僅僅考慮了右鄰域和下鄰域,沒有考慮左鄰域和上鄰域的上下文像素,如果擴(kuò)展像素出現(xiàn)在塊的左上角,遠(yuǎn)離上下文像素,預(yù)測(cè)精度會(huì)受到顯著影響;③ 使用了全包圍上下文像素策略來評(píng)估波動(dòng)性[21-22],引入了更多像素,以提高波動(dòng)值計(jì)算的準(zhǔn)確性。該方法大部分的工作都是在雙層嵌入的基礎(chǔ)上進(jìn)行設(shè)計(jì)。除邊界像素外,將載體圖像分為陰影塊和空白塊兩個(gè)塊集,選取陰影塊的4個(gè)相鄰空白塊中的像素作為上下文像素,計(jì)算陰影塊的波動(dòng)值,嵌入容量一半的比特被嵌入到陰影塊后,用相同的方法計(jì)算空白塊的波動(dòng)值;再將剩下的另一半比特嵌入到空白塊中,提取過程與嵌入過程相反,保證了算法的可逆性。在該類算法中,選取相鄰上下鄰域一行、左右鄰域一列或者相鄰上下鄰域兩行、左右鄰域兩列的像素作為上下文像素,塊波動(dòng)值被定義為每個(gè)鄰域中兩個(gè)連續(xù)像素在豎直或水平方向上差的絕對(duì)值之和。然而,在塊波動(dòng)值的計(jì)算中沒有考慮到像素在雙斜對(duì)角方向的一致性,對(duì)于較小的分塊,塊內(nèi)像素距離接近且相關(guān)性較強(qiáng),僅考慮水平豎直兩個(gè)方向上的上下文像素不容易區(qū)分波動(dòng)性,考慮雙斜對(duì)角方向的一致性可以更好地提升預(yù)測(cè)精度。此外,對(duì)于較大或分塊不均勻的分塊,即使塊局部波動(dòng)性好也不能說明該塊平滑,各個(gè)方向上的上下文像素一致性均應(yīng)被納入考慮;④ 同時(shí)使用了塊內(nèi)外的相關(guān)上下文像素來計(jì)算所選塊的波動(dòng)值,選取與預(yù)測(cè)相關(guān)的相鄰像素[23-25]。如選取塊中最大兩個(gè)像素和最小兩個(gè)像素的周圍8個(gè)鄰接像素作為上下文像素,考慮了像素點(diǎn)水平、豎直、雙斜對(duì)角4個(gè)方向上像素的一致性。該算法雖然對(duì)像素點(diǎn)4個(gè)方向上鄰域的像素都進(jìn)行了考慮,但是僅僅計(jì)算像素點(diǎn)的局部波動(dòng)性限制了預(yù)測(cè)的準(zhǔn)確性,對(duì)于較大的分塊不能準(zhǔn)確地判斷塊的波動(dòng)性。而且,該類算法不能適用于前沿的預(yù)測(cè)器,只適合擴(kuò)展像素少的情況下秘密信息的嵌入。
針對(duì)以上提到的問題,文中提出了一種基于優(yōu)化塊選擇策略的高性能像素值排序方法,以提高數(shù)據(jù)嵌入的隱蔽性。所提方法是首個(gè)同時(shí)考慮像素塊水平、豎直和雙斜對(duì)角方向像素一致性的塊選擇方法。選取塊外8個(gè)方向上的部分像素為上下文像素,并將上下文像素的一致性定義為像素兩側(cè)的上下文像素在豎直、水平或雙斜對(duì)角方向上差的絕對(duì)值。特別地,在計(jì)算完同一方向上兩個(gè)不同鄰域內(nèi)的像素差后,將所得結(jié)果再次求差,體現(xiàn)為同一方向上的像素一致性。定義塊的波動(dòng)值為上述所有數(shù)值的絕對(duì)值之和。為了進(jìn)一步提高數(shù)據(jù)嵌入的不可感知性,同時(shí)考慮像素的空間位置,通過定義切比雪夫距離來過濾掉不適合進(jìn)行擴(kuò)展的像素,減少無效平移。實(shí)驗(yàn)結(jié)果表明,所提方法相比現(xiàn)有方法,能夠?qū)崿F(xiàn)不可感知性的提升。
文中工作的主要貢獻(xiàn)如下:
(1)提出了一種基于優(yōu)化塊選擇策略的高性能可逆信息隱藏框架。該框架支持改進(jìn)的塊選擇和相應(yīng)的擴(kuò)展像素距離篩選策略,這兩種策略都大大提高了預(yù)測(cè)的準(zhǔn)確性和不可感知性。得益于上下文像素的定義方法,在數(shù)據(jù)提取階段,所提框架確保計(jì)算出的塊波動(dòng)值與嵌入階段一致,從而確保可逆性。
(2)提出了一種基于多方向預(yù)測(cè)的塊波動(dòng)值計(jì)算方法。該方法使用水平、豎直和雙斜對(duì)角4個(gè)方向的上下文像素計(jì)算波動(dòng)值,并且對(duì)同一方向上的上下文像素綜合考慮,極大地提高了預(yù)測(cè)的準(zhǔn)確性。
(3)加入了對(duì)擴(kuò)展像素空間位置的考慮。對(duì)于需要參與擴(kuò)展的像素,使用切比雪夫距離計(jì)算像素空間位置距離,并且根據(jù)分塊大小自適應(yīng)確定閾值。對(duì)于較大或者長(zhǎng)寬不均勻的平滑塊,該方案能夠篩選掉不適合擴(kuò)展的像素,減少無效平移的數(shù)量,進(jìn)一步提升不可感知性。實(shí)驗(yàn)結(jié)果表明,在嵌入相同數(shù)量的水印比特的條件下,所提算法可實(shí)現(xiàn)更好的預(yù)測(cè)精度和隱蔽性。
2013年,文獻(xiàn)[13]在預(yù)測(cè)誤差擴(kuò)展(Prediction Error Expansion,PEE)算法的基礎(chǔ)上提出了一種基于像素值排序(PVO)的可逆信息隱藏算法。在每個(gè)塊中,像素點(diǎn)按照升序排序,使用次大值像素預(yù)測(cè)最大值像素,次小值像素預(yù)測(cè)最小值像素,通過所得預(yù)測(cè)誤差來確定是否進(jìn)行嵌入。對(duì)于像素值排序算法,波動(dòng)小的塊更有利于可逆數(shù)據(jù)隱藏[26]。優(yōu)先選擇波動(dòng)小的像素塊進(jìn)行預(yù)測(cè)誤差擴(kuò)展,可以有效減少無效平移,從而提高不可感知性。為了實(shí)現(xiàn)這一目的,進(jìn)行塊波動(dòng)值的計(jì)算,文獻(xiàn)[13]考慮到了塊內(nèi)像素的一致性,將塊波動(dòng)值定義為塊中次大值與次小值像素的差。由于其簡(jiǎn)單性,在許多基于像素值排序算法的可逆隱藏方案中都有使用,如PVO[8]和IPVO(Improved Pixel Value Ordering)[16]。但是,由于只有兩個(gè)內(nèi)部像素參與波動(dòng)值計(jì)算,得到的值不能準(zhǔn)確反映對(duì)應(yīng)塊的波動(dòng)性情況。作為改進(jìn),一種基于塊外像素計(jì)算波動(dòng)值的方法被廣泛應(yīng)用[16-19]?;舅枷胧鞘褂孟袼貕K外部的右側(cè)相鄰兩列和下側(cè)相鄰兩行的像素作為上下文像素,將波動(dòng)值定義為每個(gè)相鄰像素之間豎直和水平差的絕對(duì)值之和,以提高波動(dòng)值計(jì)算的準(zhǔn)確性。在此基礎(chǔ)上,文獻(xiàn)[20]定義標(biāo)準(zhǔn)差反映像素塊中像素值的離散程度,使用像素塊的右鄰域、下鄰域和右下領(lǐng)域3個(gè)相鄰像素塊,通過計(jì)算相鄰像素塊的加權(quán)標(biāo)準(zhǔn)差區(qū)分平滑塊和粗糙塊,考慮到了像素塊內(nèi)整體的波動(dòng)性。然而,這類方法僅僅使用到了右鄰域和下鄰域,參與計(jì)算的像素?cái)?shù)量有限,左鄰域和上鄰域的上下文像素沒有考慮,一旦目標(biāo)像素出現(xiàn)在所選塊的左上角,且距離上下文像素較遠(yuǎn),則會(huì)對(duì)預(yù)測(cè)精度產(chǎn)生較大影響。文獻(xiàn)[21]提出了一種全封閉上下文策略,通過實(shí)驗(yàn)對(duì)比,發(fā)現(xiàn)距離該塊最近的像素對(duì)波動(dòng)值計(jì)算是有幫助的。因此,該算法只選擇那些接近像素塊最近一行或一列的上下文像素,塊的波動(dòng)值被計(jì)算為塊中兩個(gè)連續(xù)像素在豎直和水平方向上差的絕對(duì)值之和。由于塊的上、下、左、右鄰域像素都用來作為上下文像素開展波動(dòng)值計(jì)算,在此基礎(chǔ)上執(zhí)行塊選擇策略可以更好地挑選出波動(dòng)小的塊優(yōu)先嵌入。文獻(xiàn)[22]也通過全包圍像素算法實(shí)現(xiàn)更精確的計(jì)算。對(duì)于邊界塊,將來自上、下、左、右鄰接像素的數(shù)量加倍,指定塊外兩行和兩列像素作為上下文像素,具體定義為水平或豎直方向上兩個(gè)連續(xù)像素之間差的絕對(duì)值之和,取得了不錯(cuò)的效果。然而,雙斜對(duì)角方向的一致性并沒有被納入波動(dòng)值計(jì)算之中。為了更好地選擇上下文像素,文獻(xiàn)[23]提出了一種同時(shí)考慮內(nèi)外上下文像素的自適應(yīng)波動(dòng)值計(jì)算方法。具體來說,以像素值較大的一側(cè)為例,將最大值次大值的8個(gè)相鄰像素、次大值本身和包含最大值次大值的最小邊框矩形中的部分像素作為上下文像素,波動(dòng)值定義為上下文像素集合中的最大值減去最小值除以像素個(gè)數(shù)。然而,對(duì)于粗糙塊,由于仍然只有兩個(gè)像素參與波動(dòng)計(jì)算,改進(jìn)相當(dāng)有限。作為改進(jìn)方案,文獻(xiàn)[24]改進(jìn)了上下文像素的定義,以消除不必要的相鄰像素。以像素值較大的一側(cè)為例,首先,選取所選塊最大值的8個(gè)相鄰像素,刪除涉及到其他塊的最大值最小值像素,保證了算法可逆性;此外,為了進(jìn)一步改進(jìn),可對(duì)上下文像素求平均值,去除了與平均值偏差較大的像素,波動(dòng)值定義為上下文像素的平均值與次大值差的絕對(duì)值。該算法消除了無效的上下文像素,提高了波動(dòng)值計(jì)算的準(zhǔn)確性。然而,由于上下文像素圍繞擴(kuò)展像素選取,所以該類方法對(duì)于較大的分塊不能準(zhǔn)確地評(píng)估波動(dòng)性。而且,隨著研究的進(jìn)一步開展,現(xiàn)有的預(yù)測(cè)器可以在平滑塊中嵌入更多的比特,平滑塊內(nèi)的像素需要更多的擴(kuò)展,該算法僅適用于基礎(chǔ)像素值排序算法。
面向基于像素值排序的可逆信息隱藏算法,文中提出了一種高性能的優(yōu)化塊選擇策略。該方法考慮了圖像塊內(nèi)像素在水平、豎直、雙斜對(duì)角4個(gè)方向的一致性,相比已有算法大大提高了所衡量圖像塊波動(dòng)值的準(zhǔn)確性。為了實(shí)現(xiàn)更好的不可感知性,進(jìn)一步考慮了參與預(yù)測(cè)誤差計(jì)算的像素之間的位置關(guān)系,優(yōu)先在空間距離接近的像素對(duì)中嵌入數(shù)據(jù)。首先給出波動(dòng)值計(jì)算的過程,然后在波動(dòng)值的基礎(chǔ)上根據(jù)擴(kuò)展像素的切比雪夫距離進(jìn)行二次判斷篩選,最后給出基于優(yōu)化塊選擇策略的嵌入和提取過程。
在文中所提的塊選擇策略的像素值排序算法中,首先需要選擇上下文像素來計(jì)算每個(gè)分塊的波動(dòng)值。以一個(gè)分塊為例,其內(nèi)部像素在水平、豎直、雙斜對(duì)角方向的一致性均反映了其波動(dòng)性。在每個(gè)方向上,像素之間的一致性越強(qiáng),塊就越平滑。將圖像分成n個(gè)大小相同、互不重疊的塊,下面以圖1所示的一個(gè)t×w的圖像塊為例,介紹上下文像素選取以及塊波動(dòng)值計(jì)算過程。該計(jì)算方法同樣適用于其他大小的圖像塊。
圖1 分塊與上下文像素選取
黑粗框區(qū)域?yàn)樾枰?jì)算波動(dòng)值的t×w像素塊,為了方便表達(dá),中間省略的像素用…表示。使用其最外圈像素距離為2以內(nèi)的部分像素點(diǎn)作為上下文像素來計(jì)算塊波動(dòng)值,在(t+4)×(w+4)的窗口框中,未使用到的像素點(diǎn)用×來表示。黑色單線圓圈表示水平方向利用到的上下文像素,黑色雙線圓圈表示豎直方向利用到的上下文像素,黑色虛線圓圈表示雙斜對(duì)角方向利用到的上下文像素。為了提升嵌入容量,用于計(jì)算塊波動(dòng)值的上下文像素會(huì)再次利用,在嵌入過程中按正序從左到右、從上到下掃描和處理塊,而在提取過程中按逆序從下到上、從右到左掃描和處理塊,以此保證算法的可逆性。
上下文像素包含圍繞中心點(diǎn)集的兩圈像素點(diǎn)x1,x2,…,x4w∪y1,y2,…,y4t∪z1,z2,…,z8。分別劃分為水平組、豎直組和雙斜對(duì)角組。在每個(gè)方向上,相鄰上下文像素點(diǎn)差值反映像素的局部同質(zhì)性[27]。然而,對(duì)于較大的分塊,僅使用局部同質(zhì)性并不能全面地評(píng)估像素塊的波動(dòng)性。因此,基于局部相鄰上下文像素的差異,計(jì)算同一方向上所有上下文像素的一致性,并由此定義塊的波動(dòng)值。同時(shí),對(duì)于距離像素塊最近一行和一列的像素,也將其作為波動(dòng)值計(jì)算的一部分。
對(duì)水平方向,定義局部波動(dòng)值Hi(i∈[1,w])如下:
(1)
其中,x1,x2,…,x4w表示分塊水平方向的上下文像素。
像素塊在水平方向的全局波動(dòng)值定義為
(2)
對(duì)豎直方向,定義局部波動(dòng)值Vi(i∈[1,t])如下:
(3)
其中,y1,y2,…,y4t表示分塊豎直方向的上下文像素。
像素塊在豎直方向的全局波動(dòng)值定義為
(4)
對(duì)雙斜對(duì)角方向,定義局部波動(dòng)值Oi(i∈[1,2])如下:
(5)
其中,z1,z2,…,z8表示分塊雙斜對(duì)角方向的上下文像素。
像素塊在雙斜對(duì)角方向的全局波動(dòng)值定義為
LO=O1+O2。
(6)
距離目標(biāo)塊外圈像素距離為1的每?jī)蓚€(gè)連續(xù)像素之間差的絕對(duì)值之和定義為c,即
(7)
像素塊的波動(dòng)值L定義如下:
L=LH+LV+LO+c。
(8)
計(jì)算出像素塊的波動(dòng)值后,可通過設(shè)定閾值對(duì)平滑塊開展篩選。篩選出的平滑像素塊與文中提出的空間位置篩選算法結(jié)合,優(yōu)先選擇波動(dòng)小的塊來嵌入信息,以減少潛在的無效平移。
現(xiàn)有的基于塊選擇的像素值排序算法在數(shù)據(jù)嵌入的過程中僅通過塊波動(dòng)值來判斷數(shù)據(jù)是否可嵌入,沒有考慮塊內(nèi)最大值與次大值和最小值與次小值的空間位置關(guān)系。對(duì)于較大的分塊或者長(zhǎng)寬不均勻的分塊,若用于參與擴(kuò)展計(jì)算的像素空間位置相關(guān)性較弱,即使相應(yīng)的塊波動(dòng)值較小,在實(shí)際嵌入過程中,也仍然可能導(dǎo)致無效平移,從而降低秘密信息嵌入的不可感知性。基于上述的問題,應(yīng)進(jìn)一步判斷最大值與次大值和最小值與次小值的像素空間位置,具體方法如下。
在節(jié)3.1計(jì)算塊波動(dòng)值時(shí)考慮了雙斜對(duì)角方向的像素一致性,所以對(duì)于某一個(gè)像素點(diǎn),其在水平、豎直、雙斜對(duì)角方向的鄰接像素空間位置都應(yīng)該被定義為1,因此像素空間位置的距離不能簡(jiǎn)單地通過直線距離或者曼哈頓距離來計(jì)算。與中心像素點(diǎn)距離為1的8個(gè)鄰接像素點(diǎn)如圖2所示。
圖2 與中心像素距離為1的8個(gè)鄰接像素點(diǎn)
為了解決這個(gè)問題,使用切比雪夫距離來定義像素空間位置距離,在數(shù)學(xué)上也稱為棋盤距離。根據(jù)波動(dòng)值劃分完平滑塊和粗糙塊后,記錄平滑塊內(nèi)最大值、次大值像素和最小值、次小值像素所在的空間位置。記最大值、次大值像素分別對(duì)應(yīng)點(diǎn)A(q1,r1)、B(q2,r2),切比雪夫距離為dmax。記最小值、次小值像素分別對(duì)應(yīng)點(diǎn)C(q3,r3)、D(q4,r4),切比雪夫距離為dmin。則根據(jù)切比雪夫公式分別可得像素間的距離為
dmax=max(|q1-q2|,|r1-r2|) ,
(9)
dmin=max(|q3-q4|,|r3-r4|) 。
(10)
為了既能篩選掉不適合擴(kuò)展的預(yù)測(cè)誤差對(duì)又能保證嵌入容量,對(duì)于一個(gè)t×w的塊,定義像素空間距離閾值為D,將其與切比雪夫距離dmax、dmin進(jìn)行比較,做進(jìn)一步的嵌入判斷。閾值D可表示為
D=max(t,w)-1 。
(11)
為了在保證嵌入容量的同時(shí)篩選掉不適合擴(kuò)展的像素,如果最大值與次大值的切比雪夫距離dmax和最小值與次小值的切比雪夫距離dmin都大于等于D,則即使此塊波動(dòng)值很小,也不考慮進(jìn)行擴(kuò)展嵌入。特別注意的是,當(dāng)分塊大小為2×2時(shí),不考慮位置篩選,因?yàn)閴K內(nèi)的4個(gè)像素互相距離都為1,沒有遠(yuǎn)近之分。
為了更清晰地說明文中算法,取一個(gè)5×2的塊為例,具體樣例如圖3所示。
(a) 兩對(duì)像素空間位置距離都過大
對(duì)于圖3(a),按照從左到右、從上到下的順序掃描像素,可得序列{85,77,81,82,82,80,81,80,79,83},從大到小排序后可得序列{85,83,82,82,81,81,80,80,79,77}。通過切比雪夫距離公式可得dmax=4,dmin=4,說明該塊擴(kuò)展像素距離過遠(yuǎn),由相鄰像素的一致性可得,其并不適合擴(kuò)展嵌入。對(duì)于圖3(b),按照從左到右、從上到下的順序掃描像素,可得序列{85,83,83,82,83,81,82,80,84,84},從大到小排序后可得序列{85,84,84,83,83,83,82,82,81,80}。通過切比雪夫距離公式可得dmax=4,dmin=1,雖然最大值與次大值距離較遠(yuǎn),但整體來看,塊內(nèi)的波動(dòng)性不大,適合擴(kuò)展嵌入。
首先,將圖像劃分為m個(gè)大小相同且互不重疊的塊,塊內(nèi)n個(gè)像素值從小到大排序后表示為xσ(1)≤xσ(2)≤…≤xσ(n-1)≤xσ(n),如果xσ(u)=xσ(v)并且u 對(duì)于不同的圖像,或同一圖像下不同的嵌入容量,固定的分塊會(huì)限制算法的最優(yōu)解。比如紋理平滑的圖像在低嵌入容量下更適應(yīng)較大的分塊,一方面更多的上下文像素參與到塊的波動(dòng)值計(jì)算,另一方面切比雪夫距離的評(píng)估也更加準(zhǔn)確。相反,對(duì)于紋理復(fù)雜的圖像,小的分塊可以保證更大的嵌入容量。自適應(yīng)選擇最佳分塊的算法可用偽代碼描述如算法1所示。 算法1自適應(yīng)選擇最佳分塊算法。 使用窮舉方法羅列每種分塊大小的可能: size_set=[] 存儲(chǔ)不同分塊 a,b=2,5 設(shè)置每個(gè)分塊邊的最小值和最大值(只能在2~5之間取) foriin range(a,b+1): forjin range(a,b+1): size_set.append((i,j)) 將不同的分塊存入size_set best_para={} psnr最大時(shí)的分塊參數(shù)(閾值和大小) 比較不同分塊結(jié)果: for item in res: 遍歷結(jié)果 if not item[0]: 比較生成的結(jié)果,得到的結(jié)果比當(dāng)前max_psnr大則更改相應(yīng)參數(shù) if item[1][′psnr′] > max_psnr: max_psnr=item[1][′psnr′] best_para[′T′]=item[1][′T′] best_para[′size′]=item[1][′size′] best_para[′psnr′]=′%.3f′ % max_psnr 取3位小數(shù) print(best_para) 輸出最合適的參數(shù)結(jié)果。 圖4是所提出的基于優(yōu)化塊選擇策略的可逆數(shù)據(jù)隱藏算法的圖示。從流程圖可以看出,該框架由兩個(gè)模塊組成:數(shù)據(jù)嵌入模塊和數(shù)據(jù)提取模塊。以嵌入為例,它可以進(jìn)一步分為4個(gè)部分:圖像分割和上下文像素選擇、波動(dòng)值計(jì)算、塊選擇、秘密數(shù)據(jù)嵌入。具體嵌入過程將在下面進(jìn)行詳細(xì)介紹。 圖4 方法框圖 步驟1 預(yù)測(cè)誤差擴(kuò)展。首先,按照節(jié)3.3的方法對(duì)圖像分割并計(jì)算塊的波動(dòng)值。計(jì)算完波動(dòng)值后,對(duì)低于波動(dòng)值閾值的塊進(jìn)行預(yù)測(cè)誤差擴(kuò)展,預(yù)測(cè)誤差可表示為 emax=xσ(n)-xσ(n-1), (12) emin=xσ(1)-xσ(2), (13) 其中,xσ(n)表示分塊中的最大值,xσ(n-1)表示分塊中的次大值,xσ(1)表示分塊中的最小值,xσ(2)表示分塊中的次小值。 步驟2 溢出分析與輔助信息嵌入。為了防止255或0像素值上溢或下溢,可通過找出可能下溢或上溢的像素,并在位置圖中標(biāo)出它們的位置。若像素塊內(nèi)最大值像素為 255,將其減1并使用位置圖將該像素標(biāo)記為1。若像素塊內(nèi)最小值像素為 0,將其加1并使用位置圖將該像素標(biāo)記為1,其他非溢出點(diǎn)標(biāo)記為0。輔助信息由位數(shù)(5 bit)、溢出點(diǎn)位置圖長(zhǎng)度(18 bit)、最后嵌入塊的索引(16 bit)及其嵌入容量(1 bit)、分塊大小(4 bit)、q個(gè)閾值(q×10 bit)組成。利用LSB(Least Significant Bits)方法將輔助信息作為嵌入的一部分嵌入到載體圖像第1行的最低有效位。 步驟3 秘密信息嵌入。為了在達(dá)到最大容量之前實(shí)現(xiàn)較高的不可感知性,優(yōu)先選擇波動(dòng)值小于的塊進(jìn)行嵌入,同時(shí)利用切比雪夫距離對(duì)需要進(jìn)行成對(duì)擴(kuò)展的像素點(diǎn)進(jìn)行判斷,確定最終的擴(kuò)展像素。特別的是,位置圖中標(biāo)記為1的像素不進(jìn)行考慮。剩余的像素,可表示為 (14) 如果emax=1,則通過預(yù)測(cè)誤差擴(kuò)展,將一個(gè)秘密比特b∈{0,1}嵌入到塊的最大像素中;如果emax>1,則最大像素增加1。 另一側(cè),可表示為 (15) 如果emin=-1,則通過預(yù)測(cè)誤差擴(kuò)展,將一個(gè)秘密比特b∈{0,1}嵌入到塊的最小像素中;否則,如果emin<-1,則最小像素減小1。 如框架圖4所示,在接收端的步驟與嵌入相反,詳細(xì)步驟如下。 步驟1 輔助信息提取。首先利用LSB方法提取載體圖像第1行像素的最低有效位,以獲得輔助信息。然后根據(jù)輔助信息確定分塊的大小、閾值等參數(shù)。 (16) 所示的規(guī)則,提取一個(gè)秘密位。最后,通過 (17) 恢復(fù)最大的像素。 (18) 最后,通過 (19) 恢復(fù)最大的像素。 通過實(shí)驗(yàn)來驗(yàn)證所提方案的有效性并評(píng)估其性能。采用了一臺(tái)inter Core i5-6500 CPU @ 3.20 GHz、16 GB RAM和1 TB硬盤驅(qū)動(dòng)器的工作站,所有算法都使用Python 3.7版本實(shí)現(xiàn)。從USC-SIPI 圖像數(shù)據(jù)庫[28]選取6張512×512的灰度圖Lena、Baboon、Clock、Airplane、Lake、Sand進(jìn)行實(shí)驗(yàn),分別如圖5所示。 (a) Lena 首先通過可逆性驗(yàn)證檢查算法的正確性。以圖6(a)Lena圖為例,具體來說,通過判斷原始圖像與恢復(fù)后的圖像是否相同來決定算法是否可逆。嵌入10 000個(gè)隨機(jī)生成的秘密比特以獲得一個(gè)隱藏圖像,如圖6(b)所示。對(duì)圖6(a)和圖6(b)進(jìn)行異或運(yùn)算,結(jié)果如圖6(c)所示,表明已經(jīng)成功嵌入秘密比特。 (a) 原始圖像 嵌入提取過程按照像素塊掃描順序正序嵌入、逆序提取,參與波動(dòng)值計(jì)算的像素實(shí)際上沒有改變,因此得到的序列與嵌入前的序列相同。可使用相同的比較過程找出提取秘密比特的具體位置,提取完10 000位秘密比特后,可以獲得恢復(fù)的圖像。圖7(a)和圖7(b)為原始圖像和恢復(fù)后的圖像,對(duì)原始圖像和恢復(fù)圖像進(jìn)行異或運(yùn)算如圖7(c)所示。根據(jù)異或運(yùn)算原理,可以推斷出恢復(fù)后的圖像與原始圖像完全一致。因此,驗(yàn)證了算法的可逆性。 (a) 原始圖像 為了評(píng)估該算法在視覺質(zhì)量和嵌入容量方面的性能,比較在相同嵌入容量下的峰值信噪比。分別與文獻(xiàn)[13]、文獻(xiàn)[20]、文獻(xiàn)[23]、文獻(xiàn)[24]4種經(jīng)典或最新的方案進(jìn)行了比較。這4種方案都是屬于基于塊選擇改進(jìn)的方案且嵌入方式相同,按照其最優(yōu)的參數(shù)復(fù)現(xiàn)并與文中的方案進(jìn)行對(duì)比,所有的結(jié)果都是平均20次嘗試的結(jié)果。 為了更好地比較算法的不可感知性,在考慮圖像最大嵌入容量后,在固定嵌入容量下對(duì)6副圖片的峰值信噪比進(jìn)行比較。表1顯示了在10 000比特的嵌入容量下,文中算法與其他幾種算法峰值信噪比數(shù)值的對(duì)比。 表1 10 000比特嵌入容量下峰值信噪比對(duì)比 dB 從表1可以看出,在10 000比特的嵌入容量下,提出的方法在Lena、Baboon、Clock、Airplane、Lake、Sand圖像上都產(chǎn)生了令人滿意的性能。對(duì)于紋理平滑圖像,以Airplane為例,文中方案峰值信噪比約為63.308 dB,分別約高于文獻(xiàn)[13]1.281 dB、文獻(xiàn)[20]0.084 dB、文獻(xiàn)[23] 0.291 dB、文獻(xiàn)[24]1.839 dB。對(duì)于紋理復(fù)雜圖像Baboon,所提出的方法比上述4種方法更有效。此外,文中提出的方案6副圖像的峰值信噪比分別約為60.660 dB、54.431 dB、65.175 dB、63.308 dB、59.304 dB、54.818 dB;文中算法的平均峰值信噪比約為59.616 dB,分別約領(lǐng)先文獻(xiàn)[13]0.666 dB、文獻(xiàn)[20]0.232 dB、文獻(xiàn)[23] 0.175 dB、文獻(xiàn)[24]1.129 dB。由此可見,文中算法具有更好的性能。 為了更好地體現(xiàn)文中框架的優(yōu)越性,根據(jù)圖像本身的特點(diǎn)對(duì)于不同的嵌入容量設(shè)定不同的分塊大小和閾值空間。分別比較了這4種算法與文中算法在不同嵌入容量下的峰值信噪比,結(jié)果如圖8所示。 (a) Lean 從圖8中可清楚地看出,隨著嵌入容量的不斷增加,文中算法的峰值信噪比數(shù)值在大多數(shù)情況下都超過了目前最先進(jìn)的方法。以測(cè)試圖像Clock為例,在5 000、10 000、15 000位的嵌入容量下,文中方案的峰值信噪比分別約為68.232 dB、65.175 dB、63.299 dB,明顯優(yōu)于其他方案。究其原因,在PVO方案中,只選取了塊內(nèi)的兩個(gè)像素點(diǎn)來計(jì)算波動(dòng)值,這是非常不準(zhǔn)確的。在文獻(xiàn)[23-24]的方案中,僅僅將波動(dòng)性局限于從局部的區(qū)域選取上下文像素,同時(shí)只針對(duì)最大值次大值或者最小值次小值附近的像素,非常有限。在文獻(xiàn)[20]的方案中,僅僅考慮了像素塊右鄰域和下鄰域的像素,雖然使用標(biāo)準(zhǔn)差更精確,但很多左鄰域和上鄰域相關(guān)性高的像素被忽略。作為對(duì)比,文中提出的方案不僅保證了參與波動(dòng)值計(jì)算的像素個(gè)數(shù)與準(zhǔn)確性,而且將同一方向上的上下文像素進(jìn)行二次運(yùn)算,提高了算法性能。同時(shí),考慮了像素的空間位置,在波動(dòng)值篩選后,利用切比雪夫距離公式對(duì)擴(kuò)展像素之間的空間位置進(jìn)一步判斷篩選,有效地減少了無效平移。因此,文中方案實(shí)際上實(shí)現(xiàn)了較好的不可感知性。 筆者提出了一種基于優(yōu)化塊選擇策略的高性能可逆信息隱藏算法。首先,改進(jìn)了波動(dòng)性的現(xiàn)有定義,同時(shí)考慮了塊外沿水平、豎直和雙斜對(duì)角方向的一致性;其次,考慮了像素塊內(nèi)擴(kuò)展像素的空間位置關(guān)系,使用波動(dòng)值區(qū)分分塊波動(dòng)性后通過切比雪夫距離公式篩選掉不適合擴(kuò)展的像素塊。實(shí)驗(yàn)結(jié)果表明,在所設(shè)計(jì)的波動(dòng)值計(jì)算公式和像素空間位置判斷的幫助下,文中提出的方案提高了算法的性能,實(shí)現(xiàn)了較好的不可感知性。3.4 數(shù)據(jù)的嵌入
3.5 數(shù)據(jù)的提取和圖像恢復(fù)
4 實(shí)驗(yàn)結(jié)果
4.1 可逆性驗(yàn)證
4.2 固定嵌入容量下不可感知性對(duì)比
4.3 不同嵌入容量不可感知性的對(duì)比
5 結(jié)束語