• 沒有找到結果。

第二章 基礎理論以及技術背景介紹

2.3 浮水印嵌入法則流程

2.3.2 浮水印截取

嵌入流程完成後,我們會得到嵌入完成的圖𝐻̅,而截取主要的流程是以圖 𝐻̅中的每個小 block𝐵̅𝑖,𝑗做為基礎,操作步驟和浮水印嵌入相似,為了截取出 浮水印𝑊̅ ,首先我們先對每個 block 𝐵̅𝑖,𝑗做 Hadamard 轉換,i≥ 0,j≤ 2𝑛 − 1

,用𝐶̅𝑖,𝑗代表𝐵̅𝑖,𝑗的 Hadamard 轉換域,在 Hadamrd 轉換域上,係數𝑐̅的位置和 係數 c 在是ㄧ樣的,再由𝐶̅𝑖,𝑗中獲得係數𝑐̅,則我們就可以由公式(12)(13)

𝑝̅ = round(𝑐̅

𝐿) (13) 𝑤̅𝑖,𝑗 = 𝑝̅ mod2𝑞 (14) 先求出係數𝑐̅所在的區間𝑝̅,然後就可以得知浮水印𝑤̅𝑖,𝑗,整個截取得就如圖

(2.3)。

圖 2.3 從已經被嵌入浮水印的圖𝑯中,截取浮水印資訊𝑾̅̅̅的流程。

依序從每個𝐵̅𝑖,𝑗截取出想要的浮水印𝑤̅𝑖,𝑗後,就可以獲得浮水印𝑊̅ ,𝑊̅ = {𝑤̅𝑖,𝑗 ,0 ≤ 𝑖, 𝑗 ≤ 2𝑛− 1 },而截取出來的浮水印𝑊̅ 再和當初嵌入進去的浮水印 𝑊做比較,就可以得知我們截取出來的結果是否正確。

第二章 基礎理論以及技術背景介紹

Step 0:給被要截取出浮水印的圖片𝐻̅。

Step 1:將𝐻̅分割為數個同樣大小且不重疊的block 𝐵̅𝑖,𝑗

Step 2:透過Hadamard轉換公式轉換到轉換域上,將block𝐵̅𝑖,𝑗轉換成𝐶̅𝑖,𝑗。 Step 3:透過使用公式(12)得知係數𝑐̅的區間𝑝̅。

Step 4:透過使用公式(13)由𝑝̅得知浮水印𝑤̅𝑖,𝑗

Step 5:獲得浮水印𝑊̅ ,𝑊̅ = {𝑤̅𝑖,𝑗 ,0 ≤ 𝑖, 𝑗 ≤ 2𝑛 − 1 }

ㄧ般來說,除了因為傳輸問題而導致的錯誤,或是第三者的惡意修改之外

,我們對已經嵌入完的浮水印的圖片𝐻̅的每一個pixel做有限的精度修正(即四捨 五入的動作),可能會汙染嵌入圖片𝐻̅裡的浮水印,另外就是在運算時,選擇分割 區間的長度L和pixel顯示的精度m會影響到我們最後做精度修正後,所產生出來 的誤差,造成一些錯誤。

而為了保證我們從𝐻̅截取出來的浮水印𝑊̅ 沒有遭到修改過,要和原始的浮水 印W是ㄧ樣的,𝑐̅必須滿足

|𝑐̅ − 𝑐| <𝐿

2 (15) 而在從公式(13)(14)可以很清楚的知道𝑝̅和𝑤̅𝑖,𝑗會與p*和𝑤𝑖,𝑗是相同的,所以

第二章 基礎理論以及技術背景介紹

第二章 基礎理論以及技術背景介紹

𝐿 = 2𝑘−𝑚+8 (20) 在選定了精度m後,我們可以依照公式(19)為基礎來選擇L的大小,這樣就可以降 低在嵌入浮水印後,因為要做精度修正而做四捨五入操作所導致的量化誤差的汙 染情形。

2.3.3 圖片還原

