宣告兩個陣列img和img_tem各是512x512的大小,用來儲存原始圖片與受測圖片每一pixel的灰階值(0~255),再宣告兩個陣列eigen和eigen_tem來存放每個block的最大特徵值。
以下兩個函式,其中proc第一式是把原圖img512x512的值,利用前面提的方法把每個block地最大特徵值計算出來,儲存在eigen裡,proc第二式則是處理受測的圖片,comp是將原圖的的特徵值分成32個區間並加上容忍區間,看是否受測圖落在指定區間中,由此來判斷,若是受測圖該block與原圖符合,eigen_tem此位置存入0。
利用以下程式片段,我們可計算出eigen_tem所有0的個數,再由總block數相減就可以知道,經程式判斷為錯的block有幾個,再開一個新的raw檔,把判斷為對的顯示成灰階值125的顏色,判斷為錯的block則不修改,如此一來,新的raw檔可以比較出原始圖跟修改後的圖片不同之處。
左圖是原始未經修改的測試圖檔,而右圖則是以最簡單的方式直接在原始圖上做修改而做出的竄改圖片。
下圖則為程式執行後之判斷結果,可成功的抓出遭受修改的位置。
|