• 沒有找到結果。

第二章 文獻回顧

在這一章下面會一一介紹前人所提過的隱寫術文獻。以下介紹的前人方法全 部都是以圖像像素作為載體的可逆式隱寫術,並跟DE 演算法相互關聯,且有幾 個方法之間有被引用的關聯性。在此章的最後一節,我們會再度探討前人方法的 優缺點,以及解釋我們想改良前人演算法的原因。

差值擴張相關文獻

據演算法做法,隱寫術可分為空間域(spatial domain)及頻域(frequency domain)兩大做法 [15]。其空間域是直接在圖片本身的「長度」要素上(如:像素 等)做一些調整,以達到藏匿資料的目的 [16]。而頻域則可視需要利用圖片上的 像素作為函數,並使用傅立葉變換(Fourier transform)、小波轉換(Wavelet

transform)等頻率轉換運算式,將頻率可視化至像素上,並再用空間域作法藏匿資 料即可 [16]。而從第二章第二節介紹的差值擴張(DE)即是空間域的做法。

在比較上,空間域的做法比較直接、容易理解且運作較快,而頻域的演算法 雖然穩健性強,但演算法較複雜、需要花額外的運作時間在頻域的轉換上 [16]。

以下我們舉了以DE 演算法做為參考的前人文獻作舉例:

1. Firmansyah 等人提出了使用從圖片的 LSB 上執行 DE 隱藏資料的空間域 隱寫術 [17]。其作法是將圖片上所有像素的 LSB 另外拼湊成一張矩 陣,並在該矩陣上執行DE 藏匿資料,其後把新算好的矩陣算回至圖片 上,以達到隱寫的效果。雖然不適合儲存較大的檔案,但步驟及演算法 非常明瞭。

2. Angreni 等人提出了使用共同數值的 DE 改良空間域隱寫術 [18]。其作 法是提出一個隨機的共同數值,使所有圖片中的像素值跟該共同數值之 間求出差值,並用這些差值套用DE 演算法的嵌入資料方式。這個方法 聲稱可做到將資料完全塞滿至整張圖片,同時也可增加圖片品質,但圖 片品質、容量的多寡仍必須視使用者訂出的共同數值而定。

7

3. 葉氏提出了搭配小波轉換的DE 改良頻域隱寫術 [19]。其作法是先將圖 片作小波轉換,並為每個像素作類似差值擴張的隱寫方法。雖然隱蔽性 提高,但因為該文獻的差值擴張算法稍微跟原DE 演算法不同,且嵌入 完成後使用反小波轉換時可能會有像素值溢位的情形,必須額外空出圖 片空間去紀錄溢位還原資訊,工程相對比較複雜,演算法較不穩定。

4. Gao 等人提出了搭配離散餘弦變換(Discrete cosine transform)的 DE 改良 頻域浮水印演算法 [20]。其作法是先在圖片上各像素組上做離散餘弦變 換,再用DE 的方式在像素組其中兩個像素嵌入資料。雖然增強了隱蔽 性,也可保有高品質的圖片,不過因為僅取少量的像素來藏匿資料,所 以不支援高容量,同時工程也比較複雜,容量甚至取決於使用者設定的 門檻值而定。

而在第二章第三節要介紹的降低差值擴張(RDE)也是屬於空間域隱寫術,所 以演算法也是相對比較容易理解、速度也比較快的那一型,同時也具備了比DE 還要高的圖片品質、容量等優點。另外RDE 演算法的構成是以步驟行的方法所 組成,其相鄰步驟之間的互相影響力並不會太重,改良演算法時可以直接修改其 中的步驟或添加穿插新步驟即可。這也是我們採用了以RDE 演算法為基底的隱 寫術作為研究改善對象的原因。

差值擴張 (Difference Expansion)

差值擴張(DE)是由 J. Tian 在 2003 年提出的一項灰階圖像隱寫術演算法 [9],

它是基於圖像中的像素差分(pixel value differencing,簡稱 PVD) [3]的方法,在一 張圖片的兩個像素的差值中修改、嵌入要隱藏的訊息。它也是一個可逆式隱寫 術,所以取出原本的隱藏資料的同時也可以恢復原本的圖像。DE 演算法的好處 在於可以放寬容量限制以及降低演算法複雜度。

就因為具有低複雜、高容量性等優點,DE 演算法在隱寫術界上引用次數甚 廣,可以算是隱寫術的主流之一。DE 演算法的大略運作示意圖如圖 4。

8

圖 4 DE 演算法運作示意圖

下面介紹DE 演算法的主要作法:首先在圖片載體上分割成若干個不相重疊 的像素組,其每個像素組皆由相鄰的兩個像素構成,如圖 5。

