基于Arnold變換的數(shù)字圖像加密算法
目前常用的圖像置亂方法有Arnold變換、幻方變換、Tangram算法、Conway游戲、Gray碼變換等。Arnold變換算法簡單且具有周期性,所以在圖像信息隱藏方面得到了很好的應(yīng)用。下面我就給大家介紹一種基于改進(jìn)的Arnold變換和擴(kuò)展的多維Arnold變換并且加入了Logistic混沌映射的圖像加密算法。
一、關(guān)于Arnold變換
設(shè)有單位正方形上的點(diǎn)(x,y),將點(diǎn)(x,y)變到另一點(diǎn)(x′,y′)的變換為:

此變換稱作二維Arnold變換,簡稱Arnold變換。可見Arnold變換實(shí)際上是一種點(diǎn)的位置移動。
對于正方形數(shù)字圖像,我們可以把其表示成:

式中N是數(shù)字圖像矩陣的階數(shù);Fxy表示坐標(biāo)為(x,y)的像素點(diǎn)的灰度值。將Arnold變換應(yīng)用在數(shù)字圖像上,可以通過像素點(diǎn)坐標(biāo)的改變而改變圖像灰度值的布局,把數(shù)字圖像看作一個(gè)矩陣,可由式(3)實(shí)現(xiàn)圖像像素點(diǎn)的置亂。

式中(x,y)是原圖像中像素點(diǎn)的位置坐標(biāo);(x′,y′)是變換后該像素點(diǎn)對應(yīng)的位置坐標(biāo)。
對于二維平面上的位置變換來說,可以由上述的Arnold變換推廣出一類變換,滿足“位置移動”的要求。有專家證明了對于如下2×2的變換矩陣:
,當(dāng)其元素滿足ad-bc=1時(shí),它對平面坐標(biāo)的變換可作為一種置亂變換,所以可將Arnold變換推廣為:

式中參數(shù)a,b是正整數(shù);N是數(shù)字圖像矩陣的階數(shù)。
另外還有專家將Arnold變換推廣到高維的情形,相應(yīng)的變換矩陣為:

對于矢量(x0,x1,…,xN-1)T,做如下變換(x′0,x′1,…,x′N-1)T=AN(x0,x1,…,xN-1)T,這就給定了一種在N維空間上離散網(wǎng)格點(diǎn)的移動方式。
二、圖像加密、解密算法
1、圖像加密算法
(1)位置置亂
首先產(chǎn)生Arnold變換的參數(shù)a,b值的序列,利用簡單的logistic混沌映射來實(shí)現(xiàn)。
Logistic映射的函數(shù)式如:
![]()
其中當(dāng)μ=4時(shí)系統(tǒng)處于混沌狀態(tài),此時(shí)系統(tǒng)產(chǎn)生的序列具有隨機(jī)性,遍歷性,對初值的敏感性,其范圍為(0,1)。以K1和K2為初值產(chǎn)生兩個(gè)混沌序列,其中K1和K2的范圍亦為(0,1)。對產(chǎn)生的兩個(gè)混沌實(shí)值序列均從第一百個(gè)實(shí)值開始取用,組成實(shí)值序列X1和X2。
對于實(shí)值XK(i)=0b1b2b3b4b5…序列YK由式(7)得到:

然后把Y1(i)和Y2(i)的值分別賦給參數(shù)ai和bi。
![]()
設(shè)方形圖像Fxy的大小為N×N,即x∈[1,N],y∈[1,N],利用式(9)對整個(gè)圖像做變換,變換迭代n1次所得圖像記為F′xy:

式中x和y分別表示原圖像矩陣像素點(diǎn)的橫縱坐標(biāo);x′和y′分別表示圖像經(jīng)Arnold變換后圖像矩陣的像素點(diǎn)橫縱坐標(biāo)。
將圖像F′xy分為B×B塊,每塊有N2/B2個(gè)點(diǎn)。將最終加密的密圖F″xy分成N2/B2塊,每塊有B×B個(gè)點(diǎn),使N2/B2μB2。圖像F′xy和位置置亂后圖像F″xy的分塊矩陣分別記為Block1和Block2,Block1可表示為:

其中(m1,m2)為圖像F′xy分塊矩陣的塊位置坐標(biāo),取出F′xy的每個(gè)分塊,對其進(jìn)行n2次Arnold變換,每塊做變換所取的a,b值都是不同的,如式(11)所示。

