一种基于感知哈希的快速图像识别系统及方法与流程

文档序号:16087750发布日期:2018-11-27 22:38阅读:690来源:国知局

本发明涉及一种基于感知哈希的快速图像识别系统及方法,属于图像识别技术领域。



背景技术:

今时代是互联网高速发展的时代,各种搜索引擎为大家的生活带来了极大的便利。搜索引擎是指根据一定的策略、运用特定的计算机程序从互联网上搜集信息,在对信息进行组织和处理后,为用户提供检索服务,将用户检索相关的信息展示给用户的系统。目前来说,文字的搜索引擎已经成为了大家生活中必不可少的东西,而图像搜索是一个新兴的搜索方法。在我们日常的网上活动中,除了文字信息之外也可以接触大量的图片信息,当我们需要查找图像时,图像搜索引擎就显得尤为重要。但是目前来说,要快速有效的识别图像,相关技术并不成熟。

目前最广泛使用的图片搜索方法是利用感知哈希算法对原始图像进行处理,生成相对应的哈希字符串,继而将原始图像的哈希字符串与搜索库中的图像的哈希字符串进行比较,最终得到相似图像,虽然此方法处理的速度快,且能在改变图像尺寸、亮度甚至颜色的情况下,都不会改变图像的哈希值,但是这样处理费时费力,消耗时间,容易出现时间较长也找不到图像的问题,这样无法满足用户的需求。



技术实现要素:

本发明要解决的技术问题是提供一种基于感知哈希的快速图像识别系统及方法,解决了单一进行感知哈希算法计算时费时费力效率不高的问题,为图像之间的相似搜索提供了新的更有效率的算法。

本发明的技术方案是:一种基于感知哈希的快速图像识别系统,包括输入模块、尺寸处理模块、色彩调整模块、DCT模块、均分模块、缩减模块、加速处理模块、感知哈希计算模块、对比模块和输出模块。

所述输入模块,用于输入最开始的初始图像。

所述尺寸处理模块,用于处理不同尺寸、比例带来的图片差异。用缩小尺寸的方法最快速的去除高频和细节,只保留结构明暗。

所述色彩调整模块,用于将缩小后的图片,转为64级灰度。

所述DCT模块,用于把图片分解频率聚集和梯状形,虽然JPEG使用8*8的DCT变换,在这里使用32*32的DCT变换。之后只要保留左上角的8*8的矩阵,这部分呈现了图片中的最低频率。虽然DCT的结果是32*32大小的矩阵,但只要保留左上角的8*8的矩阵,这部分呈现了图片中的最低频率。

所述均分模块,即计算所有64个值的平均值。

所述缩减模块,用于根据8*8的DCT矩阵,设置0或1的64位的hash值,大于等于 DCT均值的设为”1”,小于DCT均值的设为“0”。结果并不能表示出真实性的低频率,只能粗略地计算出相对于平均值频率的相对比例。只要图片的整体结构保持不变,hash结果值就不变。能够避免伽马校正或颜色直方图被调整带来的影响。

所述加速处理模块,用于使用KMEANS算法处理所有值之间的汉明矩以加速计算结果。

所述感知哈希计算模块,用于将64bit设置成64位的长整型,组合的次序并不重要,只要保证所有图片都采用同样次序就行了。将32*32的DCT转换成32*32的图像。将上一步的比较结果,组合在一起,就构成了一个64位的整数,这就是这张图片的指纹。组合的次序并不重要,只要保证所有图片都采用同样次序就行了。

所述对比模块,用于将得到的指纹与库中图片进行对比,以得到最后相似图像。

所述输出模块,用于输出结果。

所述快速计算模块的计算包括随机取点,距离计算,确定中心三步,具体为:

输入:指纹S=x1,x2,....xm;

选择所有得到的k个指纹的类别中心μ1,μ2,...,μk,k<m;

对每个样本Xi,找到与其最近的那个聚类中心后将其标记为距离类别中心最近的类别,即:

经过上面一步,有些聚类(聚类集合也称为簇)中的元素就更新了,于是就需要调整聚类中心,所以将每个类别中心更新为隶属该类别的所有指纹的均值:

重复最后两步,直到类别中心的变化小于阈值;

之后再根据已有指纹进行汉明矩计算。

一种基于感知哈希的快速图像识别系统:

步骤S1:输入最开始的图像;

步骤S2:尺寸处理:去除高频和细节,只保留结构的明暗,再进行色彩调整,将调整尺寸后的图片转换成64级灰度;

步骤S3:DCT处理:把图片分解频率聚集和梯状形,只要保留左上角的8*8的矩阵,因为这部分呈现了图片中的最低频率。然后计算平均值。

步骤S4:hash值计算:设置哈希值,大于等于DCT均值的设为“1”,小于DCT均值的设为“0”;

步骤S5:加速处理:使用KMEANS算法处理所有值之间的汉明矩以加速计算结果;

步骤S6:感知哈希计算模块,组合所有结果,组成一个64位整数;

步骤S7:分别将所述初始图像的指纹与搜索库中图像的字符串进行对比;

步骤S8:输出搜索结果。

步骤S5中加速计算具体为:

记K个簇中心为μ1,μ2,...,μk每个簇的样本数目为N1,N2...,Nk;

使用平方误差作为目标函数:

目的是对该目标函数取最小,哪一个聚类中心,或者说哪一个簇能使该目标函数取最小,就认为哪个是最好的。

于是对μ求偏导:

表示:

(1)聚类中心即在该聚类中的所有样本的和求均值。

(2)样本距离聚类中心阿是服从高斯分布的。

