我希望在这里找到一些关于图像处理的帮助。
我不熟悉Python,虽然我熟悉PHP。虽然我听说Python在图像比较、调整大小等方面"更好"。
现在,我想创建一个程序,将图像与MySQL数据库进行比较以便找到相似的图像。如果相似性高于一定数量(百分比?),它将被标记为可能的重复。
除此之外,我还想创建一个程序(它将在重复检查之前运行),检查图像是否损坏/不完整。
我浏览了StackOverflow,但只找到了2008/2009年的答案,我认为现在可能有一种更有效或更有效的做事方式。
感谢您花时间阅读本文,如果您碰巧回复我的问题,请提前感谢。:)
编辑:我注意到eyeBuy SDK是如何"将边缘检测、颜色、强度和对比度信息组合成一个字符串"的。这是一个很好的解决方案,我的重复图像检测?
试图在不同的光线、角度和视角下找到相似的照片需要大量的算法,我认为这在你的情况下是不必要的。没有简单的方法可以做到这一点
然而,如果你有不同的图像,你调整了大小或修改了一点,那么提到的脚本Artjom Kurapov将非常有助于你。如果您的数据库也包含重复项,我会先进行MD5比较,然后再尝试其他操作。
您应该使用一个简单的数据库来计算md5
哈希,记录到数据库中并在数据库中搜索匹配项,否则对于每个文件,您必须遍历整个数据库,这将大大增加处理时间。
如果您不想处理每个文件的整个图像数据库,您还需要从脚本中创建某种序列化,以便保存记录。
如上所述,一个能够处理不同视角的算法将非常困难。这是许多(学术)研究的焦点。
作为一个简单的开始,您可以看看Python phash。
一个简单的基于DCT的算法,对噪声和规模有合理的弹性,可以做到以下几点:
- 将图像转换为灰度
- 将图像缩小到缩略图大小,例如[32x32]
- 运行二维离散余弦变换
- 保留左上[8 x 8],最重要的低频分量
- 基于组件的符号对块进行二进制化
- 结果是64位散列
这个主题的变体是
- 将图像转换为灰度
- 可选择将大小重新调整为预定义大小
- 将图像划分为固定数量的块
- 确定全局平均值
- 确定每个区块的局部平均值
- 对于散列,每个块写一个1或0,如果局部平均值大于或小于全局平均值,则挂起