陳震海,梁曉萍,孫容海,黃麗艷
(1.廣西師范大學計算機科學與信息工程學院,桂林541004;2.廣西師范大學出版社集團,桂林541004)
隨著互聯網和多媒體技術的發展,人們開始大量使用數字圖像來表達信息。例如,人們日益喜歡使用微信、微博等社交平臺來分享生活、學習和工作的照片。實際應用中,同一幅圖像可能被不同用戶上傳到互聯網,而圖像在上傳的過程中可能還會經歷壓縮、水印嵌入等常規圖像處理。不同用戶上傳的圖像的文件大小可能不同,但是它們具有相似的視覺內容。換言之,一幅圖像可能會在互聯網上存在若干個副本,造成網絡存儲空間浪費。因此,如何能夠高效快速地檢測網絡空間中是否存在一幅給定圖像的相似圖像,已經成為互聯網應用中亟待解決的一個問題。感知圖像哈希是解決上述問題的一項高效技術。它將數字圖像映射成一串短小的數字序列即圖像哈希序列,可用一串唯一的哈希序列來表示數字圖像。從本質上來講,感知圖像哈希反映了數字圖像的視覺內容,只要兩個數字圖像的視覺內容一致,那么它們對應的哈希序列就應該是相同或相似。目前,感知圖像哈希技術憑借其優越的性能已經被普遍運用于相似圖像檢測、圖像檢索、圖像識別等領域。
本文使用Python 語言實現了基于環形分割和非負矩陣分解的感知圖像哈希算法[1],并基于該算法設計了一個高效的相似圖像檢測軟件。該軟件界面美觀,操作簡便,實現了圖像哈希計算和相似圖像檢測等功能。
本文設計的相似圖像檢測軟件能抵抗諸如旋轉、JPEG 壓縮、亮度調整、水印嵌入等常規的數字圖像處理手段的攻擊,能夠快速檢測出相似圖像,解決相似圖像重復占用網絡存儲空間的問題。該軟件將接收圖像作為輸入,計算其圖像哈希,并通過計算哈希相似度來檢測相似圖像,最后將結果輸出。軟件的主要功能如下:計算圖像哈希、檢測相似圖像(圖像輸入)、檢測相似圖像(文件輸入)。此外,該軟件還有設置功能,方便用戶根據實際需求修改軟件運行參數。本軟件的功能模塊圖如圖1。

圖1 功能模塊圖
該軟件模塊的功能介紹如下。(1)計算圖像哈希:選取一幅或多幅圖像作為輸入并計算其圖像哈希,同時將圖像哈希以Excel 文件方式進行保存。(2)檢測相似圖像(圖像輸入):選取一幅或多幅選取源圖像和待檢測圖像作為輸入,然后計算所有源圖像和待檢測圖像的哈希序列,最后計算源圖像與待檢測圖像的哈希序列的相似度。(3)檢測相似圖像(文件輸入):選取該軟件保存的Excel 文件分別作為源圖像和待檢測圖像的輸入,逐一計算源圖像與待檢測圖像的哈希序列的相似度。(4)系統設置:可以在本軟件中修改算法閾值、修改保存方法、恢復默認設置和保存設置。
圖2 為本文軟件的處理流程,具體過程如下。運行軟件后,系統初始化運行參數并進入等待用戶操作狀態。用戶輸入圖像后,系統按照預設的參數使用哈希算法計算哈希序列,輸出的哈希序列與哈希庫中的哈希序列逐一計算相似度,根據相似計算結果來判斷輸入圖像是否為相似圖像。本軟件用到的哈希算法將在第3 節進行詳細介紹。

圖2 軟件處理流程
本文設計的相似圖像檢測軟件的核心算法主要分為兩個部分,一是計算圖像的哈希序列,二是檢測哈希序列的相似度。本文使用一種基于環形分割和非負矩陣分解的圖像哈希算法[1]來計算圖像的哈希序列,算法處理過程示意圖如圖3 所示。

