具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明实施例的一部分实施例,而不是全部的实施例。基于本发明实施例中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明实施例保护的范围。
现有技术是基于图片的局部特征进行图片判重,主要缺点是计算效率低召回率不高。另外对于大型图片库,传统计算查找索引的效率很低,不能达到实时性的要求。本发明实施例针对图片被裁减造成图片内容信息损失的情况,利用图片全局特征提取算法,解决传统索引方法利用局部特征算法召回率不高以及算法健壮性差的问题,同时解决计算查找效率低的问题。以下将具体通过多个实施例对本发明实施例进行展开说明和介绍。
作为本发明实施例的一个方面,本实施例提供一种基于图片内容的图像检索方法,参考图1,为本发明一实施例提供的基于图片内容的图像检索方法的流程示意图,包括:
S101,对目标图像依次进行DCT变换计算和二值化处理,获取目标图像全局特征的多数位字符串指纹信息。
可以理解为,为了更全面准确的根据目标图像进行重复图像的检索,本步骤进行目标图像的全局特征的提取。具体而言,先对目标图像进行DCT变换计算,提取目标图像在所有频率下的特征,再根据DCT变换计算的结果,对提取的特征进行二值化处理,最终得到一个固定位数的0/1字符串,这就是这张目标图像的指纹信息。其中目标图像即为检索的基础,根据该检索基础进行与其重复的图像的检索。
可以理解的是,其中的DCT变换即为离散余弦变换(DCT forDiscrete CosineTransform),DCT除了具有一般的正交变换性质外,其变换阵的基向量近似于Toeplitz矩阵的特征向量,能够体现人类语言、图像信号的相关特性。
S102,对指纹信息进行哈希编码,并将指纹信息中的哈希编码值按位进行分组。
为了更快速细致的进行重复图像的检索,本发明实施例采用分组式计算的索引查找算法。首先对于包含目标图像的全局特性的指纹信息进行哈希编码,得到对应的哈希编码值。之后,将上述多数位字符串形式的指纹信息中的位的哈希编码值按位进行分组,每个分组具有相同的位数。
例如,对于一个64位0/1字符串的指纹信息,采用内存换速度的方式,将指纹信息位的哈希编码值分位八组,每组八位。
S103,将每一分组按指纹信息值与哈希编码值按key-value形式进行表示,并基于每一key值对应的value值中的多个哈希编码值,分别到预建立的不同map中进行查找,获取检索结果。
可以理解为,对于上述步骤的各个分组,在进行哈希数据格式存储时,以各分组指纹信息值作为key值,并以该分组对应的哈希编码值确定该分组的value值,构成key-value数据格式,其中每个key值对应的value值中包含多个哈希编码值。则在进行检索时,对于每个分组,基于该分组的多个哈希编码值,在对应的多个map中查询是否存在相同的key值,并根据查询结果输出最终检索结果。
本发明实施例提供的基于图片内容的图像检索方法,通过对目标图像的全局特征进行提取,并基于该全局特征,采用哈希算法与分组式计算相结合进行索引查找,能够在保证准确率和召回率的同时,有效降低计算时间,提高计算效率。
根据上述的各实施例中,在对目标图像进行DCT变换计算的步骤之前,本发明实施例的方法还包括:
检查目标图像是否能够正常解码;
和/或,对于目标图像为RGB三通道彩色图片的,将RGB三通道彩色图片转化成单通道灰度图;
和/或,采用插值算法,缩小目标图像的尺寸。
可以理解为,本发明实施例在对目标图像进行DCT变换的计算之前,先对目标图像进行预处理。其中的预处理可以是对目标图像的格式进行检查,以判断其是否能够被正常解码。若目标图像是RGB三通道的彩色图片,则也可以做出将RGB三通道彩色图片转化成单通道灰度图的预处理。因为RGB除去颜色特征外其余的特征都是一样的,所以转化成单通道进行计算降低了计算量。另外,也可以对目标图像进行插值运算,以缩小目标图像的尺寸,降低计算难度。
可以理解的是,对于上述的各种预处理类型,可以单独实施,也可以任意组合一起实施。例如,对于目标图像为RGB三通道彩色图片的,可以先进行将RGB三通道彩色图片转化成单通道灰度图的预处理,再对转化后的图像采用插值算法,缩小目标图像的尺寸。
本发明实施例提供的基于图片内容的图像检索方法,通过对目标图像的预处理,能够使计算变得简单,有效降低计算量。
其中,根据上述各实施例可选的,对目标图像依次进行DCT变换计算和二值化处理,获取目标图像全局特征的多数位字符串指纹信息的步骤具体包括:
对目标图像进行DCT变换计算,获取目标图像的DCT系数矩阵,并基于DCT系数矩阵计算DCT平均值;
通过比较DCT系数矩阵中的每个元素与DCT平均值的大小,对DCT系数矩阵进行二值化处理,获取目标图像的指纹信息。
可以理解为,对于给定的目标图像或者经过预处理后的目标图像,首先计算图像的DCT变换,得到一定维数的DCT系数矩阵,例如32*32的DCT系数矩阵。再对该32*32的DCT系数矩阵求取平均值,即作为上述DCT平均值。可以理解,在对DCT系数矩阵求取平均值时,可以按下述计算公式进行计算:
上述公式计算出的F(u,v)是DCT矩阵中第I行,第j列中的DCT系数,f(i,j)是行i和列j中的像素的强度值,得到DCT系数矩阵后所有系数相加除以系数个数就得到了平均值。
之后,将上述DCT系数矩阵中的每个元素分别与DCT平均值比较,并根据比较结果对DCT系数矩阵进行二值化处理,得到一个固定位数的0/1字符串,这就是这张目标图像的指纹信息。例如,对于8*8的DCT系数矩阵,大于等于DCT平均值的设为1,小于DCT平均值的设为0,对DCT系数矩阵进行二值化,将二值化结果组合在一起,就构成了一个64位的0/1字符串。
在上述各实施例的基础上,在获取目标图像的DCT系数矩阵的步骤之后,本发明实施例的方法还包括:缩小DCT系数矩阵,保留位于DCT系数矩阵中左上角处固定维度的DCT子矩阵;相应的,通过比较DCT系数矩阵与DCT平均值的大小,对DCT系数矩阵进行二值化处理的步骤具体包括:通过比较DCT子矩阵与DCT平均值的大小,对DCT子矩阵进行二值化处理。
可以理解为,为进一步降低计算量、提高计算效率,本发明实施例在进行目标图像指纹信息的提取时,选取上述各实施例的DCT系数矩阵中位于左上角处一定维度的一部分,作为一个DCT子矩阵。例如,对于上述实施例中的32*32的DCT系数矩阵,缩小DCT只保留左上角的8*8的矩阵,这部分主要是图片中的最低频率,该8*8的矩阵即为一个DCT子矩阵。
则相应的,对于上述各实施例根据DCT系数矩阵提取指纹信息的处理流程,可替换为根据DCT子矩阵提取指纹信息的处理流程。
其中,根据上述各实施例可选的,将每一分组按指纹信息值与哈希编码值按key-value形式进行表示的步骤具体包括:按照分组的总数,建立对应数量的dict,并以各分组的指纹信息值作为对应dict的key值,每个dict的value值为一个list,用于存放相同key值的哈希编码值。
可以理解为,在根据上述各实施例对指纹信息位的哈希编码值进行分组的基础上,可以得到总的分组数目。例如,对于上述64位0/1字符串的指纹信息,可以将位的哈希编码值分位八组,每组八位。则,根据本发明实施例,可以建立八个dict,每个dict代表一组,以每组的值作为key,value是一个list,存放key相同的hash值。
在上述各实施例的基础上,在基于每一key值对应的value值中的多个哈希编码值,分别到预建立的不同map中进行查找的步骤之前,本发明实施例的方法还包括:对当前图片库中的每张历史图片生成哈希编码,并将各历史图片的哈希编码存入map数据库,构成索引库,map数据库中包含多个map。
可以理解为,在进行目标图像的检索时,是针对特定的图像数据库进行的。在本发明实施例中,可以是对房源平台中的图片数据库。因此,在进行检索之前,先对当前图片库中的每张图片生成哈希编码并存入map数据库,构成索引库,这个索引库会作为初始索引库,对后续线上请求的图片生成哈希编码并和索引库进行比对返回检索结果。可以理解的是,当前图片库中已存在的图片,均可作为历史图片,进行索引库的建立。
其中,根据上述各实施例可选的,基于每一key值对应的value值中的多个哈希编码值,分别到预建立的不同map中进行查找,获取检索结果的步骤具体包括:
分别基于value值中的各哈希编码值,通过检索索引库,在不同的map中进行查找,选取key值相同的所有哈希编码值;
遍历选取的每个哈希编码值,计算该哈希编码值与目标图像的哈希编码值间的汉明距离,并基于汉明距离,判断当前图片库中是否存在与目标图像重复的历史图片;
其中,选取的每个哈希编码值分别对应当前图片库中的一个历史图片。
可以理解为,按照上述各实施例对哈希编码值的分组,一个key值对应的value值的list中,存放与具有该相同key值的哈希编码值,在查询比对过程中,根据相同key值的各个哈希编码值分别在索引库的不同map中查找。如果有相同的key值,取出key值相同的所有哈希编码值。
选取的每个哈希编码值分别对应一张历史图片,则通过遍历选取的每个哈希编码值,并计算每个选取的哈希编码值与目标图像的哈希编码值间的汉明距离,可获知目标图像与各历史图片间的相近程度。之后,通过判断计算的汉明距离是否在限定阈值内,来判断当前图片库中是否存在与目标图像重复的图片,如果不存在说明目标图像没有和当前图片库中的图片重复,否则判定有重复,并可将检索结果输出。
为进一步说明本发明实施例的技术方案,本发明实施例根据上述各实施例提供如下实施例的处理流程,但不对本发明实施例的保护范围进行限制。
如图2所示,为本发明另一实施例提供的基于图片内容的图像检索方法的流程示意图,图中首先对用户请求或待检索的目标图像进行预处理,预处理包括检查图片的格式、是否能够正常解码、把彩色图转化成灰度图以及缩小图片尺寸等操作。
之后,图2中的抽取特征主要涉及对目标图像的DCT计算,得到DCT的8*8矩阵,并对该矩阵进行二值化,编码成64位的0/1字符串。反馈和调整主要是针对特征提取以及查找索引使用过程中暴露的问题进行优化提升。计算图片相似度是计算两张图片之间的汉明距离。查找索引取结果是查看索引库中是否存在和当前hash code的汉明距离在限定阀值内的结果,如果没有说明该图片没有和库中的图片重复,否则判为重复。具体而言,如果目标图像为RGB三通道彩色图片,本发明实施例包括以下处理流程:
(1)提取目标图像全局特征的流程:
将RGB三通道彩色图片转化成单通道灰度图进行计算,因为RGB除去颜色特征外其余的特征都是一样的,所以转化成单通道进行计算简化了计算量;
采用插值算法缩小图片尺寸,缩小尺寸以方便后边的步骤计算;
计算图片的DCT变换,得到32*32的DCT系数矩阵;
缩小DCT系数矩阵,只保留左上角的8*8的矩阵,这部分主要是图片中的最低频率;
计算DCT的平均值;
计算hash值,根据8*8的DCT矩阵,大于等于DCT均值的设为1,小于DCT均值的设为0,对DCT矩阵进行二值化,组合在一起,就构成了一个64位的0/1字符串,这就是这张图片的指纹信息;
(2)实时索引计算流程:
基于分组的思想,采用内存换速度的方式,将位的hash code值分位八组,每组八位;
建立八个dict,每个dict代表一组,以每组的值作为key,value是一个list,存放key相同的hash值;
查找时,把hash值分成八个,分别在八个map里边查找,如果有key相同的,取出key相同的所有hash值,进行线性遍历操作查询;
对当前图片库中的每张图片生成hash code存入数据库,形成索引库,这个索引库会作为初始索引库,对后续线上请求的图片生成hashcode并与索引库进行比对,最后根据比对结果返回检索图片结果。
通过对目标图像的全局特征进行提取,并在此基础上基于分组算法进行相似图片的查询与比对,能够在保证准确率和召回率的同时,有效提高计算效率。并且,可以根据当前图片数据库的图像更新,实现动态增删索引,进一步提高检索准确率。
作为本发明实施例的另一个方面,本发明实施例根据上述各实施例提供一种基于图片内容的图像检索装置,该装置用于在上述各实施例中实现基于图片内容的图像检索。因此,在上述各实施例的基于图片内容的图像检索方法中的描述和定义,可以用于本发明实施例中各个执行模块的理解,具体可参考上述实施例,此处不在赘述。
根据本发明实施例的一个实施例,基于图片内容的图像检索装置的结构如图3所示,为本发明实施例提供的译员基因的选取装置的结构示意图,该装置可以用于实现上述各方法实施例中基于图片内容的图像检索,该装置包括:指纹信息提取模块301、分组模块302和检索输出模块303。其中:
指纹信息提取模块301用于对目标图像依次进行DCT变换计算和二值化处理,获取目标图像全局特征的多数位字符串指纹信息;分组模块302用于对指纹信息进行哈希编码,并将指纹信息中的哈希编码值按位进行分组;检索输出模块303用于将每一分组按指纹信息值与哈希编码值按key-value形式进行表示,并基于每一key值对应的value值中的多个哈希编码值,分别到预建立的不同map中进行查找,获取检索结果。
具体而言,本发明实施例的装置利用指纹信息提取模块301进行目标图像的全局特征的提取。即,由指纹信息提取模块301先对目标图像进行DCT变换计算,提取目标图像在所有频率下的特征,再根据DCT变换计算的结果,对提取的特征进行二值化处理,最终由指纹信息提取模块301得到一个固定位数的0/1字符串,这就是这张目标图像的指纹信息。
之后,分组模块302采用分组式计算的索引查找算法。具体而言,分组模块302首先对于包含目标图像的全局特性的指纹信息进行哈希编码,得到对应的哈希编码值。之后,分组模块302将上述多数位字符串形式的指纹信息中的位的哈希编码值按位进行分组,每个分组具有相同的位数。
最后,对于上述各分组,在进行哈希数据存储时,检索输出模块303以各分组指纹信息值作为key值,并以该分组对应的哈希编码值确定该分组的value值,构成key-value数据格式,其中每个key值对应的value值中包含多个哈希编码值。则在进行检索时,对于每个分组,检索输出模块303基于该分组的多个哈希编码值,在对应的多个map中查询是否存在相同的key值,并根据查询结果输出最终检索结果。
本发明实施例提供的基于图片内容的图像检索装置,通过设置相应的执行模块,对目标图像的全局特征进行提取,并基于该全局特征,采用哈希算法与分组式计算相结合进行索引查找,能够在保证准确率和召回率的同时,有效降低计算时间,提高计算效率。
可以理解的是,本发明实施例中可以通过硬件处理器(hardwareprocessor)来实现上述各实施例的装置中的各相关程序模块。并且,本发明实施例的基于图片内容的图像检索装置利用上述各程序模块,能够实现上述各方法实施例的基于图片内容的图像检索流程,在用于实现上述各方法实施例中基于图片内容的图像检索时,本发明实施例的装置产生的有益效果与对应的上述各方法实施例相同,可以参考上述各方法实施例,此处不再赘述。
作为本发明实施例的又一个方面,本实施例根据上述各实施例提供一种电子设备,参考图4,为本发明实施例提供的电子设备的实体结构示意图,包括:至少一个存储器401、至少一个处理器402、通信接口403和总线404。
其中,存储器401、处理器402和通信接口403通过总线404完成相互间的通信,通信接口403用于该电子设备与图片数据库设备之间的信息传输;存储器401中存储有可在处理器402上运行的计算机程序,处理器402执行该计算机程序时,实现如上述各实施例所述的基于图片内容的图像检索方法。
可以理解为,该电子设备中至少包含存储器401、处理器402、通信接口403和总线404,且存储器401、处理器402和通信接口403通过总线404形成相互间的通信连接,并可完成相互间的通信,如处理器402从存储器401中读取基于图片内容的图像检索方法的程序指令等。另外,通信接口403还可以实现该电子设备与图片数据库设备之间的通信连接,并可完成相互间信息传输,如通过通信接口403实现对基于图片内容的图像检索等。
电子设备运行时,处理器402调用存储器401中的程序指令,以执行上述各方法实施例所提供的方法,例如包括:对目标图像依次进行DCT变换计算和二值化处理,获取目标图像全局特征的多数位字符串指纹信息;对指纹信息进行哈希编码,并将指纹信息中的哈希编码值按位进行分组;将每一分组按指纹信息值与哈希编码值按key-value形式进行表示,并基于每一key值对应的value值中的多个哈希编码值,分别到预建立的不同map中进行查找,获取检索结果等。
上述的存储器401中的程序指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。或者,实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
本发明实施例还根据上述各实施例提供一种非暂态计算机可读存储介质,该非暂态计算机可读存储介质存储计算机指令,该计算机指令使计算机执行如上述各实施例所述的基于图片内容的图像检索方法,例如包括:对目标图像依次进行DCT变换计算和二值化处理,获取目标图像全局特征的多数位字符串指纹信息;对指纹信息进行哈希编码,并将指纹信息中的哈希编码值按位进行分组;将每一分组按指纹信息值与哈希编码值按key-value形式进行表示,并基于每一key值对应的value值中的多个哈希编码值,分别到预建立的不同map中进行查找,获取检索结果等。
本发明实施例提供的电子设备和非暂态计算机可读存储介质,通过执行上述各实施例所述的译员基因的选取方法,对目标图像的全局特征进行提取,并基于该全局特征,采用哈希算法与分组式计算相结合进行索引查找,能够在保证准确率和召回率的同时,有效降低计算时间,提高计算效率。
可以理解的是,以上所描述的装置、电子设备及存储介质的实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,既可以位于一个地方,或者也可以分布到不同网络单元上。可以根据实际需要选择其中的部分或全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上实施方式的描述,本领域的技术人员可以清楚地了解,各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如U盘、移动硬盘、ROM、RAM、磁碟或者光盘等,包括若干指令,用以使得一台计算机设备(如个人计算机,服务器,或者网络设备等)执行上述各方法实施例或者方法实施例的某些部分所述的方法。
另外,本领域内的技术人员应当理解的是,在本发明实施例的申请文件中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本发明实施例的说明书中,说明了大量具体细节。然而应当理解的是,本发明实施例的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。类似地,应当理解,为了精简本发明实施例公开并帮助理解各个发明方面中的一个或多个,在上面对本发明实施例的示例性实施例的描述中,本发明实施例的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。
然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明实施例要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明实施例的单独实施例。
最后应说明的是:以上实施例仅用以说明本发明实施例的技术方案,而非对其限制;尽管参照前述实施例对本发明实施例进行了详细的说明,本领域的技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明实施例各实施例技术方案的精神和范围。