C# - 图像比较(快速一个)

时间:2011-01-10 14:27:09

标签: c# image comparison

目前我有一个超过100,000张图片的数据库,它们的大小不一样或者类似的东西但是我想为我的公司制作以下内容:

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

现在我想知道比较图像的最快方法是什么(很有可能是相同的图像)。我应该将哪些数据保存到数据库中(如果我得到算法,我可能会自己想出这个数据)。

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

提前致谢!

儒略

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

2 个答案:

答案 0 :(得分:2)

我这样做的方法是从你要比较的每个图像中生成一个非常小的(比如原始图像尺寸的1/50)图像,并将缩略图图像路径与原始图像一起存储数据库中的大小。我会将缩略图保持为未压缩的bmp速度和无损耗(我刚刚说完这个词!),因为它们无论如何都很小。

要将新图像与其他图像进行比较,请将其缩小相同的量,并将其与其他像素逐个像素地进行比较,并具有一定的阈值(例如与原始图像的差异为10%)。

如果通过此测试,您可以与原始图像进行逐像素比较。

编辑:我只是想提一下,我之前也采用了概率方式。它工作正常,但为图像构建元数据需要永远,并且有很多误报。本能地,我认为计算图像的每个网格矩形的局部平均值(这是缩小图像的位置)会产生类似的,甚至更好的结果。

答案 1 :(得分:1)

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

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