陳震海,梁曉萍,孫容海,黃麗艷
(1.廣西師范大學(xué)計算機科學(xué)與信息工程學(xué)院,桂林541004;2.廣西師范大學(xué)出版社集團,桂林541004)
隨著互聯(lián)網(wǎng)和多媒體技術(shù)的發(fā)展,人們開始大量使用數(shù)字圖像來表達信息。例如,人們?nèi)找嫦矚g使用微信、微博等社交平臺來分享生活、學(xué)習(xí)和工作的照片。實際應(yīng)用中,同一幅圖像可能被不同用戶上傳到互聯(lián)網(wǎng),而圖像在上傳的過程中可能還會經(jīng)歷壓縮、水印嵌入等常規(guī)圖像處理。不同用戶上傳的圖像的文件大小可能不同,但是它們具有相似的視覺內(nèi)容。換言之,一幅圖像可能會在互聯(lián)網(wǎng)上存在若干個副本,造成網(wǎng)絡(luò)存儲空間浪費。因此,如何能夠高效快速地檢測網(wǎng)絡(luò)空間中是否存在一幅給定圖像的相似圖像,已經(jīng)成為互聯(lián)網(wǎng)應(yīng)用中亟待解決的一個問題。感知圖像哈希是解決上述問題的一項高效技術(shù)。它將數(shù)字圖像映射成一串短小的數(shù)字序列即圖像哈希序列,可用一串唯一的哈希序列來表示數(shù)字圖像。從本質(zhì)上來講,感知圖像哈希反映了數(shù)字圖像的視覺內(nèi)容,只要兩個數(shù)字圖像的視覺內(nèi)容一致,那么它們對應(yīng)的哈希序列就應(yīng)該是相同或相似。目前,感知圖像哈希技術(shù)憑借其優(yōu)越的性能已經(jīng)被普遍運用于相似圖像檢測、圖像檢索、圖像識別等領(lǐng)域。
本文使用Python 語言實現(xiàn)了基于環(huán)形分割和非負矩陣分解的感知圖像哈希算法[1],并基于該算法設(shè)計了一個高效的相似圖像檢測軟件。該軟件界面美觀,操作簡便,實現(xiàn)了圖像哈希計算和相似圖像檢測等功能。
本文設(shè)計的相似圖像檢測軟件能抵抗諸如旋轉(zhuǎn)、JPEG 壓縮、亮度調(diào)整、水印嵌入等常規(guī)的數(shù)字圖像處理手段的攻擊,能夠快速檢測出相似圖像,解決相似圖像重復(fù)占用網(wǎng)絡(luò)存儲空間的問題。該軟件將接收圖像作為輸入,計算其圖像哈希,并通過計算哈希相似度來檢測相似圖像,最后將結(jié)果輸出。軟件的主要功能如下:計算圖像哈希、檢測相似圖像(圖像輸入)、檢測相似圖像(文件輸入)。此外,該軟件還有設(shè)置功能,方便用戶根據(jù)實際需求修改軟件運行參數(shù)。本軟件的功能模塊圖如圖1。
圖1 功能模塊圖
該軟件模塊的功能介紹如下。(1)計算圖像哈希:選取一幅或多幅圖像作為輸入并計算其圖像哈希,同時將圖像哈希以Excel 文件方式進行保存。(2)檢測相似圖像(圖像輸入):選取一幅或多幅選取源圖像和待檢測圖像作為輸入,然后計算所有源圖像和待檢測圖像的哈希序列,最后計算源圖像與待檢測圖像的哈希序列的相似度。(3)檢測相似圖像(文件輸入):選取該軟件保存的Excel 文件分別作為源圖像和待檢測圖像的輸入,逐一計算源圖像與待檢測圖像的哈希序列的相似度。(4)系統(tǒng)設(shè)置:可以在本軟件中修改算法閾值、修改保存方法、恢復(fù)默認設(shè)置和保存設(shè)置。
圖2 為本文軟件的處理流程,具體過程如下。運行軟件后,系統(tǒng)初始化運行參數(shù)并進入等待用戶操作狀態(tài)。用戶輸入圖像后,系統(tǒng)按照預(yù)設(shè)的參數(shù)使用哈希算法計算哈希序列,輸出的哈希序列與哈希庫中的哈希序列逐一計算相似度,根據(jù)相似計算結(jié)果來判斷輸入圖像是否為相似圖像。本軟件用到的哈希算法將在第3 節(jié)進行詳細介紹。
圖2 軟件處理流程
本文設(shè)計的相似圖像檢測軟件的核心算法主要分為兩個部分,一是計算圖像的哈希序列,二是檢測哈希序列的相似度。本文使用一種基于環(huán)形分割和非負矩陣分解的圖像哈希算法[1]來計算圖像的哈希序列,算法處理過程示意圖如圖3 所示。
圖3 算法處理過程示意圖
該算法可以概括為如下三個步驟,第一步,對輸入圖像進行預(yù)處理,將輸入圖像轉(zhuǎn)換成規(guī)范化圖像,為提取相同長度的圖像哈希序列奠定基礎(chǔ);第二步,對預(yù)處理后的圖像分割成多個環(huán)形區(qū)域,獲取每個圓環(huán)的像素集合,并生成輔助圖像。第三步,利用非負矩陣分解算法壓縮輔助圖像,生成長度確定且簡短的圖像哈希序列。以下將詳細介紹算法處理的各計算步驟。
為了保證所有圖像哈希序列的長度一致并且能夠?qū)s放操作魯棒,輸入的圖像首先使用雙線性插值算法[3]將圖像尺寸歸一化為m×m,接著對圖像進行高斯低通濾波,目的是平滑圖像,降低噪聲或圖像細微紋理對圖像哈希序列產(chǎn)生的影響。如果輸入圖像是彩色圖像,還需要將彩色圖像的RGB 顏色空間轉(zhuǎn)換到Y(jié)CbCr顏色空間,選取亮度分量Y 表示預(yù)處理后的圖像。
一般來說,圖像的旋轉(zhuǎn)變換大多以圖像中心為坐標原點,故以圖像中心為圖像內(nèi)切圓環(huán)內(nèi)區(qū)域的像素在旋轉(zhuǎn)變換前后基本保持不變。因此,利用這一特性可構(gòu)造抗旋轉(zhuǎn)變換的圖像特征,本節(jié)算法將尺度為m×m 的圖像以圖像中心點為坐標原點劃分出n 個面積相同的圓環(huán),將每個圓環(huán)內(nèi)的像素集合升序排列并插值成相同長度的一維向量,按圓環(huán)半徑大小順序連接劃分出的n 個一維向量構(gòu)造輔助圖像V,在該輔助圖像V 上提取出的特征能有效抵抗圖像的旋轉(zhuǎn)變換。
非負矩陣分解,簡稱NMF,是研究人員Lee 和Seung 于1999 年發(fā)表在Nature 上的一種矩陣分解算法。它是一種高效的數(shù)據(jù)降維技術(shù),比主成分分析和矢量量化具有更好的局部學(xué)習(xí)表示能力。顧名思義該算法就是將非負的大矩陣分解成兩個非負的小矩陣。本節(jié)利用NMF 算法將輔助圖像V 壓縮分解為權(quán)重矩陣W 與特征矩陣H。本文使用一種乘法更新法規(guī)則來快速計算NMF 的權(quán)重矩陣W 與特征矩陣H,其公式如下,其中W 與H 的初始值采用隨機函數(shù)生成。
更新規(guī)則對應(yīng)的最小化代價函數(shù)稱為Kullback-Leibler(KL)散度距離,它的具體計算公式如下表示。
運用公式(1)進行迭代計算,最終得到權(quán)重矩陣W和特征矩陣H。串聯(lián)特征矩陣H 的元素得到一串序列,該序列就是圖像哈希。
比較圖像哈希序列的相似度有多種方法,例如:L2范數(shù)、漢明距離、最大最小比值法等。本文采用相關(guān)系數(shù)方法來計算哈希序列的相似度[4],相關(guān)系數(shù)的定義如下:
其中,μ1和μ2分別是h1和h2的均值,相關(guān)系數(shù)的取值范圍為[- 1,1] ,兩幅圖像越相似,其對應(yīng)的圖像哈希序列的相關(guān)系數(shù)就越大;反之則越小。如果相關(guān)系數(shù)大于預(yù)先設(shè)定的閾值,則可認為輸入的圖像是相似圖像,否則認為其視覺內(nèi)容存在明顯差異或者為不同內(nèi)容。
本文設(shè)計的相似圖像檢測軟件使用Python 語言在JetBrains PyCharm 環(huán)境下設(shè)計并實現(xiàn)[2]。軟件用戶圖形界面使用PyQt5 工具包構(gòu)造,使用OpenCV3 庫和NumPy 庫處理數(shù)字圖像[3]。該軟件的運行界面和功能測試圖像分別如圖4(a)、(b)、(c)所示。
圖4 軟件運行界面及測試圖像
為了驗證軟件功能,利用StirMarkBenchmark 軟件對圖4(b)所示圖像進行JPEG 壓縮、水印嵌入、縮放和旋轉(zhuǎn)等攻擊處理,得到處理后的圖像分別如圖5(a)、(b)、(c)、(d)所示。
接下來對軟件功能進行驗證。單擊“計算圖像哈?!卑粹o進入功能界面,選擇圖4(b)作為輸入圖像,單擊“計算哈?!卑粹o計算圖像哈希,計算結(jié)果如圖6(a)所示,單擊“保存結(jié)果”按鈕可將哈希序列計算結(jié)果以Excel 文件保存輸出。單擊“檢測相似圖像(圖像輸入)”按鈕進入功能界面,選擇圖4(b)作為源圖像進行輸入,選取圖4(c)、圖5(a)、(b)、(c)、(d)作為待檢測圖像進行輸入,單擊“檢測相似圖像”按鈕,軟件便計算源圖像與待檢測圖像的相似度,檢測結(jié)果如圖6(b)所示,單擊“保存結(jié)果”按鈕可將檢測結(jié)果以Excel 文件保存輸出。單擊“檢測相似圖像(文件輸入)”按鈕進入功能界面,選擇使用該軟件功能保存的Excel 文件結(jié)果分別作為源圖像和待檢測圖像輸入,單擊“檢測相似圖像”按鈕,軟件便計算源圖像與待檢測圖像的相似度,檢測結(jié)果如圖6(c)所示,單擊“保存結(jié)果”按鈕可將檢測結(jié)果以文件形式保存。單擊“設(shè)置”按鈕可以進行系統(tǒng)設(shè)置,包括修改哈希算法的閾值和檢測結(jié)果的保存方式等。單擊“退出程序”按鈕即可退出軟件。
圖5 處理后的測試圖像
圖6 功能驗證結(jié)果
本文利用Python 語言實現(xiàn)基于環(huán)形分割和非負矩陣分解的感知圖像哈希算法,基于該算法在JetBrains PyCharm 環(huán)境下設(shè)計和開發(fā)了一款高效的相似圖像檢測軟件。該軟件實現(xiàn)了圖像哈希計算,可以有效檢測經(jīng)過旋轉(zhuǎn)、JPEG 壓縮、水印嵌入、亮度調(diào)整、對比度調(diào)整、縮放等常規(guī)數(shù)字圖像處理手段處理后的相似圖像,實用性強。經(jīng)測試,在型號為I7-7700 的CPU 硬件支持下,圖像哈希的計算時間僅需0.5 秒,檢測兩個圖像是否為相似圖像僅需0.001 秒。