-->

类似图片 - 如何对它们进行比较(Similar images - how to compare t

2019-06-26 15:53发布

我有超过1.3milion的图像,我有相互比较,并添加每天几百。

我公司拍摄图像,并创建可以通过我们的供应商可以利用一个版本。

该文件通常非常相似对方,例如两个不同的公司可以给我们两个不同的图像,JPG和GIF格式,既与麦当劳标志,提交文件之间的月。

正在发生的事情是,在最后我们发现自己创建相同的标志两种不同的时候,我们可以简单地复制/粘贴已经创建了一个或至少表明,它作为一个可能的起点艺术家。

我环顾四周的算法来创建一个指纹或东西,让我做一个简单的查询时,一个新的图像上传,时间相对不是一个问题,如果它需要1秒,以创建指纹将采取150天到创建指纹,但它会在节省了大量的,我们甚至可能会得到3个或4个服务器来做到这一点。

我精通PHP,但如果算法是伪代码,甚至可以CI阅读并试着翻译(除非它使用了一些特定于C库)

目前,我做的所有图像的MD5赶上那是完全一样的那些,这问题就来了,当我正想着做图像的大小调整和运行调整后的图像上的MD5接住一直是那些保存在不同的格式和大小,但我仍然没有足够好的认可。

如果我没有提到它,我会很高兴的东西,只是建议可能的“类似”的图像。

编辑

请记住,检查需要做的每分钟多次,所以最好的解决方案是,让我每说我可以存储和将来使用与我不必看图像比较像某些值重新扫描整个服务器。

我读一些网页提及直方图,或图像调整到一个非常小的尺寸,剥离可能的标签,然后将其转换成灰度,做的那个文件,并用它进行比较的哈希值。 如果我是成功的,我会张贴代码/答案在这里

Answer 1:

尝试使用的file_get_contents和: http://www.php.net/manual/en/function.hash-file.php

如果哈希匹配,那么你就知道他们是完全一样的。

编辑:如果可能的话我会觉得存储图像哈希,并在数据库表中的图像路径可以帮助你限制服务器的负载。 这是很容易在你的初始图像运行一次哈希算法和散列存储在表......然后,当新的图像被提交,你可以散列图像,然后做数据库表的查询。 如果散列已经存在丢弃它。 您可以使用哈希值作为表索引,因此,一旦你发现你不匹配需要检查的休息。

另一种选择是不使用数据库......但是你必须永远做一个查找。 这是检查散列传入的图像,然后在内存中运行对所有保存的图像的时间搜索。

编辑#2:请查看这里的解决方案: 图像比较-快速算法



Answer 2:

类似的问题你已经存在,检查它是否适合你: 比较PHP 2个图像



Answer 3:

有一个PHP ImageMagick的扩展 ,你可以使用。



Answer 4:

提速的过程中,那种所有尺寸的文件和内部比较,仅如果两个大小相等。 为了比较的内部数据,使用哈希比较也是最快的方法。 希望这可以帮助。



文章来源: Similar images - how to compare them