式中x=1,2,…,N;y=1,2,…,N;x′=1,2,…,N/B;y′=1,2,…,N/B。然后將Block1中變換后的第一塊的像素點(diǎn)分布在Block2中每一塊的第一個(gè)位置上,將Block1中變換后的第二塊的像素點(diǎn)分布在Block2中每一塊的第二個(gè)位置上,依此類推,直到Block1最后一塊的所有像素點(diǎn)分布在Block2中每塊的最后一個(gè)位置上,該過程由式(12)實(shí)現(xiàn)。

式中(m1,m2)為圖像F′xy分塊矩陣的塊位置坐標(biāo);x″,y″為加密后圖像F″xy的像素點(diǎn)的橫縱坐標(biāo)。至此完成了對圖像的位置置亂。
(2)灰度置亂
首先取出位置置亂后的圖像F″xy第一列像素點(diǎn)的灰度值,對其進(jìn)行N維Arnold變換,即

其中L是圖像的灰度級,將變換后的列向量放入到密圖D的最后一列上,然后取出圖像的第二列像素點(diǎn)的灰度值如上做N維的Arnold變換,將結(jié)果放入密圖的倒數(shù)第二列,依此類推,直到將圖像的最后一列變換后結(jié)果放入到密圖的第一列,至此完成了對圖像灰度值的一次列置亂?;叶戎档男兄脕y方法與此類似,首先取出列置亂后圖像D的第一行像素點(diǎn)的灰度值,對其轉(zhuǎn)置向量做如上Arnold變換,即:

然后將變換結(jié)果放入到密圖D′的最后一行,依此類推,直到將圖像的最后一行像素點(diǎn)的灰度值置亂變換后的結(jié)果放入到密圖D′的第一行,至此完成對圖像灰度值的一次行置亂。可以通過多次行和列的置亂迭代得到較好的加密圖像。對于擴(kuò)展的N維空間Arnold變換其周期計(jì)算要復(fù)雜得多,而且由于圖像不同行不同列可能的灰度值有不同的組合排列,這導(dǎo)致要恢復(fù)原始圖像需要完成的變換次數(shù)很大,而且難以確定,給破譯造成了困難。
(3)密鑰設(shè)計(jì)
本算法有3個(gè)密鑰,將產(chǎn)生混沌序列的初始值K1和K2作為密鑰,K1和K2的取值范圍為(0,1)。設(shè)K3是一個(gè)12位的十進(jìn)制數(shù),如K3=12305678912表示n1=123,n2=056,n3=789,n4=123,即圖像位置置亂時(shí)整體變換迭代次數(shù)為123次,各分塊變換迭代次數(shù)為56次,圖像灰度置亂中行變換迭代次數(shù)為789次,列迭代次數(shù)為123次。
2、加密算法的步驟
設(shè)Fxy是一個(gè)N階的正方形圖像,其中x=1,2,3,…,N,y=1,2,3,…,N,則利用該算法對圖像Fxy進(jìn)行文件加密的具體步驟如下:
(1)利用logistic混沌映射產(chǎn)生Arnold變換矩陣的參數(shù)a,b的序列,對整個(gè)圖像做矩陣參數(shù)a=a0,b=b0的Arnold變換,并迭代n1次產(chǎn)生圖像F′xy;
(2)將圖像F′xy分成B×B塊,將位置置亂后的密圖F″xy分成N2/B2塊,每塊有B×B個(gè)點(diǎn),取出圖像F′xy第一塊中的各像素點(diǎn)對應(yīng)放入矩陣partimage中,對圖像塊partimage做參數(shù)=a1,b=b1的Arnold變換,迭代n2次產(chǎn)生圖像塊lastpart,并將lastpart中的點(diǎn)依次放入密圖F″xy中每個(gè)圖像塊的第一個(gè)像素點(diǎn)的位置;
(3)取出圖像F′xy第二塊中的各像素點(diǎn)對應(yīng)放入矩陣partimage中,對partimage做矩陣參數(shù)a=a2,b=b2的Arnold變換,迭代n2次產(chǎn)生圖像塊lastpart,并將lastpart中的點(diǎn)依次放入密圖F″xy中每個(gè)圖像塊的第二個(gè)像素點(diǎn)的位置;
(4)重復(fù)步驟3的操作,直到將F′xy中最后一塊的所有像素點(diǎn)分布在F″xy中每塊的最后一個(gè)位置上,至此完成了圖像位置置亂過程,得到位置置亂密圖F″xy。
(5)對位置置亂后圖像F″xy做灰度值的列置亂迭代n3次,得到圖像D。然后對列置亂后圖像D做灰度值的行置亂迭代n4次。
解密算法與加密算法密鑰相同,利用Arnold變換的周期性,以及矩陣除法可實(shí)現(xiàn)圖像的解密。
小知識之Arnold變換
Arnold變換是一種常用的圖像置亂技術(shù)。










