编程语言
首页 > 编程语言> > PHP – 类似图像 – 如何比较它们

PHP – 类似图像 – 如何比较它们

作者:互联网

我有超过1.3milion的图像,我必须相互比较,每天增加几百个.

我的公司拍摄一张图片并创建一个可供我们供应商使用的版本.

这些文件通常彼此非常相似,例如,两个不同的公司可以向我们发送两个不同的图像,JPG和GIF,两者都带有麦当劳标识,提交之间有几个月.

发生的事情是,当我们可以简单地复制/粘贴已经创建的徽标或至少将其作为艺术家的可能起点时,我们发现自己创建了两个不同时间的相同徽标.

我一直在寻找创建指纹的算法,或者在上传新图像时允许我进行简单查询的事情,时间相对不是问题,如果需要1秒钟来创建指纹,则需要150天才能完成创建指纹,但它将节省很多,我们甚至可以得到3或4台服务器.

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

目前我正在做所有图像的MD5以捕捉完全相同的图像,当我想要调整图像的大小并在调整大小的图像上运行md5以捕获已经存在的图像时出现了这个问题.以不同的格式保存并调整大小,但后来我仍然没有足够的认可.

如果我没有提及它,我会很高兴能够提出可能的“类似”图像.

编辑

请记住,检查需要每分钟多次完成,因此最好的解决方案是为每个图像提供一些值,我可以存储和使用这些值以便与我正在查看的图像进行比较而不必重新扫描整个服务器.

我正在阅读一些提到直方图的页面,或者将图像调整为非常小的尺寸,剥离可能的标签,然后将其转换为灰度,执行该文件的哈希并将其用于比较.如果我成功了,我会在这里发布代码/答案

解决方法:

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

如果哈希匹配,那么你知道它们是完全相同的.

编辑:
如果可能,我会认为存储图像哈希值,数据库表中的图像路径可能会帮助您限制服务器负载.在初始图像上运行哈希算法一次并将哈希值存储在表中要容易得多……然后,当提交新图像时,您可以对图像进行哈希处理,然后在数据库表上进行查找.如果哈希已经丢弃它.您可以使用散列作为表索引,因此一旦找到匹配项,您就不需要检查其余的.

另一个选择是不使用数据库……但是你必须总是进行n查找.这是对传入图像进行检查哈希,然后在内存中运行n次搜索所有已保存图像.

编辑#2:
请在此处查看解决方案:Image comparison – fast algorithm

标签:php,image,image-processing,similarity,fingerprint
来源: https://codeday.me/bug/20190626/1289283.html