劉婉婷,梁曉萍,張瀚勻
(1.廣西師范大學(xué)計(jì)算機(jī)科學(xué)與信息工程學(xué)院,桂林541004;2.廣西師范大學(xué)圖書館,桂林541004)
隨著移動(dòng)數(shù)字技術(shù)的快速發(fā)展和移動(dòng)設(shè)備的普及,人們都喜歡用照片和視頻來記錄自己的生活日常和遇到的風(fēng)景等并分享到社交平臺(tái),這為互聯(lián)網(wǎng)帶來了海量的圖像信息數(shù)據(jù)。在圖像數(shù)據(jù)呈爆炸式速度增長(zhǎng)的時(shí)代,如何從大量圖像數(shù)據(jù)中快速有效地檢索圖像是一項(xiàng)艱巨的挑戰(zhàn)。圖像檢索即從數(shù)據(jù)圖像庫中查找內(nèi)容相似的圖像,目前大多數(shù)研究者都致力于研究基于圖像低層視覺特征[1]的檢索方法,但由于其與高層語義之間存在的鴻溝,目前還無法完全檢索出符合人類視覺特征的圖像,例如同一場(chǎng)景,僅移動(dòng)一點(diǎn)攝像頭或從不用角度拍攝的圖像,人的視覺會(huì)判斷為相似的圖像,但由于其內(nèi)容產(chǎn)生了些許不同,基于內(nèi)容的檢索算法不一定都將其判斷為相似圖像而檢索出來。因此,為了盡可能減少這些缺陷給圖像檢索帶來的影響,一個(gè)優(yōu)良的圖像特征提取算法和恰當(dāng)?shù)南嗨贫绕ヅ浞椒@得尤為重要。感知圖像哈希[2]是數(shù)字圖像領(lǐng)域常用的基于內(nèi)容的相似圖像搜索技術(shù)[3],它能有效降低圖像存儲(chǔ)代價(jià)并減少計(jì)算復(fù)雜度。具體來說,它將圖像低層特征映射成一串緊湊且固定大小的字符串,通過字符串間的相似度來衡量圖像特征內(nèi)容的相似度,也就是說,相同或相似的圖像應(yīng)該有相同或相近的哈希,不同的圖像生成的哈希值也應(yīng)有很大差異,相似度越高圖像的內(nèi)容越接近。
因此本文基于感知哈希算法設(shè)計(jì)了一款圖像檢索系統(tǒng),實(shí)現(xiàn)在圖像數(shù)據(jù)集中快速有效搜索目標(biāo)圖像,界面直觀且易操作,使用新發(fā)表且分類性能好的感知圖像哈希算法,在保證檢索圖像準(zhǔn)確率的同時(shí)提高了檢索效率。本文將從系統(tǒng)設(shè)計(jì)、系統(tǒng)處理流程、系統(tǒng)核心算法和軟件實(shí)現(xiàn)及測(cè)試4個(gè)部分闡述設(shè)計(jì)的圖像檢索系統(tǒng)。
本文設(shè)計(jì)的圖像檢索系統(tǒng)從圖像檢索數(shù)據(jù)庫中選擇需要檢索的圖像,通過計(jì)算圖像哈希和目標(biāo)圖像哈希與數(shù)據(jù)庫圖像哈希之間的相似度將檢索結(jié)果顯示出來。因此本系統(tǒng)有兩個(gè)主要模塊:載入待檢索圖像模塊和圖像檢索模塊。系統(tǒng)功能模塊如圖1所示。
系統(tǒng)各模塊功能介紹如下。①載入待檢索圖像:用戶從數(shù)據(jù)庫或互聯(lián)網(wǎng)上下載的圖像中選擇檢索的目標(biāo)圖像,系統(tǒng)獲取到目標(biāo)圖像后,在主界面指定區(qū)域顯示目標(biāo)圖像,并通過前面介紹感知圖像哈希算法計(jì)算出圖像的哈希值。②圖像檢索:計(jì)算目標(biāo)圖像哈希和數(shù)據(jù)庫所有圖像哈希的歐氏距離,距離值越小表示兩幅圖像內(nèi)容越相似,距離越大表示內(nèi)容差異越大。將所有的距離值從小到大排序,為保證圖像的相似度,選擇與目標(biāo)檢索圖像最相似的前10幅圖像在檢索區(qū)域顯示。
圖1功能模塊
系統(tǒng)的處理流程如圖2所示。用戶選擇待檢索的圖像作為輸入后,系統(tǒng)調(diào)用哈希算法對(duì)輸入圖像進(jìn)行計(jì)算,得到的待檢索圖像哈希值與哈希文檔中的哈希序列逐一計(jì)算相似度,通過對(duì)相似度排序,將排序靠前的檢索圖像顯示出來。
圖2系統(tǒng)處理流程
本系統(tǒng)的核心算法使用唐等[4]已發(fā)表的《基于視覺顯著模型和不變矩的魯棒圖像哈希》。該算法能抵抗對(duì)比度調(diào)整、斑點(diǎn)噪聲、高斯低通濾波等圖像常見攻擊,在魯棒性和唯一性之間能達(dá)到良好的分類性能,可以很好識(shí)別內(nèi)容相似圖像和不同圖像。算法流程如圖3所示。
圖3算法流程
該算法主要分為3個(gè)步驟:
(1)首先使用雙三次插值將輸入圖像轉(zhuǎn)換為尺寸規(guī)格化圖像。該步驟可以保證算法抵抗圖像縮放操作,且使得不同大小的圖像得到長(zhǎng)度一致的哈希序列。
(2)其次通過聯(lián)合視覺顯著圖和YCbCr顏色空間中的一級(jí)2D-DWT的LL子帶得到加權(quán)表示。其中視覺顯著圖由ITTI視覺顯著模型提取得到,相較于其他視覺顯著模型,它能在計(jì)算成本和檢測(cè)顯著區(qū)域之間達(dá)到較好的平衡。ITTI模型通過高斯金字塔、中心環(huán)繞計(jì)算和跨比例計(jì)算等技術(shù)提取顏色顯著圖Mc、強(qiáng)度顯著圖Mi以及方向顯著圖Mo,通過以下公式融合上述的3個(gè)顯著圖得到最終的顯著圖M:
眾所周知,LL子帶的DWT系數(shù)是近似系數(shù),相比其他子帶系數(shù)更加穩(wěn)定。該系數(shù)受一些數(shù)字圖像操作影響較小,能夠提高算法的魯棒性。假設(shè)D為L(zhǎng)L子帶的系數(shù)矩陣。由于LL子帶的DWT系數(shù)的數(shù)量大約是輸入圖像的像素?cái)?shù)量的1/4,想要得到顯著圖和LL子帶的加權(quán)表示就需要將顯著圖M插值成它的下采樣版本J。加權(quán)表示I則可以通過如下計(jì)算得到:
其中I(i,j)、D(i,j)和J(i,j)分別是I、D和J在第i行和第j列的元素。
(3)最后選擇加權(quán)表示I的不變矩作為圖像特征并生成哈希序列。其中不變矩是由Hu最早提出的,它不僅對(duì)平移、伸縮、鏡像以及旋轉(zhuǎn)等幾何變換具有魯棒性,且可以有效區(qū)分不同圖像。有關(guān)Hu矩的更多計(jì)算細(xì)節(jié),可參見文獻(xiàn)[4]。
圖像哈希有多種相似度衡量的方法,例如漢明距離、相關(guān)系數(shù)、歐氏距離(L2范數(shù))等。實(shí)際算法研究中需要根據(jù)實(shí)際情況選擇最適合的相似度比較方法。該算法采用歐氏距離來度量圖像內(nèi)容的相似程度,歐氏距離d的公式如下。
其中h1和h2分別表示兩張圖像的哈希序列。
針對(duì)目前圖像檢索軟件大部分是基于傳統(tǒng)文本或基于內(nèi)容但檢索效果不理想的情況,本文設(shè)計(jì)的圖像檢索系統(tǒng)結(jié)合多種特征提取技術(shù),相比單一的特征,提高了檢索的準(zhǔn)確率。本系統(tǒng)在Windows 10環(huán)境下,主要使用Python編程語言和OpenCV 3軟件庫在PyCharm 2019平臺(tái)來設(shè)計(jì)實(shí)現(xiàn)[5]。采用公開數(shù)據(jù)集INRIA Copydays[6]作為實(shí)驗(yàn)數(shù)據(jù)庫,選用了該數(shù)據(jù)集157張?jiān)瓐D像以及對(duì)全部原圖做了9種JPEG壓縮后的圖像,JPEG壓縮的質(zhì)量因子分別為75、50、30、20、15、10、8、5、3。在存儲(chǔ)數(shù)據(jù)庫圖像的哈希值時(shí)使用了Python的csv文件存檔。csv文件格式以數(shù)字和純文本形式存儲(chǔ)數(shù)據(jù),本系統(tǒng)的哈希序列為整數(shù),因此采用csv文件格式存儲(chǔ)是可行的,并且更加便捷。
用戶圖形界面設(shè)計(jì)為左右兩部分,左邊區(qū)域用來控制系統(tǒng)操作,右邊區(qū)域顯示圖像檢索結(jié)果。界面使用Python的標(biāo)準(zhǔn)GUI庫中的Tkinter庫和Place布局實(shí)現(xiàn)。Tkinter庫內(nèi)置多種現(xiàn)成的控件,可以快速創(chuàng)建GUI應(yīng)用程序,對(duì)設(shè)計(jì)不復(fù)雜的界面很友好。Place布局也叫絕對(duì)布局,需要指定每個(gè)組件的絕對(duì)位置或相對(duì)某個(gè)組件的位置,能相對(duì)靈活的設(shè)計(jì)界面。首先創(chuàng)建Tk接口并設(shè)置界面長(zhǎng)寬,將主界面的框架封裝成Ui類,在類中主要使用了Button、Label、Canvas和Frame這4種控件。系統(tǒng)標(biāo)題用Label控件實(shí)現(xiàn),在左側(cè)設(shè)置了3個(gè)Button控件,實(shí)現(xiàn)載入目標(biāo)圖像、圖像檢索以及退出系統(tǒng)功能。在Button上方是Canvas控件,用來顯示檢索的圖像,由于Tkinter只能識(shí)別GIF格式圖像,因此需要借助PIL庫顯示別的格式圖像。右側(cè)在一個(gè)Frame內(nèi)設(shè)置了10個(gè)Canvas控件顯示檢索到的圖像。系統(tǒng)主界面如圖4所示。
圖4系統(tǒng)主界面
點(diǎn)擊“載入待檢索圖像”按鈕,系統(tǒng)調(diào)用Tkinter庫中的文件對(duì)話框filedialog打開文件夾,并定義變量保存返回的用戶選擇的待檢索圖像的文件名,再使用PIL庫中Image模塊打開對(duì)應(yīng)文件名的圖像,PIL是第三方圖像處理庫,內(nèi)置豐富的圖像處理模塊,可實(shí)現(xiàn)圖像展示、圖像處理等功能。通過自定義的re?size函數(shù)調(diào)整圖像大小使其適應(yīng)Canvas控件尺寸并利用Image模塊的ImageTk顯示圖像。之后將獲取到的文件名傳給感知圖像哈希算法封裝的HuHash類,通過類的對(duì)象調(diào)用類中的Huhash函數(shù)得到待檢索圖像的哈希序列并將其保存在變量中。圖5和圖6分別展示了選擇兩幅待檢索圖像的測(cè)試圖。
圖5待檢索圖像測(cè)試圖:馬
圖6待檢索圖像測(cè)試圖:花
加載事先處理好的數(shù)據(jù)庫的csv文件,通過Numpy庫的norm函數(shù)計(jì)算待檢索圖像哈希和csv文件每一行哈希的歐氏距離,其中第i行對(duì)應(yīng)數(shù)據(jù)庫中第i幅圖像。Numpy庫包含大量數(shù)組和矩陣等數(shù)學(xué)運(yùn)算,是一個(gè)運(yùn)行速度快且豐富的數(shù)學(xué)函數(shù)庫。將得到的距離值存入定義的列表中,使用Python內(nèi)置min函數(shù)取前10個(gè)最小的距離值并用index函數(shù)獲取最小距離值的索引,從數(shù)據(jù)庫中檢索到對(duì)應(yīng)索引值的圖像,用resize函數(shù)調(diào)整大小在右側(cè)的10個(gè)Canvas控件中從左往右、從上往下顯示出來。上述選擇的兩幅測(cè)試圖像檢索結(jié)果界面如圖7和圖8所示。從測(cè)試結(jié)果圖可以看出,本文的算法能精確檢索出與目標(biāo)圖像相似的全部圖像。
圖7圖像檢索結(jié)果圖:馬
圖8圖像檢索結(jié)果圖:花
本文在PyCharm 2019開發(fā)平臺(tái)設(shè)計(jì)實(shí)現(xiàn)了基于感知哈希的圖像檢索系統(tǒng)。盡管基于內(nèi)容的檢索方法自身存在的不足,目前還無法達(dá)到基于語義的圖像檢索方法性能。但是本文使用的基于視覺顯著模型和不變矩的圖像哈希算法能在很大程度上改善基于內(nèi)容的檢索方法存在的缺陷,達(dá)到令人滿意的檢索效果,系統(tǒng)界面設(shè)計(jì)簡(jiǎn)潔,操作便捷,能滿足最基本的檢索需求。