黑马程序员技术交流社区

标题: 如何识别2张图片的相似程度,实现识图网站那样的功能? [打印本页]

作者: lvjayj    时间: 2013-8-9 10:27
标题: 如何识别2张图片的相似程度,实现识图网站那样的功能?

例如第一张图片是否在第二张中。

位置角度大小比例如何?在java中怎么判断?

能间接达到效果也可以,或者给个方向~





作者: 神之梦    时间: 2013-8-9 23:44
这个用java搞起来应该不是那么容易吧
作者: lvjayj    时间: 2013-8-10 11:25
神之梦 发表于 2013-8-9 23:44
这个用java搞起来应该不是那么容易吧

关键技术:"感知哈希算法"
它的作用是对每张图片生成一个"指纹"字符串
然后比较不同图片的指纹。结果越接近,就说明图片越相似。


第一步,缩小尺寸。将图片缩小到8x8的尺寸,总共64个像素。这一步的作用是去除图片的细节,只保留结构、明暗等基本信息,摒弃不同尺寸、比例带来的图片差异。
第二步,简化色彩。将缩小后的图片,转为64级灰度。也就是说,所有像素点总共只有64种颜色。
第三步,计算平均值。计算所有64个像素的灰度平均值。
第四步,比较像素的灰度。将每个像素的灰度,与平均值进行比较。大于或等于平均值,记为1;小于平均值,记为0。
第五步,计算哈希值。将上一步的比较结果,组合在一起,就构成了一个64位的整数,这就是这张图片的指纹。组合的次序并不重要,只要保证所有图片都采用同样次序就行了。

SimilarImage.zip

185.67 KB, 下载次数: 57

Java代码


作者: 神之梦    时间: 2013-8-10 16:54
lvjayj 发表于 2013-8-10 11:25
关键技术:"感知哈希算法"
它的作用是对每张图片生成一个"指纹"字符串
然后比较不同图片的指纹。结果越接 ...

你写的?太强大了吧




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2