第三章 EXIF 資訊介紹
3.2 GPS 相片定位
圖3.3 GPS 衛星定位資訊(北緯 22°43’59”,東經 120°16’33”)
圖3.4 使用電子地圖定位
3.3 影像分類和檢索
因為數位相機的普遍,所以相片檢索與分類最近得到廣泛的重視,尤其是以影像內 容(像素值、人物、建築物或景色)來進行判斷的研究為主[17][18][19][20]。但是以前 的方法效果都不是很好,因為以前的方法大多是使用相片中的內容物,來作為判斷的依 據,因此若是加上相片中的所內含的EXIF資訊,將可以有效地提升分類之準確率。使 用EXIF資訊所包含的閃光燈(flash fired)、焦距(focal length)、曝光時間(exposure time)等資訊,在分辨室內/戶外相片或人物/景物上具有顯著的辨識力。由圖3.5我們 的程式可以看出,我們拍攝的時候並沒有使用閃光燈(flash was not used),而且根據拍 攝時間所示(15:23:40),可以知道相片是在下午三點二十三四十秒所拍攝,如果是在晚 上閃光燈未開的話,就可以判斷拍攝地點應該是在室內,根據以前的相片檢索與分類方 法,再加上我們的EXIF資訊輔助,就可以提高辨識的正確率。
圖3.5 EXIF 閃光燈資訊
圖3.6 使用的實驗影像
第四章
浮水印演算法
4.1 程式流程
圖4.1 頻率域浮水印流程圖
程式流程主要分成三個部分,第一部份將EXIF 資訊取出,將 ASCII Code 型態的 EXIF 資訊轉成二進位,將原本的 JPEG 影像轉成 BMP 影像:第二部分主要是 DCT 演 算法以及浮水印嵌入取出的方法,將BMP 影像經過 DCT 轉換,將像素值變成 DCT 係 數值,嵌入浮水印,下面的章節會說明詳細的嵌入方法,將DCT 係數經過反餘弦轉換,
輸出BMP 影像。第三部分,將 BMP 影像輸入,BMP 影像經過 DCT 轉換,將像素值變 成DCT 係數值,取出浮水印資訊,下面的章節會說明詳細的取出方法,程式結束。
表 4.1 ASCII Code 表
DEC HEX CHAR DEC HEX CHAR DEC HEX CHAR DEC HEX CHAR
065 41 A 078 4E N 097 61 a 110 6E n
表4.2 Zig-Zag 表
DC AC2 AC3 AC9 AC10 AC20 AC21 AC35 AC1 AC4 AC8 AC11 AC19 AC22 AC34 AC36 AC5 AC7 AC12 AC18 AC23 AC33 AC37 AC48 AC6 AC13 AC17 AC24 AC32 AC38 AC47 AC49 AC14 AC16 AC25 AC31 AC39 AC46 AC50 AC57 AC15 AC26 AC30 AC40 AC45 AC51 AC56 AC58 AC27 AC29 AC41 AC44 AC52 AC55 AC59 AC62 AC28 AC42 AC43 AC53 AC54 AC60 AC61 AC63
( )
threshold TH圖4.2 影像第一個區塊的像素值
圖4.3 經過 DCT 轉換後的係數
圖4.4 計算 AC8 的平均值作為門檻值
由圖4.2 所示,為影像藍色部分第一個區塊的像素值,恰巧這個區域鄰近的像素值 差異都不大,可以看出這個部分比較平滑,而圖4.3 為圖 4.2 的像素值經過 DCT 轉換之 後的結果,由圖中可以看出,能量集中在左上角第一個數,而且必定為正值,右下角的 數值大多趨近於零,而且像素值必定為0~255 之間的正整數,但是經過 DCT 轉換之後 的值為小數,大小並不會限制在某一個區間,所以對於我們設計演算法時,比較不會受 到數值的限制。我們將所有區塊 AC8 的平均值計算出來,由圖 4.4 左上角第一個數值 顯示,可以看出數值從圖4.3 的 120.75 變成 0.09,由於各個區塊 AC8 可能為正值,也 可能為負值,所以平均之後大多會趨近於零,接下來的部分我們就以 AC8 的平均值做 為門檻值。
圖4.5 64 個區塊 AC8 嵌入浮水印後的係數
圖4.6 反 DCT 轉換後的像素值
圖4.7 含有浮水印的影像
圖4.5 所示為浮水印嵌入之後,影像前 64 個區塊 AC8 的數值,可以看出我們如果 嵌入的浮水印位元為1,AC8 的數值為 10.09,為平均值 0.9 加上嵌入強度 10 的結果,
如果嵌入的浮水印位元為0,AC8 的數值為-9.91,為平均值 0.9 減掉嵌入強度 10 的結 果。圖4.6 為反 DCT 轉換之後的結果,可以看出與圖 4.2 的差異不大,所以不會造成失 真的現象,由圖4.7 含有浮水印的影像,無法看出與原圖的差異,表示我們的演算法可 以兼顧影像品質,以上為浮水印嵌入的方法。
取出方法:
因為我們把浮水印藏在頻率域,所以要將浮水印取出來,要先將像素值轉換成DCT 係數值,而且有些係數+10,有些係數-10,除以(256×192)平均之後,並不會對門
檻值有太大的改變。
a. 進行 8×8 DCT,計算出整張影像所有 AC8 的平均值,令其為門檻值 TH。
b. 將每個 8×8 方塊的 AC8 與平均值進行比較。若 AC8 < TH,則輸出浮水印位元 0;
反之,則輸出浮水印位元 1。
c. 將輸出的二進位浮水印,轉換為 ASCII Code 表示形式。
圖4.8 取出浮水印
圖4.9 顯示浮水印資訊
圖4.10 藏有浮水印之影像
在抽取浮水印時,也必須先將影像像素值,經過DCT 轉換成 DCT 係數值,才能進
PSNR (Peak Signal to Noise Ratio)是一個表示訊號最大可能功率,以及影響它的表 示精度的破壞性雜訊功率的比值。我們使用PSNR做為對已嵌入浮水印的影像品質的評
其中,255 是表示圖像點顏色的最大數值,每個像素點用 8 位元表示,那麼使用
BCR(Bit Correct Rate),位元正確率
( ) ( )
SCR(Symbol Correct Rate),符號正確率
每八個位元編碼為一個符號,只要八個位元中有一個位元錯誤,就會造成符號錯 誤,SCR就是比對原始EXIF資訊與萃取出來的位元編碼成的ASCII Code兩者之間的相同 比例,與BCR相同。所以,當SCR的值越高時,兩者之間的相似度越高,完全一樣時 SCR=100%。
)
4.4 嵌入位置選擇說明
我們使用8×8 的 DCT 轉換,每一個區塊會有 64 個係數,所以我們必須選擇一個係 數,當作浮水印嵌入的位置,以下我們使用四張日常生活中所拍攝的影像,以拍攝地點 來分有室內室外,以影像複雜度來分有複雜與平滑,以色彩來分有單調跟豐富,盡量達 到適用於各式影像,所以我們將分別將浮水印嵌入 AC1~AC63,經過 QF100 的 JPEG 攻擊,依照下面的公式將PSNR、BCR 和 SCR 計算的結果,來判斷浮水印嵌入的位置。
(
+20× +20× ×100%= PSNR BCR SCR
Output (4.6)
圖4.11 實驗影像原圖
表4.3 嵌入位置說明
PSNR 位元正確數 符號正確數 位元正確率 符號正確率 比重 排名 AC1 48.5196 1794 183 0.942227 0.768908 82.74229 AC2 50.7255 1829 194 0.960609 0.815126 86.24021 AC3 54.2507 1815 183 0.953256 0.768908 88.69398 AC4 53.5918 1833 195 0.96271 0.819328 89.23256 AC5 52.7755 1803 174 0.946954 0.731092 86.33642 AC6 54.2178 1788 158 0.939076 0.663866 86.27662 AC7 54.6435 1827 198 0.959559 0.831933 90.47333 2 AC8 54.7791 1844 202 0.968487 0.848739 91.12364 1 AC9 55.0538 1770 151 0.929622 0.634454 86.33531 AC10 55.1529 1108 1 0.581933 0.004202 66.87559 AC11 55.1163 1794 156 0.942227 0.655462 87.07008 AC12 55.0624 1828 186 0.960084 0.781513 89.89433 3
這張實驗用的測試影像,影像複雜度看起來蠻複雜的,色彩也很豐富,從嵌入位 置的結果可以看出 AC8 的綜合結果最好,不管是影像品質 PSNR,還是浮水印的正確 率 BCR、SCR 都有蠻高的正確率,一般來說嵌入的位置越高頻,影像品質會越好,但 是強健性會越差,由實驗的結果可以看出這個特性,但是AC9~AC11 之間正確率會下 降,尤其是AC10 的正確率幾乎為零,這個現象值得我們探討。
圖4.12 實驗影像原圖
表4.4 嵌入位置說明
PSNR 位元正確數 符號正確數 位元正確率 符號正確率 比重 排名 AC1 46.4583 1352 31 0.761261 0.13964 64.47632 AC2 45.4226 1382 35 0.778153 0.157658 64.13882 AC3 50.7093 1426 45 0.802928 0.202703 70.82191 AC4 52.7077 1593 78 0.896959 0.351351 77.67392 2 AC5 50.9819 1385 38 0.779842 0.171171 70.00217 AC6 53.0444 1314 24 0.739865 0.108108 70.00386 AC7 53.9329 1516 71 0.853604 0.31982 77.40137 3 AC8 53.9768 1526 78 0.859234 0.351351 78.18851 1 AC9 53.4633 1317 35 0.741554 0.157658 71.44753 AC10 54.2636 883 0 0.497185 0 64.20729 AC11 54.5388 1382 28 0.778153 0.126126 72.62439 AC12 54.5369 1493 65 0.840653 0.292793 77.20582
由這張測試用的影像可以看出,這張影像的複雜度很高,幾乎沒有平滑的部分,而 且色彩很單調,大多為灰色,和我們一般實驗用的灰階測試影像Baboon 有異曲同工之 妙,所以由結果可以看出,影像品質與正確率都不太好。PSNR 較其他測試影像大約降 低了2dB,正確率也都不高於 0.9,但是 AC8 仍然為綜合結果最好的位置。這張測試影 像在嵌入位置AC9~AC11 也發生了同樣的情形,尤其是 AC10 的符號正確率為零,接 下來的實驗我們會繼續探討這個問題。
圖4.13 實驗影像原圖
表4.5 嵌入位置說明
PSNR 位元正確數 符號正確數 位元正確率 符號正確率 比重 排名 AC1 52.1207 1243 116 0.941667 0.70303 85.01464 AC2 52.8093 1256 135 0.951515 0.818182 88.20324 AC3 54.8447 1256 128 0.951515 0.775758 89.39015 AC4 55.0727 1303 152 0.987121 0.921212 93.23937 1 AC5 54.5521 1265 124 0.958333 0.751515 88.74907 AC6 55.1319 1262 123 0.956061 0.745455 89.1622 AC7 55.3458 1306 153 0.989394 0.927273 93.67913 2 AC8 55.2461 1296 146 0.981818 0.884848 92.57943 3 AC9 55.2176 1210 95 0.916667 0.575758 85.06608 AC10 55.3402 736 2 0.557576 0.012121 66.73414 AC11 55.3418 1280 133 0.969697 0.806061 90.85695 AC12 55.3597 1284 132 0.972727 0.8 90.81425
由這張測試用的影像可以看出,這張影像左半部較複雜,右半部較平滑,而且色彩
圖4.14 實驗影像原圖
表4.6 嵌入位置說明
PSNR 位元正確數 符號正確數 位元正確率 符號正確率 比重 排名 AC1 51.14 1281 136 0.936404 0.795322 85.7745 AC2 54.54 1346 151 0.983918 0.883041 91.87918 2 AC3 55.17 1320 136 0.964912 0.795322 90.37468 AC4 55.21 1342 148 0.980994 0.865497 92.13982 1 AC5 54.14 1293 129 0.945175 0.754386 88.13123 AC6 54.8 1254 123 0.916667 0.719298 87.5193 AC7 55.33 1326 142 0.969298 0.830409 91.32415 AC8 55.33 1329 146 0.971491 0.853801 91.83585 3 AC9 55.35 1290 126 0.942982 0.736842 88.94649 AC10 55.46 747 1 0.546053 0.005848 66.49801 AC11 55.43 1315 140 0.961257 0.818713 91.02942 AC12 55.45 1332 143 0.973684 0.836257 91.64883
由以上的結果可以看出,AC8 在四張影像都有好的表現,所以我們選擇 AC8 作為 我們演算法的區塊嵌入位置。由於JPEG 壓縮量化表的關係,所以我們實驗將浮水印藏 在AC9~AC11 的結果普遍都不好,因為通常將浮水印藏在高頻,會對浮水印的強健性 有較大的影響,所以我們只列出AC1~AC12 的結果,由於我們嵌入的浮水印資料量較 少,而且影像尺寸較大,所以即使藏在AC1 仍然有良好的 PSNR 表現,但是經過實驗 結果,我們可以看出將浮水印藏在低頻,不一定是最好的。
第五章 攻擊與還原
5.1 JPEG 攻擊
因為我們最終的目的就是要將我們嵌入浮水印的影像,偽裝成原圖放在網路上,所 以我們一定要把BMP 圖檔轉換成 JPEG 檔,因為 JPEG 檔的檔案大小跟 BMP 相差了幾 乎十倍的大小,所以即使我們沒有將BMP 轉成 JPEG 檔,下載相片的人,看到了 BMP 的檔案格式,為了節省硬碟容量一定也會將BMP 檔轉換成 JPEG 檔,為了避免別人懷 疑我們在相片上動過手腳,所以我們必須將BMP 檔轉換成 JPEG 檔。
圖5.1 嵌入強度 10 經過 JPEG 攻擊的結果
由結果可以看出,我們的浮水印無法完全抵抗攻擊,因為將浮水印藏在DCT 係數 裡屬於強健型浮水印演算法,應該是可以抵擋JPEG 攻擊,所以我們增加浮水印的嵌入 強度,將原本嵌入強度δ=10,增加到 δ=100,嵌入方法改為如下兩式所示:
浮水印位元為b=0,DCT 係數值等於門檻值-100 浮水印位元為b=1,DCT 係數值等於門檻值+100
再經過JPEG 攻擊之後,能夠將浮水印完整取出,仍然能兼顧影像品質,所以我們決定 將嵌入方法定為門檻值+-100,由以下結果可以看出,只要將嵌入強度加大就可以將 浮水印完整地取出。
圖5.2 嵌入強度 100 經過 JPEG 攻擊的結果
表5.1 一般實驗位元正確率 54.78 54.15 55.52 56.25 57.3 60.45 96.85
53.7 57.93 64.44 69.28 73.32 81.15 98.53 52.36 68.07 78.2 84.56 86.98 91.75 99.11 50.97 79.57 85.66 88.55 92.5 92.8 99.53 49.67 86.77 90.44 93.22 94.12 92.75 99.79 48.48 92.5 94.12 95.85 96.7 99.58 99.84 47.4 94.64 95.7 96.27 97.85 99.9 99.95 46.4 96.22 96.85 96.9 95.8 99.95 99.95 45.52 96.95 96.74 97.85 89.02 99.95 100 44.71 97.8 97.53 98.58 90.07 99.95 100
圖5.3 位元正確率折線圖
表5.2 一般實驗符號正確率 52.36 4.2 16.39 33.61 42.56 55.46 94.12 50.97 19.33 36.55 51.68 63.45 57.14 96.64 49.67 39.5 55.88 66.39 67.23 59.24 94.74 48.48 64.29 71 78.57 79 97.48 98.74 47.4 74.37 78.57 80.67 86.13 99.16 99.58 46.4 81.51 83.61 84.03 71 99.58 99.58 45.52 84.45 81.93 87.82 44.96 99.58 100 44.71 88.66 86.56 90.76 48.74 99.58 100
圖5.4 符號正確率折線圖
圖5.5 嵌入強度 100 的輸出影像(PSNR=44.71dB)
由上面的實驗過程以及結果可以看出,嵌入強度越強影像品質會越差,但是相 對的強健性就會越好,所以我們必須有所取捨,必須要兼顧影像品質,又要能夠完全地 將浮水印取出,才能正確地還原EXIF 資訊,實驗結果之中,會有數值相同的情形,是 因為我們所使用的正確率為正確個數除以總個數,所以只要正確個數相同,實驗數據的 結果就會相同,雖然正確個數相同,但是正確個數的位元卻不一定相同,由圖 5.3、圖
由上面的實驗過程以及結果可以看出,嵌入強度越強影像品質會越差,但是相 對的強健性就會越好,所以我們必須有所取捨,必須要兼顧影像品質,又要能夠完全地 將浮水印取出,才能正確地還原EXIF 資訊,實驗結果之中,會有數值相同的情形,是 因為我們所使用的正確率為正確個數除以總個數,所以只要正確個數相同,實驗數據的 結果就會相同,雖然正確個數相同,但是正確個數的位元卻不一定相同,由圖 5.3、圖