圖 5 像素組在圖片分割示意圖

在像素組中索取兩個像素的數值𝑘1

& 𝑘

2,並從中計算兩個像素之間的平均 值

w 跟差值 z:

𝑤 = ⌊𝑘1+ 𝑘2

2 ⌋ , 𝑧 = 𝑘1− 𝑘2 (2.1) 其中平均值

w 是作為在差值 z 儲存好資料後回復成像素的必備數據。算出來

的差值

z 之後要擴張至 2 倍,並將隱藏資料的其中一個位元(𝑏 = [0,1] )嵌入,規

劃出新的差值𝑧

𝑧= 2 × 𝑧 + 𝑏 (2.2) 再計算新的像素值𝑘′1 & 𝑘′2來取代原本的兩個像素值:

𝑘′1 = 𝑤 + ⌊𝑧+ 1

2 ⌋ , 𝑘′2 = 𝑤 − ⌊𝑧

2⌋ (2.3)

𝑘1 𝑘2

9

但要特別注意的是,新的像素值不能超過色階數值的範圍(灰階色階數值定在 0~255 之間),所以在儲存像素值之前,會先使用以下方程式檢查新的像素值是否 會溢位:

0 ≤ 𝑤 + ⌊𝑧+ 1

2 ⌋ ≤ 255, 0 ≤ 𝑤 − ⌊𝑧

2⌋ ≤ 255 (2.4) 透過(2.4)這方程式,我們可以再簡寫成(2.5),將新的差值𝑧及平均w 直接套 用,檢查(2.2)所製造的新差值𝑧是否會造成新像素值溢位,若通過了即可用(2.3) 寫回像素內:

|𝑧| ≤ min(2(255 − 𝑤), 2𝑤 + 1) (2.5) 若要將隱藏資料提取出來時,可以再使用(2.1)重新提取兩個像素的平均值𝑤′

及差值𝑧,從差值取出最低有效位(least significant bit,簡稱 LSB)即可取得隱藏資

b,之後再將差值𝑧

縮減成一半,就能回復成原來的差值

z,並使用(2.3)恢復原

圖的像素值:

以上的擴張並嵌入差值方式我們簡稱為「可擴張(Expandable)」,新的差值𝑧 若符合(2.5)的條件時,可以稱𝑧或該像素組為expandable。

不過,expandable 方法在多數的情況都會造成差值變大導致溢位,間接導致 圖片載體空間不足,所以在DE 演算法內加入了「多重嵌入」機制,以預防因 expandable 的缺點造成空間不足的缺陷。從 DE 演算法開始,就採用了一個像素 組可以採用不同模式來嵌入隱藏資料的機制,有一些引用此演算法的隱寫術文 獻,也有將這個機制再度引用或做一些改良。在DE 演算法中,一個像素組有三 種可套用的嵌入模式:

1. 可擴張(Expandable):使用 DE 演算法的擴展方程式(2.2)擴張差值並嵌入 資料的方式,即以上我們講過的DE 嵌入方法跟解嵌入方法。

2. 可變動(Changeable):同樣基於 PVD 的方法,在差值上的 LSB 上直接儲 存資料。

𝑏 = LSB(𝑧), 𝑧 = ⌊𝑧

2 (2.6)

10

3. 不可變動(Non-changeable):不儲存資料、保持像素組原封不動。

其中changeable 的嵌入跟解嵌入方法跟 expandable 類似,只不過在嵌入資料 之前會先將原差值

z 的 LSB 部分提取並儲存一個額外的位元(bs),以便在恢復原

圖像時可以回復原圖的差值:

𝑏𝑠 = LSB(𝑧) where 𝑏𝑠 = [0,1] (2.7) 在嵌入方法的(2.2)換成此方程式,直接將差值 z 的 LSB 替換成隱藏資料 b:

𝑧= 2 × ⌊𝑧

2⌋ + 𝑏 (2.8)

在changeable 同樣也要注意寫回的像素不可以超越色階數值範圍,只要經過 (2.5)方程式的檢查通過,新差值𝑧或該像素組就可以被稱為changeable。

在解嵌入演算法中,回復差值的(2.6)將會以下列方程式代替,用原本用(2.7)

提取的

bs 替換回原本的差值:

𝑏 = LSB(𝑧), 𝑧 = 2 × ⌊𝑧

2⌋ + 𝑏𝑠 (2.9) 從這裡再度回到多重嵌入機制的話題:在DE 演算法設計多重嵌入機制的功 能主要是為了若expandable 嵌入資料發生數值溢位等問題時,還有其他的方法可 以走,changeable 同時也避免了差值過大而導致圖片過度失真的問題,進而提升 圖片載體品質,也有助於增加圖片載體容量。