圖片還原是要讓我們能夠把已經嵌入浮水印的圖片𝐻̅,能夠還原成原本尚未

嵌入浮水印的圖片,假設我們原本的圖片,每一個pixel裡面都有8bits,只要在 m>8的情況下,只要把嵌入過浮水印的圖片𝐻̅四捨五入到8bits後,就能夠還原到 尚未嵌入浮水印的原圖。如圖2.4所示

圖2.4 將已嵌入浮水印的圖片𝑯̅ 四捨五入後還原至圖片H的流程

但是要把圖片𝐻̅還原成原圖H有一定的限制條件,並不是每張嵌入過後的圖

第二章 基礎理論以及技術背景介紹

第二章 基礎理論以及技術背景介紹

第二章 基礎理論以及技術背景介紹

根據公式(34),我們只要能夠滿足

2𝑞−𝑚+7+ 2−(𝑚−7) < 0.5 (35) 就可以確定公式(26)是成立的

這樣就可以保證以經嵌入玩浮水印的圖片𝐻̅能夠還原成原始的圖片H。

我們定義資訊隱藏容量Q(m)為可回復的浮水印W的體積,體積大小為2𝑛×

2𝑛× 𝑞個bits,藉由以下公式定義出來 𝑄(𝑚) = max

{2𝑞−𝑚+7+2−(𝑚−7)<0.5}2𝑛× 2𝑛× 𝑞 (36)

表格2.1 圖片體積為512×512 (i,e, N=9),block體積為4×4 (i,e, k=2),浮水印的體積為128×128 (i,e, n=2),在不同的精度m下,L與q與最大嵌入資訊數量Q(m)的關係與是否具備可逆性。

m 8 9 10 11 12

L 4 2 1 0.5 0.25

q最大值 NA NA 1 2 3

Q(m) (bits) NA NA 16384 32768 49152

可逆 X X O O O

第三章 硬體架構

第三章 硬體架構

3.1 簡介

本章節的目的是實現第二章節所提出的浮水印嵌入法則的硬體實現。在 第二章節中,我們會先把圖片切割成成數個同樣大小且不重疊的 block 後,

把每個 block 經由 Hadamard 轉換公式從空間域轉換到轉換域中,而每個 block 的大小是2𝑘× 2𝑘,會在每個 block 中取得要嵌入的係數 c 再進行嵌入,嵌入

完成後再使用 inverse Hadamard 轉換從轉換域中轉換回空間域,最後進行精 度修正,就可以得到嵌入完的圖𝐻̅。

以整體來看,嵌入浮水印的硬體架構會涉及到 block 的讀取和儲存操作

,在變換域中,會使用到轉換用的 2D Hadamard 變換和逆變換、要隱藏的浮 水印資訊和嵌入浮水印的操作。因此可以從圖(3.1)中,看到整個硬體架構 的圖,主要會使用到四個單元:I/O buffer、Hadamard 轉換單元、數據隱藏單 元和 controller。I/O buffer 主要的功能是從主記憶體中,存取我們要使用的

block,還有寫回主記憶體已經嵌入完的 block,Hadamard 轉換單元則是將 block 進行 2D 的 Hadamard 轉換,在這邊把 block 從空間域轉換到轉換域上,

要被嵌入浮水印的的係數 c 也是在這邊決定,嵌入完成後 Inverse Hadamard

第三章 硬體架構

元。而 controller 則負責控制協調上述三個單元的運作,並在做完精度修正後,

把嵌入完的嵌入完浮水印的圖𝐻̅輸出出來。

圖3.1 浮水印嵌入的硬體架構

第三章 硬體架構

3.2 Hadamard 轉換單元

在 Hadamard 轉換單元中,包含了兩個 1D Hadamard 轉換單元,在轉換完之 後,會存到大小為2𝑘× 2𝑘的 2D 陣列暫存器中,如圖(3.2)所示,而在我們這邊的 電路中,為了簡單起見,使用的陣列大小是 4x4,也就是 k=2,因為 Hadamard 陣列形式是2𝑘,k 值太大的話會造成圖片切割完後的 block 數變少,影響能夠嵌 入的浮水印數量,而因我們的陣列大小是 4x4。

