【问题标题】:C# - Image comparison (fast one)C# - 图像比较(快速一)
【发布时间】:2011-01-10 14:27:08
【问题描述】:

目前我有一个包含超过 100.000 张图像的数据库,它们的大小不一样或类似,但我想为我的公司做以下内容:

我插入/上传一张图片,系统返回最有可能相同的图片。我不知道要使用什么算法,但它需要很快。我可以预处理所有其他图像并将一些信息放入我用于比较的数据库中。

现在我想知道比较图像的最快方法是什么(很有可能是相同的图像)。以及我应该将哪些数据保存到数据库中(如果我掌握了算法,我可能会自己弄清楚这一点)。

将上传的图片与数据库中的所有图片进行比较应该不会超过 5 分钟。

提前致谢!

朱利安

看看www.tineye.com,他们有某种我正在寻找的算法。猜测他们使用的是一个非常复杂的,我只需要一个做同样事情但成功率较低的。

【问题讨论】:

  • 您可以在stackoverflow.com/questions/1261687找到一些有用的信息
  • 感谢您的评论 hangy,我在 stackoverflow 上找到了其他一些帖子。但他们中的大多数没有任何代码/代码链接,而是链接到数学文章。我想知道那里是否有某种图书馆。
  • 你打算做什么?如果您想找到发布的非常相似的图像,请使用 hangy 提供的问题中的信息。如果您想检测完全相同的文件的发布,只需对发布的文件进行哈希处理,并将其与之前发布的文件的哈希值进行比较。找到重复项将是闪电般的速度。
  • “图像配准”是尝试将两个图像相互匹配的过程。搜索该词可能会对您有所帮助,例如:stackoverflow.com/questions/3344138/…
  • 图像配准更适合填写的表格,只要我有红色的文章。但我会进一步寻找这个词。感谢您的时间!

标签: c# image comparison


【解决方案1】:

我的做法是从您要比较的每张图像中生成一个非常小的(例如原始图像大小的 1/50)图像,并将缩略图图像路径与原始图像一起存储数据库中的大小。为了速度和无损失,我会将缩略图保留为未压缩的 bmp(我只是编造了这个词!),因为它们太小了。

要将您的新图像与其他图像进行比较,请将其缩小相同的量,然后将其与其他图像逐个像素进行比较,并设置一定的阈值(例如,与原始图像相差 10%)。

如果它通过了这个测试,你可以逐个像素地与原始图像进行比较。

编辑:我只想提一下,我以前也采用概率方法。它工作正常,但是为图像构建元数据需要很长时间,并且有很多误报。本能地,我认为计算图像的每个网格矩形的局部平均值(这就是缩小图像所做的)会产生类似的,如果不是更好的结果。

【讨论】:

  • 缩小图像的想法很好,谢谢。问题是我数据库中的图片来自互联网。因此,就像您可能猜到的那样,会有 100 张相同事物的照片,但颜色/尺寸(截断部分)等看起来不同。我想对部分图像进行一些比较。这里有一些关于“关键点识别”的信息:cvlab.epfl.ch/publications/publications/2006/LepetitF06.pdf 但我找不到任何代码。自己做这件事还有很长的路要走。
  • 如果你需要真正的模式识别,我的方法是不够的。您需要为此构建一个真正的模式识别引擎。从 OpenCV 开始并建立起来!
【解决方案2】:

比较的最佳方法是将图像转换为灰度格式并比较灰度的强度。它是实时系统中使用的最快方式。

此外,如果您想获得更高的质量并使用彩色图像 - 使用 CIE 1994 或 CIE 2000 作为色差公式

【讨论】:

    猜你喜欢
    • 2010-10-25
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-07
    • 2011-05-10
    相关资源
    最近更新 更多