另外在多重嵌入機制下,儲存各個像素組的嵌入模式是使用位置地圖

(Location map)的方式,在每個位置地圖單位資料(嵌入模式)上都各自對應所屬的 像素組。由DE 演算法自行判斷該像素組適合使用哪一種嵌入模式,同時採用的 模式將以代號的方式記錄在位置地圖上,以供使用解嵌入演算法時,即可呼叫這 些位置地圖的代號記錄來使用對應的解嵌入方程式,補助取回隱藏資料及還原圖 像。此外,使用changeable 模式的(2.7)所紀錄的額外資料 bs 也可以使用位置地圖 的方式儲存,在各自對應的changeable 像素組使用對應的 bs 值來還原原本的差 值。

透過以上對expandable、changeable 跟多重嵌入機制的說明,我們可以將整

11 該像素組視為expandable。

總結以上DE 演算法的差值嵌入計算過程,我們將它畫成簡易的有限順序架 構圖:

圖 7 DE 隱寫演算法簡易架構(嵌入側)

圖 7 是 DE 隱寫術中的嵌入步驟圖,將圖片分成數個像素組後,每個像素組

1. 開始 3. 新差值z’符

合expandable?

2. 原差值z = 0 or − 1?

4. 新差值z’符 合changeable?

expandable changeable non-changeable

Yes Yes

12

都將做一次嵌入差值的一系列步驟,直到所有資料被寫進去為止。至於在DE 演 算法所介紹的多重嵌入判斷機制,因為其中的溢位判斷機制(2.5)是透過

expandable 及 changeable 的嵌入方程式(2.2)/(2.8)衍生而來,此判斷機制可以在步 驟3 以後就判斷差值是否使用哪一個機制,或者是跟步驟 4 一起配合使用(在原 DE 隱寫術文獻是直接從原差值做判斷)。另外步驟 4 會根據該像素組套用了哪種 嵌入模式(non-changeable 除外)來使用不同的嵌入方程式來寫入隱藏資料。

圖 8 DE 隱寫演算法簡易架構(解嵌入側)

圖 8 是 DE 隱寫術中的解嵌入步驟圖,跟圖 7 的嵌入側不一樣的是,除分割 及輸出圖像及資料外,像素組解嵌入側動作是跟嵌入側採用相反順序的:嵌入側 是將資料寫入、改變差值,而解嵌入側是將資料提出、還原差值。步驟3 的地方 即是將像素組解嵌入前,就得透過位置地圖判斷其嵌入模式了。另外,若該像素 組是non-changeable 的話,該像素組會直接略過,直接檢測下一組像素組,因為 基本上該像素組沒有做甚麼變動,也沒有塞入隱藏資料。

If “non-changeable”

13

片,可以再針對這張圖片作為載體繼續塞資料做為第二層,塞完後可再拿此圖片 繼續塞資料做為第三層,以此類推。但是原則上已嵌入的圖片再拿來做載體時,

因為該圖片像素之間的差值曾被擴張過,所剩空間可能會隨著嵌入的層數增加而 減少。

降低差值擴張 (Reduced Difference Expansion)

2008 年,D. C. Lou 等人對 J. Tian 的 DE 演算法進行改良,提出了降低差值 擴張(RDE)演算法 [10]。

圖 9 RDE 演算法差值變更步驟示意圖

修改的地方在於如圖 9 的差值變更步驟部分上,比 DE 演算法多了減少差值 的動作(如紅框部分),在資料嵌入差值之前會先將差值減少,其目的是減少使用 擴張差值的方法後隨時會造成新像素值溢位的機率。因為依序減少再擴張差值的 關係,新計算差值會比較接近原圖像差值,這同時也改善了因差值過度擴張而導 致圖片載體像素值相差過大等問題,進而提升圖片品質。

Expandable 的方法上,在經過使用(2.1)將差值及平均算出來後,原差值 z 會 被方程式(2.10)降低至約原差值 1/2 倍的值,製作出中間差值𝑧′,之後才利用(2.2) 將差值擴張及嵌入隱藏資料位元(𝑧 → 𝑧′′),製造新的差值𝑧′′:

𝑧′ = { 𝑧 , if 𝑧 < 2 𝑧 − 2⌊log2𝑧⌋−1 , otherwise

(2.10) 為了成功恢復差值,在RDE 演算法另外新增了一個位置地圖,專門記錄恢

(2.10) 為了成功恢復差值,在RDE 演算法另外新增了一個位置地圖,專門記錄恢

相關文件