圖3 算法處理過程示意圖
該算法可以概括為如下三個步驟,第一步,對輸入圖像進行預處理,將輸入圖像轉換成規范化圖像,為提取相同長度的圖像哈希序列奠定基礎;第二步,對預處理后的圖像分割成多個環形區域,獲取每個圓環的像素集合,并生成輔助圖像。第三步,利用非負矩陣分解算法壓縮輔助圖像,生成長度確定且簡短的圖像哈希序列。以下將詳細介紹算法處理的各計算步驟。
為了保證所有圖像哈希序列的長度一致并且能夠對縮放操作魯棒,輸入的圖像首先使用雙線性插值算法[3]將圖像尺寸歸一化為m×m,接著對圖像進行高斯低通濾波,目的是平滑圖像,降低噪聲或圖像細微紋理對圖像哈希序列產生的影響。如果輸入圖像是彩色圖像,還需要將彩色圖像的RGB 顏色空間轉換到YCbCr顏色空間,選取亮度分量Y 表示預處理后的圖像。
一般來說,圖像的旋轉變換大多以圖像中心為坐標原點,故以圖像中心為圖像內切圓環內區域的像素在旋轉變換前后基本保持不變。因此,利用這一特性可構造抗旋轉變換的圖像特征,本節算法將尺度為m×m 的圖像以圖像中心點為坐標原點劃分出n 個面積相同的圓環,將每個圓環內的像素集合升序排列并插值成相同長度的一維向量,按圓環半徑大小順序連接劃分出的n 個一維向量構造輔助圖像V,在該輔助圖像V 上提取出的特征能有效抵抗圖像的旋轉變換。
非負矩陣分解,簡稱NMF,是研究人員Lee 和Seung 于1999 年發表在Nature 上的一種矩陣分解算法。它是一種高效的數據降維技術,比主成分分析和矢量量化具有更好的局部學習表示能力。顧名思義該算法就是將非負的大矩陣分解成兩個非負的小矩陣。本節利用NMF 算法將輔助圖像V 壓縮分解為權重矩陣W 與特征矩陣H。本文使用一種乘法更新法規則來快速計算NMF 的權重矩陣W 與特征矩陣H,其公式如下,其中W 與H 的初始值采用隨機函數生成。

更新規則對應的最小化代價函數稱為Kullback-Leibler(KL)散度距離,它的具體計算公式如下表示。

運用公式(1)進行迭代計算,最終得到權重矩陣W和特征矩陣H。串聯特征矩陣H 的元素得到一串序列,該序列就是圖像哈希。
比較圖像哈希序列的相似度有多種方法,例如:L2范數、漢明距離、最大最小比值法等。本文采用相關系數方法來計算哈希序列的相似度[4],相關系數的定義如下:

其中,μ1和μ2分別是h1和h2的均值,相關系數的取值范圍為[- 1,1] ,兩幅圖像越相似,其對應的圖像哈希序列的相關系數就越大;反之則越小。如果相關系數大于預先設定的閾值,則可認為輸入的圖像是相似圖像,否則認為其視覺內容存在明顯差異或者為不同內容。
本文設計的相似圖像檢測軟件使用Python 語言在JetBrains PyCharm 環境下設計并實現[2]。軟件用戶圖形界面使用PyQt5 工具包構造,使用OpenCV3 庫和NumPy 庫處理數字圖像[3]。該軟件的運行界面和功能測試圖像分別如圖4(a)、(b)、(c)所示。

圖4 軟件運行界面及測試圖像
為了驗證軟件功能,利用StirMarkBenchmark 軟件對圖4(b)所示圖像進行JPEG 壓縮、水印嵌入、縮放和旋轉等攻擊處理,得到處理后的圖像分別如圖5(a)、(b)、(c)、(d)所示。
接下來對軟件功能進行驗證。單擊“計算圖像哈希”按鈕進入功能界面,選擇圖4(b)作為輸入圖像,單擊“計算哈希”按鈕計算圖像哈希,計算結果如圖6(a)所示,單擊“保存結果”按鈕可將哈希序列計算結果以Excel 文件保存輸出。單擊“檢測相似圖像(圖像輸入)”按鈕進入功能界面,選擇圖4(b)作為源圖像進行輸入,選取圖4(c)、圖5(a)、(b)、(c)、(d)作為待檢測圖像進行輸入,單擊“檢測相似圖像”按鈕,軟件便計算源圖像與待檢測圖像的相似度,檢測結果如圖6(b)所示,單擊“保存結果”按鈕可將檢測結果以Excel 文件保存輸出。單擊“檢測相似圖像(文件輸入)”按鈕進入功能界面,選擇使用該軟件功能保存的Excel 文件結果分別作為源圖像和待檢測圖像輸入,單擊“檢測相似圖像”按鈕,軟件便計算源圖像與待檢測圖像的相似度,檢測結果如圖6(c)所示,單擊“保存結果”按鈕可將檢測結果以文件形式保存。單擊“設置”按鈕可以進行系統設置,包括修改哈希算法的閾值和檢測結果的保存方式等。單擊“退出程序”按鈕即可退出軟件。

圖5 處理后的測試圖像

圖6 功能驗證結果
本文利用Python 語言實現基于環形分割和非負矩陣分解的感知圖像哈希算法,基于該算法在JetBrains PyCharm 環境下設計和開發了一款高效的相似圖像檢測軟件。該軟件實現了圖像哈希計算,可以有效檢測經過旋轉、JPEG 壓縮、水印嵌入、亮度調整、對比度調整、縮放等常規數字圖像處理手段處理后的相似圖像,實用性強。經測試,在型號為I7-7700 的CPU 硬件支持下,圖像哈希的計算時間僅需0.5 秒,檢測兩個圖像是否為相似圖像僅需0.001 秒。