在 1D Hadamard 轉換單元的輸入輸出就是四個輸入四個輸出,而這個 1D Hadamard 轉換單元僅由簡單的加法器所構成,如圖(3.3),而在大小為 4x4 的 2D 陣列內,包含了 16 個 cell,每個 cell 由一個 mux 和一個暫存器組成,如圖(3.4),

由 mux 控制每個 cell 的輸入,在 2D 陣列中,允許存在暫存器內的資料向下移動 或是向左移動去做運算。

第三章 硬體架構

圖3.3 2D Hadamard轉換單元的硬體架構

圖3.4 最右上角cell的架構

第三章 硬體架構

而在介紹完電路架構後,由圖(3.5)顯示出我們如何利用 Hadamard 變換單元 操作 2D Hadamard 變換,也就是我們如何把資料從空間域轉到轉換域上儲存的 動作。在這邊,首先我們會先將初始的資料 block U 傳遞到頂端的 1D Hadamard 轉換單元上,然後進行 1D 的 Hadamard 轉換,計算完後的結果就向下移動,同 時下一筆資料就在進來進行 1D 的 Hadamard 轉換,因為 block U 的大小是 4x4,

所以這個步驟會進行四次,然後儲存在陣列內,之後再如同上述步驟,向左移動 進行第二次的 1D 的 Hadamard 轉換,轉換回來的結果會從右邊旋轉儲存回到陣 列內,這樣就完成了 2D Hadamard 轉換。

第三章 硬體架構

(a)

(b)

第三章 硬體架構

第三章 硬體架構

(a)

(b)

圖3.6 數據隱藏單元 (a)第一階段:找到𝑝’和𝑝’+2𝑞 (b)第二階段:得到c*

第三章 硬體架構

在我們得知 c*值位移成𝑝’或𝑝’+2𝑞其中一個值後,c*的值就回傳回 Hadamard

轉換單元中,然後在 Hadamard 轉換單元中進行 inverse Hadamard 轉換,inverse

Hadamard 轉換同樣的也使用了兩個 1D Hadamard 轉換單元,而與前面一開始也 進行 Hadamard 轉換不一樣的地方是在於,這次轉換的資料是從陣列內取得,然 後先向左推移進行逐列的 1D Hadamard 變換運算,然後再旋轉陣列向下推移,

經由頂端的變換電路,進行逐行的 1D Hadamard 變換運算,完成 2D Hadamard 變換,而第一次轉換的時候則是從 I/O buffer 中取得資料。

第三章 硬體架構

圖 3.7 是整體電路的運作流程,Init 狀態時會把所有資料都設為 0 做 reset,

直到 ctrl_en=1 時 ,啟動電路。啟動後進入到 wait_valid 狀態,發出 Ready_in=1 訊號,告訴 I/O Buffer 可以開始傳送資料,若 I/O buffer 可以傳送資料,則會發 出 In_Valid=1 訊號,並開始傳送,進入 Hadamard Transform 狀態,Hadamard 轉 換電路就會接收資料開始運作,反之若 In_Valid 訊號不為 1,則就會回到

Wait_Valid 狀態,直到開始傳送資料。Hadamard 轉換電路運算完之後儲存在 2D 陣列內,進到 Data_Hiding 狀態。進到 Data_Hiding 狀態後,啟動數據隱藏單元,

從 2D 陣列內取得係數 c,並進行浮水印嵌入動作,嵌入完之後取得係數𝑐̅,再把 𝑐̅丟回 2D 陣列內儲存,然後進到 Inverse Hadamard Transform 狀態,進行 Inverse

Hadamard 轉換,轉換完後會發出 out_valid=1 訊號,此時就會把 2D 陣列裡的資 料傳送到 I/O buffer 內儲存,若此時 rst=0 則回到 Init 狀態重設資料,rst=1 時則 會回到 wait_valid 狀態,準備繼續進行下一筆資料的運算。

