本論文提出了一種演算法,它是基於Enhance-RDE of Quads [14]隱寫術方法 做一部份的演算法內部改良,主要目的是以改善輸出後圖片品質最為優先。在該 演算法我們使用特殊方法來優化降低差值演算法的收斂度。
另外,在上一章我們提到Enhance-RDE of Quads [14]原本的演算法有部分方 程式有問題,導致其演算法是無法在所有差值的情況下,都能經過嵌入跟解嵌入 步驟後,完全恢復為原本差值的。為此,我們也在此章節提出了我們的修正方 案,用來解決我們對Enhance-RDE of Quads 所提過的問題。
以下是我們對Enhance-RDE of Quads 提出的修正方案及我們提出的改良方 案:
針對 Enhance-RDE of Quads 的修正方式
在Enhance-RDE of Quads 的降低差值演算法中,我們將替換成如圖 14 所表 示的方案:
圖 14 Enhance-RDE of Quads 降低差值的修正方案結構
同樣是先沿用了(2.10)再降一點數值的手法,在我們的修正方案上改成了雙階 段的方式,將2⌊log2𝑧𝑛⌋−1與⌊log2𝑧′𝑛⌋這兩個部分分開並在各自的階段分別計算,以 便容易處理。同時將位置地圖(LM)的數量改為每個差值各有兩個(𝐿𝑀2𝑛, 𝐿𝑀3𝑛),
一個像素組就需要儲存6 個位置地圖數值:𝑳𝑴𝟐 = (𝐿𝑀20, 𝐿𝑀21, 𝐿𝑀22)、𝑳𝑴𝟑 = (𝐿𝑀30, 𝐿𝑀31, 𝐿𝑀32)。這麼做是為了避免
LM 只有一個的情況下造成有一些差值
跟降低差值演算法不相容的狀況。雖然這個修正方案跟原本Enhance-RDE of25
Quads 的文獻 [14]上所使用的降低差值做法(2.26)仍然有形式上的差異,但在功能 及成效上都差不多。所以我們認為,我們的修正方案確實可以套用在 Enhance-RDE of Quads 上。為方便稱呼,我們把 Enhance-Enhance-RDE of Quads 套用過我們降低差 值做法的新修正演算法為「Fixed Enhance-RDE of Quads」。
在Fixed Enhance-RDE of Quads 嵌入側的降低差值演算法架構可以用圖 15 來顯示(紅框為變動部分):
圖 15 Fixed Enhance-RDE of Quads 降低差值演算法架構
其中𝑧′′′𝑛是經過Fixed Enhance-RDE of Quads 雙階段手法降低差值,並經過 擴張差值並嵌入資料之後的新差值。𝑧′′′𝑛其功能跟RDE 的𝑧′′𝑛一樣,都是經嵌入 處理過後準備存入至像素的預備數值。
透過圖 14 的這一整串的方程式,我們可以再轉換為下列兩個算式:
𝑧′𝑛 = 𝑧𝑛− {2⌊log2𝑧𝑛⌋−1 0
, if 𝑧𝑛 ≥ 2
, if 𝑧𝑛 < 2 (3.1) 𝑧′′𝑛 = 𝑧′𝑛 − {⌊log2𝑧′𝑛⌋
0
, if 𝑧′𝑛 ≥ 2
, if 𝑧′𝑛 < 2 (3.2) 將像素組中求出來的差值依序用(3.1)跟(3.2)來減少差值,此後再用下列方程 式計算恢復降低差值的額外資訊𝐿𝑀2𝑛, 𝐿𝑀3𝑛並儲存至位置地圖內,才能繼續執行 接下來的嵌入差值動作(2.14)(𝑧′′𝑛 → 𝑧′′′𝑛):
𝐿𝑀2𝑛 = ⌊log2𝑧𝑛⌋ − ⌊log2𝑧′𝑛⌋, 𝐿𝑀3𝑛 = ⌊log2𝑧′𝑛⌋ − ⌊log2𝑧′′𝑛⌋ (3.3) 在解嵌入演算法上的恢復降低差值演算法中,則是採用原圖 15 降低差值演 算法的相反步驟。在經過(2.6)取出隱藏資料、還原差值(𝑧′′′𝑛 → 𝑧′′𝑛)之後,搭配從 (3.3)算出來的位置地圖資訊𝐿𝑀2𝑛, 𝐿𝑀3𝑛,先後使用(3.4)與(3.5)來還原至原本的差 值:
26
其中expandable 即是我們在這一節所說的兩階段式降低差值方法以及擴張嵌 入差值演算法的所屬模式。Changeable、non-changeable 繼續保有原本 DE 演算法 所擁有的Changeable、non-changeable 步驟。另外,步驟 2 則改為差值 z 為 0 的 時候,直接判定成changeable。雖然說差值為 0 時,使用 expandable 仍然可以使 嵌入並還原的差值變成0,但是考慮到在降低差值部分只使用第一階段方程式 (3.1)時,原差值 0 經嵌入並還原的差值會變成−∞,怕很有可能造成還原差值不
1. 開始 3. 新差值z’符
合expandable?
4. 新差值z’符 合changeable?
expandable
27
穩定的問題而特地設了這個條件。
另外,在changeable 模式下,同樣是套用原本 DE 演算法所提過的
changeable 步驟,只不過因為在一個像素組中,總共要使用三個差值嵌入資料,
所以在嵌入資料時,每個差值都要套用此方程式(2.8)各自嵌入要隱藏的資料其中 一個位元,同時也套用了(2.7)在嵌入差值之前先將原差值的 LSB 提取的機制。在 一個像素組中,總共需要計算三個
BS 參數(𝑩𝑺 = (𝑏𝑠
0, 𝑏𝑠1, 𝑏𝑠2))並儲存至位置地 圖內,每一個BS 參數各自對應像素組其中一個差值。在解嵌入演算法同樣在像
素組三個差值中,搭配從位置地圖儲存下來的三個BS 參數,使用(2.9)在每個差
值上提取資料、回復原差值即可。順帶一提,在嵌入演算法中判斷符合嵌入模式,我們是採用先計算再判定的 模式的方法來做判斷檢查,如圖 17。我們使用了如圖 16 所提及的檢查順序:
expandable → changeable → non-changeable 如同多重關卡般那樣地檢查,為該像 素組尋找適合地嵌入模式。在每個關卡上,先將新的像素值算出來,事後再檢查 新的像素值是否有溢位。若沒有溢位,就適用該嵌入模式,同時也將原像素值覆 寫成新的像素值,並儲存該模式所用到的位置地圖資料;若有像素值溢位則跳到 下一關卡,以此類推,直到non-changeable 為止。
圖 17 Fixed Enhance-RDE of Quads 嵌入模式判斷作法
像素組嵌入模式的紀錄上,我們使用
CH、LM1 (= [0,1])參數作為像素組嵌
28
入模式的判斷標籤,儲存在位置地圖內,其個別模式中標籤標示如表 1 所示:
表 1 各嵌入模式標籤定義
模式種類 CH LM1
non-changeable 0 0 changeable 1 0 expandable 1 1
在嵌入演算法上可用表 1 上的標籤定義儲存該像素組的嵌入模式,解嵌入演 算法則是使用同樣的表來參考,判定該像素組用了甚麼嵌入模式。
在Fixed Enhance-RDE of Quads 上用到的位置地圖資料參數總共有五種,各 參數功能如表 2 所示:
表 2 Fixed Enhance-RDE of Quads 各位置地圖參數功能定義
參數
容量 (每個像素組)
功能
𝐶𝐻, 𝐿𝑀1 各1 bit 紀錄像素組的嵌入模式,標籤定義請參考表 1。
𝑳𝑴𝟐 1 bit × 3 紀錄expandable 模式第一階段用位置地圖(LM)參數 𝑳𝑴𝟑 1 bit × 3 紀錄expandable 模式第二階段用位置地圖(LM)參數
𝑩𝑺 1 bit × 3 紀錄changeable 模式時各差值的 LSB
其中𝑳𝑴𝟐、𝑳𝑴𝟑跟𝑩𝑺皆是由 3 個數值所組成的向量,每一個數值各自對應 像素組的每一個差值。另外𝑳𝑴𝟐、𝑳𝑴𝟑跟𝑩𝑺在一個像素組中不會同時存在:使 用expandable 模式只儲存𝑳𝑴𝟐、𝑳𝑴𝟑這兩組參數,而 changeable 只要儲存𝑩𝑺這 一組即可。下面我們再整理出了每個嵌入模式所用到的位置地圖參數,以及其所 需要的儲存空間,如表 3:
表 3 Fixed Enhance-RDE of Quads 各嵌入模式所需位置地圖參數及其使用空間 參數名稱
嵌入模式
𝐶𝐻 𝐿𝑀1 𝑳𝑴𝟐 𝑳𝑴𝟑 𝑩𝑺 所需容量
29
Expandable 8 bits
Changeable 5 bits
Non-changeable 2 bits
總結以上講過的修正方案、原Enhance-RDE of Quads 演算法及其它我們所提 過的一些細節,我們可以統整出Fixed Enhance-RDE of Quads 演算法的構造。
圖 18 Fixed Enhance-RDE of Quads 嵌入資料側構造
在嵌入資料側,先將一張灰階圖片分成分成若干組4 × 1的像素組,並將每個 像素組都做出如圖 18 嵌入資料的動作,全部像素組嵌入後若資料還有剩,就再 用此圖片繼續嵌入,直到所有資料嵌入為止。其中圖 18 的嵌入階段部分,除了
「計算差值」及「略過該像素組」這兩個步驟,整體演算法是採用圖 17 使用的 嵌入模式檢查手法,邊計算新像素值邊檢查有無溢位,確定套用某特定嵌入模式 就直接儲存運算過的新像素值及位置地圖資料,不必再計算第二次。而「兩階段 式降低差值」即是使用我們在這一節提過的降低差值修正方案。
30
圖 19 Fixed Enhance-RDE of Quads 提取資料側構造
提取資料側的作法是採用嵌入資料側完全反方向的步驟。同樣先把一張已嵌 入資料的灰階圖片分成若干組4 × 1的像素組,並從上一次儲存的像素組位置開始 如圖 19 做提取資料的動作,若還沒取完所有隱藏資料就再拿此圖片從最後一個 像素組開始檢查,直到檢查過所有像素組為止。其中「還原降低差值至原差值」
即是使用我們在這一節提過的兩階段式降低差值修正方案中的還原差值方式,即 (3.4)跟(3.5)。另外在該像素組為 Non-changeable 的情況下就直接略過該像素組,
跳到上一個像素組繼續。
31
接下來介紹的是我們的改良演算法,它是針對我們從Enhance-RDE of Quads 演算法修正而來的Fixed Enhance-RDE of Quads 作為基礎,在內部改寫其部分演 算法來加強差值的收斂,以提升輸出圖片的品質。要記住:差值是由兩個像素值 之間求出來的差距大小,只要隱寫演算法有辦法將新差值收斂到一定的程度,使 得新的差值近似於原差值,那麼之後計算出來的新像素值相對於原像素值的變更 幅度就不會太大。
為達成目的,在下面我們介紹兩個我們提出的改良方案:
1. 加強兩階段式降低差值收斂 2. 交換像素值以降低原差值
在此論文,我們將我們所提出的改良演算法稱為「Improved Two-Steps-RDE of Quads」。
加強兩階段式降低差值收斂
透過圖 15 我們可以知道,Fixed Enhance-RDE of Quads 的降低差值方式是使 用兩個階段方式將差值降低再降低,但對我們而言,這樣的方法仍然不夠收斂。
所以在Improved Two-Steps-RDE of Quads 上,我們再次運用 Fixed Enhance-RDE of Quads 降低差值的方法,並嘗試在其中一個降低階段做改良,使用了類似除法 的商數餘數概念方法來加強差值的收斂度,使降低過後的差值更接近原差值的一 半。
改良過的降低差值演算法如圖 20 所示:
圖 20 Improved Two-Steps-RDE of Quads 降低差值演算法結構
32 在Improved Two-Steps-RDE of Quads 的降低差值演算法中,乘積參數(𝑚𝑢𝑙𝑛) 成為了收斂差值的關鍵,因為它決定了第二降低差值階段的使用次數。要達成收
33
𝑟𝑒𝑚𝑎𝑖𝑛𝑑𝑒𝑟 = 𝑜𝑓𝑓𝑠𝑒𝑡 − 𝑚𝑢𝑙𝑛 × ⌊log2𝑧′𝑛⌋ (3.12) 5. 假使餘數比⌊⌊log2𝑧′𝑛⌋ 2⁄ ⌋還要小的話(如圖 21 所說的狀況),𝑚𝑢𝑙𝑛參數
就要+1,如方程式(3.13)。此時𝑚𝑢𝑙𝑛才算是正式計算完成。
圖 21 餘數微調方法示意圖
𝑚𝑢𝑙𝑛 = 𝑚𝑢𝑙𝑛+ {1 , if 𝑟𝑒𝑚𝑎𝑖𝑛𝑑𝑒𝑟 > ⌊⌊log2𝑧′𝑛⌋ 2 ⌋ 0 , otherwise
(3.13)
6. 計算完乘數參數𝑚𝑢𝑙𝑛之後,再使用(3.9)配合𝑚𝑢𝑙𝑛參數降低差值,並使用 (3.3)計算位置地圖𝐿𝑀3𝑛即可。
另外,𝑚𝑢𝑙𝑛參數也需要透過位置地圖的方式儲存。在一個像素組中,需要儲 存3 個乘積參數,每一個參數對應一個差值(即𝒎𝒖𝒍 = (𝑚𝑢𝑙0, 𝑚𝑢𝑙1, 𝑚𝑢𝑙2))。等第 二降低差值階段完成之後,𝒎𝒖𝒍參數也會連同其他位置地圖參數一樣儲存於位置 地圖內。還有,在執行Improved Two-Steps-RDE of Quads 的第二降低差值階段 (圖 20 上的 2nd layer)步驟之前,也要跟之前我們講過的 Fixed Enhance-RDE of Quads 一樣,使用(3.6)將差值轉成正數,待第二階段做完後再用(3.7)將差值轉回 原本的正數或負數。
在解嵌入演算法也是同樣套用Fixed Enhance-RDE of Quads 的恢復降低差值 演算法(即(3.4)→(3.5)),但其中一個方程式(3.4)因應第二降低差值階段的方式的修 改而被替換成(3.14),這個需要搭配從第二降低差值階段計算而來的位置地圖參數 𝑳𝑴𝟑跟𝒎𝒖𝒍。
𝑧′𝑛 = 𝑧′′𝑛+ (⌊log2𝑧′′𝑛⌋ + 𝐿𝑀3𝑛) × 𝑚𝑢𝑙𝑛 (3.14) 為證明該改良過後的兩階式降低差值演算法的成效,在做正式實驗之前,我 們做了一個廣域測試,計算在各種可能差值的場合上(𝑧 = 1~255, −1~ − 255),