2014-04-07 64 views
2

我正在考虑编写一个可以比较图像的应用程序:即检查一个图像是否存在于另一个图像中。比较图像的算法

让我们来想象一个人,树和其他东西的图​​片。让我们想象一棵树的另一张照片。是否有可能检查第二张图片是否与第一张图片中的树有相似之处?

我试图读取字节并比较它们,但它没有奏效。

做这种事情的最佳方法是什么?我应该使用什么算法?什么是最好的(更快)的语言来做到这一点?

在此先感谢。

+0

通常有很多方法可以做到这一点,具体方法是最好的方法,也可能是唯一可行的方法,具体取决于细节。第二幅图像中的树或其他物体是否与第一幅图的尺寸完全相同?也许更小但是相同?或者你在寻找大致相似的形状,而不是细节的细节?两张照片上的照片都会被照亮吗?如果没有,这是否重要?如果第一个图像中找到第二个图像中的对象,但第二个图像中的背景或其他对象不存在于第一个图像中,它会计数吗? – DarenW

+0

对象可能大小不同。在第一张照片里,你可以有一个类型为“a”的树。当我拍下这张照片时,我会将它发送到我的应用程序,以检查该树的名称。想象一下,我有很多jpeg的树木文件,我想确定哪些文件与我发送的图片有最接近的树。解决这个问题的最佳方法是什么? – placplacboom

回答

0

SURFSIFT是两种很好的算法,可以在您选择的语言的库中广泛使用。

以自己喜欢的语言自己实现它们也很有启发性,以便熟悉这个主题。

1

您需要类似于在字符串中搜索子串的快速算法的算法,但是开发用于在二维空间中搜索。

例如,这里是很好的解决方案:

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.45.581&rep=rep1&type=pdf

及其复杂性是在最坏的情况下,其中n是大矩阵的维数为O(n 2 )。

+0

这是用于字符串模式的,对吗?我没有弄清楚如何搜索图像文件。 – placplacboom

+0

@DavidL。 “字符串”和“字母”只是抽象。在你的图像中,每个像素都有其给定范围内的值,所以它可以表示为“字符”,整个图像可以表示为“字符的二维矩阵”。 –

+0

明白了,但如果图像可以变小,变暗,我可以使用它吗? – placplacboom