第三章 研究方法
3.2 研究流程
本論文改良的方法其核心在於紀錄像素值的變化量。在接下來的敘述中,因 為像素值 0、1 與 2 變化的現象與像素值 255、254 與 253 變化的現象會相同,接 下來所使用的例子會以 0(255)、1(254)與 2(253)代表此三組像素值,與文獻[17]不 同的是我們的紀錄方式是紀錄 0(255)的變化情況,而非記錄所有座標的變化情況。
以下是改良式位置圖紀錄方式的構想 :
傳送端 : 我們觀察進行直方圖位移後醫學影像的 0(255)像素值,其變化的情況用 一個位元記錄下來。從左上角的座標開始,由左至右、由上至下的順序掃描整張 醫學影像。之後依序掃描並抓取位置圖的紀錄資訊,即可進行還原。當掃描到
- 28 -
0(255)像素值,則找尋原始同座標的醫學影像像素值,如果原始影像的像素值為 0(255),則位置圖空間放入’0’,如果原始影像的像素值為 1(254),則位置圖空間 放入’1’。此想法的概念在於經過直方圖位移後可以觀察到所有像素值 1(254)會因 128 128 128 128 128 128 128 129 129 254 255 254 255 255 255
0 0 0 0 0
0 126 126 128 128 128 128 128 128 128 128 128 130 130 255 255 255 255 255 255
0 0 0 1 1
- 29 - 原先像素值 1(254)已全部變為 0(255),並且與原先像素值 0(255)的點混合一起。
因此,我們記錄直方圖位移後的像素值 0(255)的點,並找尋原始影像判斷該紀錄 位元’0’或是’1’。圖 3-3(c)為每個座標的紀錄資訊,除了像素值 0(255)之外,其他 的像素值並不需要記錄資訊。最後把此記錄資訊轉成一維訊號放入圖 3-3(d)所示
- 30 - 開始
Pixel = 0(255) ?
結束 Orig_Pixel =
0(255) ?
記錄" 0 " 記錄" 1 "
是
是 否
否
圖 3-5 記錄資訊之流程圖
接收端 : 在接收端這部分會收到從傳送端傳來含有隱藏資訊的醫學影像及最後 產生出來的位置圖。當接收到的醫學影像經過直方圖位移還原後,利用與傳送端 一樣的掃描順序開始進行掃描。當遇到像素值為 1(254)則取出接收到的位置圖資 訊,如取出的資訊為’0’,代表此像素值原先為 0(255)。如果取出的資訊為’1’,則 代表此像素值原先為 1(254)。隨即對每個像素值進行還原。我們可以從接收端觀 察到原先在嵌入端修改的 0(255)會全部還原成 1(254),但在這些還原的像素值中 有些點原本其實是像素值 0(255),並不需要被修改。因此我們利用位置圖資訊還 原這些像素值。
下頁的圖 3-6 為接收端在利用位置圖資訊還原影像的流程示意圖。圖 3-6(a) 的5 × 5影像是從傳送端接收到的醫學影像,即為圖 3-3(b)影像。當接收到該影像 後則開始直方圖統計。其統計後之統計圖如下頁的圖 3-7(a)所示 :
- 31 - 128 128 128 128 128 128 128 130 130 255 255 255 255 255 255
1 1 1 1 1
1 127 127 128 128 128 128 128 128 128 128 128 129 129 254 254 254 254 254 254
位置圖資訊
(從傳送端產生出的資訊)
1 1 1 1 1
1 127 127 128 128 128 128 128 128 128 128 128 129 129 254 254 254 254 254 254
0 0 0 1 1 128 128 128 128 128 128 128 129 129 254 255 254 255 255 255
(a) (b)
- 32 -
原。如圖 3-6(c)所示,當掃描到像素值為 1(254)時,則取出位置圖資訊 1 個位元 作判斷。如果此位元為’0’,代表原始像素值為 0(255),如果取出的位元是’1’,則 代表原始的像素值為 1(254)。最後還原後的影像為圖 3-6(d)。我們可以看出圖 3-6(d) 與原始影像圖 3-3(a)是一模一樣的。也就表示整個流程可達到無失真的還原。圖 3-8 為還原影像的流程圖。
開始
Pixel = 1(254) ?
結束 Location map_Info
= 0 ? 是
是 否
否
該像素值修改成 0(255)
該像素值修改成 1(254)
結束
圖 3-8 還原影像之流程圖
雖然此構想能夠有效減少位置圖的資料量,其未考量到的部分會影響到此方 法的可行性。經過實驗測試後發現了四個問題,接下來將透過示意圖及修改過 後的流程圖逐一說明每個問題的產生原因及解決方式。
- 33 -
- 34 -
- 35 -
- 36 - 開始開始
Pixel = 0(255) ? Pixel = 0(255) ?
結束結束 Orig_Pixel =
0(255) ? Orig_Pixel =
0(255) ? Location map_Info
= 0 ? Location map_Info
= 0 ?
- 37 -
- 38 -
- 39 -
- 40 -
我們於原先在問題一增加的判斷步驟中再次增加判斷是否該區塊的高點為 1(254),我們增加了這個判斷式能夠避免在傳送端記錄不必要的資訊。於此解決 方式對應到的接收端增加了以下的條件 :
條件二 :
如果該區塊的高點為 1(254),在掃描到像素值 1(254)時不需要取出 位元進行還原。(下頁之圖 3-20)
與問題一相同的方式增加此判斷,能再次減少在傳送端產生的紀錄資料量,
也能解決問題二產生的錯誤還原。
開始開始
Pixel = 0(255) ? Pixel = 0(255) ?
結束結束 Orig_Pixel =
0(255) ? Orig_Pixel =
0(255) ?
記錄" 0 "
記錄" 0 " 記錄" 1 "記錄" 1 "
是
是 否
否
區塊的高點 = 0(255) or 1(254) ?
是
否
圖 3-19 修正後之紀錄資訊流程圖(問題二)
- 41 - 開始開始
Pixel = 1(254) ? Pixel = 1(254) ?
結束結束 Location map_Info
= 0 ? Location map_Info
= 0 ? 素值 2(253)被設為高點時,像素值 1(254)會全部被退到像素值 0(255)。也因此,
像素值 0(255)就變成我們可以藏入資訊的空間了。但因為像素值 1(254)與像素值 0(255)被合併起來,其在接收端取出資訊時此區塊可能會統計出錯誤的高點(可能 為像素值 0(255),可能所有像素值 0 會因為藏入資訊’1’而變成像素值 1),取出資 訊時就會產生錯誤。
- 42 -
- 43 -
- 44 -
然而,我們在傳送端進行直方圖統計後的高點為像素值 2。這樣的統計錯誤 會導致還原時資訊對應錯誤,甚至會取出錯誤的隱藏資訊。因此,我們為了解決 此問題,在記錄資訊的過程中我們對每個區塊再多用一個位元記錄該位元的高點 是否為 2(253)。
以下是我們在傳送端記錄像素值 0(255)前記錄該區塊的高點是否為 2(253)的方式。
條件一 : 如果該區塊的高點為像素值 2(253),則記錄位元’0’,否則記錄位 元’1’。(圖 3-25)
如圖 3-25 所示,透過對每個區塊再記錄一個位元的方式能夠得知該區塊的高 點是否為像素值 2(253)。因於傳送端新增了此記錄資訊至位置圖,我們在接收端 也新增了該資訊的使用方式。
以下是我們在接收端取出隱藏資訊及還原像素值 1(254)前判斷該區塊的高點 是否為 2(253)的方式。
條件二 : 如果於位置圖內取出的位元為’0’,則進行直方圖統計。當統計出的 高點為像素值 0、1 或是 2,則設定該區塊的高點為像素值 2,否則設定為像素值 253。如果於位置圖內取出的位元為’1’,則進行直方圖統計後結束流程。(圖 3-26)
- 45 - 區塊高點記錄開始
該區塊高點 = 2(253)?
記錄位 元’1’
記錄位 元’0’
結束
否 是
圖 3-25 新增的紀錄資訊示意圖(問題三)
區塊高點修正開 始
Location map_Info = 0?
修改此區 塊高點為
253
結束 否 是
直方圖統計
高點 =
0 or 1 or 2 ? 直方圖統計
修改此區 塊高點為2
是
否
圖 3-26 新增的還原影像示意圖(問題三)
- 46 - 0(255)與像素值 1(254)通常會被混合在一起。也因此,在接收端進行直方圖統計 時,像素值 0(255)的出現次數極有可能會超過傳送端統計出高點像素值的出現次 128 128 128 128 128 128 128 129 129 129 130 130 130 130 130
0 0 0 0 0
0 0 0 0 128
128 128 128 128 128 128 128 130 130 130 131 131 131 131 131
0 0 0 0 1
- 47 -
- 48 -
128 128 128 128 128 128 128 130 130 130 131 131 131 131 131
0 0 0 0 0
0 0 0 0 127
127 127 127 127 127 127 127 129 129 129 130 130 130 130 130
0 0 0 0 0
0 0 0 0 127
127 127 127 127 127 127 127 129 129 129 130 130 130 130 130
0 0 0 0 0
0 0 0 0 127
127 127 127 127 127 127 127 129 129 129 130 130 130 130 130
(a) (b)
- 49 -
條件二 : 如果於條件一下該區塊的高點是 0,則再紀錄位元’0’。反之,如果該區 塊的高點為 255,則再紀錄位元’1’。(圖 3-31)
為了整合問題三的解決方式,我們於傳送端修改圖 3-25 的流程圖,經過修改 後如圖 3-31 所示。
區塊高點記錄 開始
該區塊高點
= 2(253)?
記錄位 元’01’
記錄位 元’00’
否
是 該區塊高點
= 0 或是 255?
該區塊高點
= 0 ?
記錄位 元’11’
記錄位 元’10’
否 是 是
否
圖 3-31 新增的紀錄資訊示意圖(問題四)
而在接收端這部分為了要利用位置圖內隱藏資訊的內容,我們與問題三的解 決方式結合,其條件如下 :
條件三 : 如果於位置圖內取出的位元為’00’,則進行直方圖統計,經統計後 如果高點為像素值 0、1 或是 2,則設定該區塊的高點為 2,否則設定為 253。如 果於位置圖內取出的位元為’01’,則進行直方圖統計後結束流程。如果於位置圖
- 50 -
內取出的位元為’10’,則設定該區塊的高點為像素值 0。如果於位置圖內取出的位 元為’11’,則設定該區塊的高點為像素值 255。(圖 3-32)
我們修改圖 3-26 的流程圖,其修改過後的流程圖如圖 3-32 所示。
直方圖統計 (排除像素值0
與255)
直方圖統計 (排除像素值0
與255)
修改此區 塊高點為
2
修改此區 塊高點為
253
設定此區 塊高點為
0
設定此區 塊高點為
255
圖 3-32 新增的還原影像示意圖(問題四)
- 51 -
經過上述的四個問題一一解決後,我們完成了位置圖的紀錄方式。在傳送端 這個部分,為了避免問題三與問題四會發生不一樣高點的錯誤,我們利用兩個位 元先紀錄區塊的高點,如圖 3-31 所示。隨後開始記錄像素值 0(255)的變化情況,
為了避免問題一及問題二產生紀錄資訊對應錯誤的情況,我們利用圖 3-19 的流 程圖記錄資訊。而在接收端這部分,首先要先處理區塊高點的紀錄內容。其處理 程序如圖 3-32 所示。當處理完後就能確定每個區塊的高點是與傳送端統計出的 高點一樣。經過一般程序還原一部分的像素值後,就能利用圖 3-20 的程序處理位 置圖內的資訊來還原剩下的像素值。
- 52 -