(3)K-means最终的结果一定是像个圆形的。

本发明的有益效果是:不仅将所述初始图像用感知哈希算法处理后与搜索库的图像进行比较,而且将所述初始图像的感知哈希算法进行了优化处理,将感知哈希算法(pHash)与 KMEANS算法相结合,为搜索相似图像提供了一种新的思路。

附图说明

图1是本发明系统的结构图;

图2是本发明加速处理模块的框图;

图3是本发明方法的步骤流程图。

具体实施方式

下面结合附图和具体实施方式,对本发明作进一步说明。

实施例1:如图1所示,一种基于感知哈希的快速图像识别系统,包括模块框图,包括输入模块、尺寸处理模块、色彩调整模块、DCT模块、均分模块、缩减模块、加速处理模块、感知哈希计算模块、对比模块和输出模块。

所述输入模块,用于输入最开始的初始图像。所述尺寸处理模块,用于处理不同尺寸、比例带来的图片差异。用缩小尺寸的方法最快速的去除高频和细节,只保留结构明暗。所述色彩调整模块,用于将缩小后的图片,转为64级灰度。所述DCT模块,用于把图片分解频率聚集和梯状形,虽然JPEG使用8*8的DCT变换,在这里使用32*32的DCT变换。之后只要保留左上角的8*8的矩阵,这部分呈现了图片中的最低频率。虽然DCT的结果是32*32 大小的矩阵,但只要保留左上角的8*8的矩阵,这部分呈现了图片中的最低频率。所述均分模块,即计算所有64个值的平均值。所述缩减模块,用于根据8*8的DCT矩阵,设置0或 1的64位的hash值,大于等于DCT均值的设为”1”,小于DCT均值的设为“0”。结果并不能表示出真实性的低频率,只能粗略地计算出相对于平均值频率的相对比例。只要图片的整体结构保持不变,hash结果值就不变。能够避免伽马校正或颜色直方图被调整带来的影响。所述加速处理模块,用于使用KMEANS算法处理所有值之间的汉明矩以加速计算结果。所述感知哈希计算模块,用于将64bit设置成64位的长整型,组合的次序并不重要,只要保证所有图片都采用同样次序就行了。将32*32的DCT转换成32*32的图像。将上一步的比较结果,组合在一起,就构成了一个64位的整数,这就是这张图片的指纹。组合的次序并不重要,只要保证所有图片都采用同样次序就行了。所述对比模块,用于将得到的指纹与库中图片进行对比,以得到最后相似图像。所述输出模块,用于输出结果。

如图2所示,为本发明加速处理模块的框图,包括输入指纹,选取k个指纹的类别中心,将每个样本根据最近的中心点分类,调整聚类中心,计算均值,判断均值是否超过阈值,汉明矩计算几个部分。

图2这一部分的运算由以下内容得出:

这种基于感知哈希的快速图像识别方法,所述快速计算模块包括随机取点,距离计算,确定中心三部分

输入:指纹S=x1,x2,....xm

选择所有得到的k个指纹的类别中心μ1,μ2,...,μk,k<m

对每个样本Xi,找到与其最近的那个聚类中心后将其标记为距离类别中心最近的类别,即:

经过上面一步,有些聚类(聚类集合也称为簇)中的元素就更新了,于是就需要调整聚类中心,所以将每个类别中心更新为隶属该类别的所有指纹的均值:

重复最后两步,直到类别中心的变化小于某阈值。

之后再根据已有指纹进行汉明矩计算

记K个聚类中心为μ1,μ2,...,μk每个簇的样本数目为N1,N2...,Nk

使用平方误差作为目标函数:

目的是对该目标函数取最小,哪一个聚类中心,或者说哪一个簇能使该目标函数取最小,就认为哪个是最好的。

于是对μ求偏导:

这是在说:

(1)聚类中心即在该聚类中的所有样本的和求均值。

(2)样本距离聚类中心阿是服从高斯分布的。

(3)K-means最终的结果一定是像个圆形的。

图3为本发明方法具体步骤的框图,内容如下:

步骤S1:输入最开始的图像

步骤S2:尺寸处理,去除高频和细节,只保留结构的明暗。接着进行色彩调整,将调整尺寸后的图片转换成64级灰度

步骤S3:DCT处理,把图片分解频率聚集和梯状形,只要保留左上角的8*8的矩阵,因为这部分呈现了图片中的最低频率。然后计算平均值。

步骤S4:hash值计算,设置哈希值,大于等于DCT均值的设为”1”,小于DCT均值的设为“0”。结果并不能告诉我们真实性的低频率,只能粗略地告诉我们相对于平均值频率的相对比例。只要图片的整体结构保持不变,hash结果值就不变。能够避免伽马校正或颜色直方图被调整带来的影响。

步骤S5:加速处理,使用KMEANS算法处理所有值之间的汉明矩以加速计算结果。这部分详情见图2。

步骤S6:将64bit设置成64位的长整型,组合的次序并不重要,只要保证所有图片都采用同样次序就行了。将32*32的DCT转换成32*32的图像。

步骤S7:将上一步的比较结果,组合在一起,就构成了一个64位的整数,这就是这张图片的指纹。组合的次序并不重要,只要保证所有图片都采用同样次序就行了(例如,自左到右、自顶向下)。分别将所述初始图像的指纹与搜索库中图像的字符串进行对比

步骤S8:输出搜索结果。

以上结合附图对本发明的具体实施方式作了详细说明,但是本发明并不限于上述实施方式,在本领域普通技术人员所具备的知识范围内,还可以在不脱离本发明宗旨的前提下作出各种变化。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1