第四章 實驗結果

第四章 實驗結果

4.1 開發平台與實驗環境

本論文使用 Altera Quartus II 14.0 做為撰寫 Verilog 硬體描述語言的開平台,

Quartus 提供了許多協助開發的功能,像是檢查語法是否錯誤、時序分析、自動 配置邏輯元件、電路的合成和繞線布局等等,使我們在設計上可以有效的節省時 間,另外我們使用了 Modelsim 產生模擬訊號波形圖,來驗證我們電路的正確性。

除了使用 Verilog 硬體描述語言來設計硬體電路外,軟體方面則是使用 Matlab 2014a 為平台來驗證此硬體架構的執行結果是否正確。

※ 硬體實作環境

Device:Altera Stratix IV EP4SGX230KF40C2

※ 軟體實作環境

CPU:Intel® Core™ i7-3770CPU @ 3.40GHz Memory:DDR III 32.0GB

第四章 實驗結果

4.2 實驗數據呈現與討論

在本章節中,主要呈現以硬體電路實作浮水印嵌入後,評估嵌入後的隱蔽性、

資源消耗和效能分析。在這邊我們用四張圖片來分析,兩張一般圖片和兩張

Hologram,分別標記為圖片 1、圖片 2、Hologram 1 和 Hologram 2。這兩張 Hologram 是由台灣師範大學光電科技學院 IOP 實驗室,使用數位全像顯微鏡(Digital Holographic Microscope(DHM) )拍攝得到的,這四張圖片的大小相同,皆為 512×512(i,e, N=9)。

Hologram 1 是從 negative USAF 1951 的 resolution target 所獲取的振幅影像。

Hologram 2 則是一個 micro array 的相位影像,鏡片直徑(lens diameter)與曲率半 徑(radius of curvature(ROC)分別為 95𝜇m以及 120𝜇m,microlens 的折射率指標波 長為 633nm 的時候是 1.457,對焦距離大約是 253𝜇m。

第四章 實驗結果

(a)Barbara (b)Pepper

(c) Hologram 1 (d) Hologram 2

圖 4.1 使用的圖片素材(a)(b)為一般的 2D 影像,分別為 Barbara 和 Pepper (c)Hologram 1 (USAF 1951 Resolution Target) (d) Hologram 2 (microlens array)

第四章 實驗結果

在評估隱蔽性上面,我們使用峰值值信號比(peak signal-to-noise-ratio,PSNR) 來做評估標準,其定義如下

MSE=2621441511𝑖=0511𝑗=0‖𝐻̅(𝑖, 𝑗) − 𝐻(𝑖, 𝑗)‖2 (36)

𝑃𝑆𝑁𝑅 = 10 log255𝑀𝑆𝐸2 (37) MSE(mean squared error)為已經嵌入浮水印的圖片𝐻̅和尚未嵌入浮水印的圖片 H 之間的平均平方差。而在 Hologram 中,MSE 是|𝐺̅|與|𝐺|之間的平均平方差,而 對於一個相位影像而言,MSE 是∠G 與∠𝐺̅之間的平均平方差。

為了評估我們硬體實作出的可逆式浮水印嵌入法則與其他可逆式浮水印嵌 入法的差別,接下來會比較對於圖片 girl、pepper、Hologram 1 和 Hologram 2 在 嵌入數量和隱蔽性上的比較。Q(m)為最大資訊隱藏數量,不同的精度 m 可根據

第四章 實驗結果

表格 4.1 展示我們在嵌入浮水印之後,把原本還沒有嵌入浮水印的 Hologram 和嵌入完浮水印的 Hologram 做重建後,在這邊嵌入的浮水印是 Hologram 各自

表格 4.1 展示我們在嵌入浮水印之後,把原本還沒有嵌入浮水印的 Hologram 和嵌入完浮水印的 Hologram 做重建後,在這邊嵌入的浮水印是 Hologram 各自

相關文件