刘婉婷,梁晓萍,张瀚匀
(1.广西师范大学计算机科学与信息工程学院,桂林541004;2.广西师范大学图书馆,桂林541004)
随着移动数字技术的快速发展和移动设备的普及,人们都喜欢用照片和视频来记录自己的生活日常和遇到的风景等并分享到社交平台,这为互联网带来了海量的图像信息数据。在图像数据呈爆炸式速度增长的时代,如何从大量图像数据中快速有效地检索图像是一项艰巨的挑战。图像检索即从数据图像库中查找内容相似的图像,目前大多数研究者都致力于研究基于图像低层视觉特征[1]的检索方法,但由于其与高层语义之间存在的鸿沟,目前还无法完全检索出符合人类视觉特征的图像,例如同一场景,仅移动一点摄像头或从不用角度拍摄的图像,人的视觉会判断为相似的图像,但由于其内容产生了些许不同,基于内容的检索算法不一定都将其判断为相似图像而检索出来。因此,为了尽可能减少这些缺陷给图像检索带来的影响,一个优良的图像特征提取算法和恰当的相似度匹配方法显得尤为重要。感知图像哈希[2]是数字图像领域常用的基于内容的相似图像搜索技术[3],它能有效降低图像存储代价并减少计算复杂度。具体来说,它将图像低层特征映射成一串紧凑且固定大小的字符串,通过字符串间的相似度来衡量图像特征内容的相似度,也就是说,相同或相似的图像应该有相同或相近的哈希,不同的图像生成的哈希值也应有很大差异,相似度越高图像的内容越接近。
因此本文基于感知哈希算法设计了一款图像检索系统,实现在图像数据集中快速有效搜索目标图像,界面直观且易操作,使用新发表且分类性能好的感知图像哈希算法,在保证检索图像准确率的同时提高了检索效率。本文将从系统设计、系统处理流程、系统核心算法和软件实现及测试4个部分阐述设计的图像检索系统。
本文设计的图像检索系统从图像检索数据库中选择需要检索的图像,通过计算图像哈希和目标图像哈希与数据库图像哈希之间的相似度将检索结果显示出来。因此本系统有两个主要模块:载入待检索图像模块和图像检索模块。系统功能模块如图1所示。
系统各模块功能介绍如下。①载入待检索图像:用户从数据库或互联网上下载的图像中选择检索的目标图像,系统获取到目标图像后,在主界面指定区域显示目标图像,并通过前面介绍感知图像哈希算法计算出图像的哈希值。②图像检索:计算目标图像哈希和数据库所有图像哈希的欧氏距离,距离值越小表示两幅图像内容越相似,距离越大表示内容差异越大。将所有的距离值从小到大排序,为保证图像的相似度,选择与目标检索图像最相似的前10幅图像在检索区域显示。
图1功能模块
系统的处理流程如图2所示。用户选择待检索的图像作为输入后,系统调用哈希算法对输入图像进行计算,得到的待检索图像哈希值与哈希文档中的哈希序列逐一计算相似度,通过对相似度排序,将排序靠前的检索图像显示出来。
图2系统处理流程
本系统的核心算法使用唐等[4]已发表的《基于视觉显著模型和不变矩的鲁棒图像哈希》。该算法能抵抗对比度调整、斑点噪声、高斯低通滤波等图像常见攻击,在鲁棒性和唯一性之间能达到良好的分类性能,可以很好识别内容相似图像和不同图像。算法流程如图3所示。
图3算法流程
该算法主要分为3个步骤:
(1)首先使用双三次插值将输入图像转换为尺寸规格化图像。该步骤可以保证算法抵抗图像缩放操作,且使得不同大小的图像得到长度一致的哈希序列。
(2)其次通过联合视觉显著图和YCbCr颜色空间中的一级2D-DWT的LL子带得到加权表示。其中视觉显著图由ITTI视觉显著模型提取得到,相较于其他视觉显著模型,它能在计算成本和检测显著区域之间达到较好的平衡。ITTI模型通过高斯金字塔、中心环绕计算和跨比例计算等技术提取颜色显著图Mc、强度显著图Mi以及方向显著图Mo,通过以下公式融合上述的3个显著图得到最终的显著图M:
众所周知,LL子带的DWT系数是近似系数,相比其他子带系数更加稳定。该系数受一些数字图像操作影响较小,能够提高算法的鲁棒性。假设D为LL子带的系数矩阵。由于LL子带的DWT系数的数量大约是输入图像的像素数量的1/4,想要得到显著图和LL子带的加权表示就需要将显著图M插值成它的下采样版本J。加权表示I则可以通过如下计算得到:
其中I(i,j)、D(i,j)和J(i,j)分别是I、D和J在第i行和第j列的元素。
(3)最后选择加权表示I的不变矩作为图像特征并生成哈希序列。其中不变矩是由Hu最早提出的,它不仅对平移、伸缩、镜像以及旋转等几何变换具有鲁棒性,且可以有效区分不同图像。有关Hu矩的更多计算细节,可参见文献[4]。
图像哈希有多种相似度衡量的方法,例如汉明距离、相关系数、欧氏距离(L2范数)等。实际算法研究中需要根据实际情况选择最适合的相似度比较方法。该算法采用欧氏距离来度量图像内容的相似程度,欧氏距离d的公式如下。
其中h1和h2分别表示两张图像的哈希序列。
针对目前图像检索软件大部分是基于传统文本或基于内容但检索效果不理想的情况,本文设计的图像检索系统结合多种特征提取技术,相比单一的特征,提高了检索的准确率。本系统在Windows 10环境下,主要使用Python编程语言和OpenCV 3软件库在PyCharm 2019平台来设计实现[5]。采用公开数据集INRIA Copydays[6]作为实验数据库,选用了该数据集157张原图像以及对全部原图做了9种JPEG压缩后的图像,JPEG压缩的质量因子分别为75、50、30、20、15、10、8、5、3。在存储数据库图像的哈希值时使用了Python的csv文件存档。csv文件格式以数字和纯文本形式存储数据,本系统的哈希序列为整数,因此采用csv文件格式存储是可行的,并且更加便捷。
用户图形界面设计为左右两部分,左边区域用来控制系统操作,右边区域显示图像检索结果。界面使用Python的标准GUI库中的Tkinter库和Place布局实现。Tkinter库内置多种现成的控件,可以快速创建GUI应用程序,对设计不复杂的界面很友好。Place布局也叫绝对布局,需要指定每个组件的绝对位置或相对某个组件的位置,能相对灵活的设计界面。首先创建Tk接口并设置界面长宽,将主界面的框架封装成Ui类,在类中主要使用了Button、Label、Canvas和Frame这4种控件。系统标题用Label控件实现,在左侧设置了3个Button控件,实现载入目标图像、图像检索以及退出系统功能。在Button上方是Canvas控件,用来显示检索的图像,由于Tkinter只能识别GIF格式图像,因此需要借助PIL库显示别的格式图像。右侧在一个Frame内设置了10个Canvas控件显示检索到的图像。系统主界面如图4所示。
图4系统主界面
点击“载入待检索图像”按钮,系统调用Tkinter库中的文件对话框filedialog打开文件夹,并定义变量保存返回的用户选择的待检索图像的文件名,再使用PIL库中Image模块打开对应文件名的图像,PIL是第三方图像处理库,内置丰富的图像处理模块,可实现图像展示、图像处理等功能。通过自定义的re⁃size函数调整图像大小使其适应Canvas控件尺寸并利用Image模块的ImageTk显示图像。之后将获取到的文件名传给感知图像哈希算法封装的HuHash类,通过类的对象调用类中的Huhash函数得到待检索图像的哈希序列并将其保存在变量中。图5和图6分别展示了选择两幅待检索图像的测试图。
图5待检索图像测试图:马
图6待检索图像测试图:花
加载事先处理好的数据库的csv文件,通过Numpy库的norm函数计算待检索图像哈希和csv文件每一行哈希的欧氏距离,其中第i行对应数据库中第i幅图像。Numpy库包含大量数组和矩阵等数学运算,是一个运行速度快且丰富的数学函数库。将得到的距离值存入定义的列表中,使用Python内置min函数取前10个最小的距离值并用index函数获取最小距离值的索引,从数据库中检索到对应索引值的图像,用resize函数调整大小在右侧的10个Canvas控件中从左往右、从上往下显示出来。上述选择的两幅测试图像检索结果界面如图7和图8所示。从测试结果图可以看出,本文的算法能精确检索出与目标图像相似的全部图像。
图7图像检索结果图:马
图8图像检索结果图:花
本文在PyCharm 2019开发平台设计实现了基于感知哈希的图像检索系统。尽管基于内容的检索方法自身存在的不足,目前还无法达到基于语义的图像检索方法性能。但是本文使用的基于视觉显著模型和不变矩的图像哈希算法能在很大程度上改善基于内容的检索方法存在的缺陷,达到令人满意的检索效果,系统界面设计简洁,操作便捷,能满足最基本的检索需求。