你们知道有哪些算法可以用来计算图像之间的差异吗?
以此网页为例http://tineye.com/您可以给它一个链接或上传图片,它会找到类似的图像。我怀疑它是否将所讨论的图像与所有图像进行比较(或者可能是这样)。
通过计算,我的意思是Levenshtein_distance或Hamming distance对于字符串而言。
我不需要为项目或任何事情找到正确的答案,我刚刚找到了网站并且非常好奇。我知道digg为他们的网站支付类似的服务。
答案 0 :(得分:24)
最简单的措施将是基于RMS错误的方法,例如:
这些可能与你的距离测量概念有关,但是如果你已经有两个非常接近的图像,它们的结果真的只有意义,就像你正在研究特定压缩方案保存原始图像的效果一样。此外,两种比较中的相同结果可能意味着很多不同的东西,具体取决于具体的工件类型(请参阅下面引用的文章,以下RMS / PSNR的示例照片可能会产生误导)。
除此之外,还有一整套专注于图像相似性的研究领域。我不是专家,但这里有几点建议:
使用dimensionality reduction(PCA,SVD,特征值分析等)选择图像的主要成分并在不同图像之间进行比较,已经进行了大量工作。
其他方法(特别是医学影像)使用segmentation技术挑选出图像的重要部分,然后根据发现的内容比较图像
还有一些人试图设计相似性度量来解决RMS错误和PSNR的一些缺陷。在spatial domain structural similarity (SSIM)测量中有一篇非常酷的论文,试图模仿人们对图像错误的看法,而不是直接的,错误的数学概念。同一个人使用wavelet analysis中的this paper on WSSIM改进了翻译/旋转不变版本。
看起来TinEye使用具有 lot 属性值的特征向量来进行比较。如果你在他们的网站上搜索,你最终会进入Ideé Labs页面,而their FAQ在算法上有一些(但不是太多)细节:
问:视觉搜索如何运作?
答:Idée的视觉搜索技术使用复杂的算法来分析数百种图像属性,如颜色,形状,纹理,亮度,复杂性,对象和区域。这些属性形成一个紧凑的数字签名,描述了每个图像,这些签名由我们的软件计算和索引。在执行可视化搜索时,我们的搜索引擎会快速比较这些签名,以返回视觉上类似的结果。
这绝不是详尽无遗的(这只是我在自己的研究过程中遇到的一些技巧),但是如果你谷歌搜索技术论文或者查看最近关于图像处理的会议,那你就是必定要为这些东西找到更多方法。这不是一个解决的问题,但希望这些指针能让你了解所涉及的内容。
答案 1 :(得分:6)
一种技巧是使用color histograms。您可以使用机器学习算法根据您使用的重复发现查找类似的图像。例如,常用的k-means algorithm。我已经看到其他解决方案试图在使用edge detection后分析图像中的垂直和水平线。 Texture analysis也被使用。
来自picasa网站的最新paper群集图片。您也可以尝试我正在处理的clustering algorithm。
答案 2 :(得分:4)
考虑使用有损wavelet compression并比较图像的最高相关性元素。
答案 3 :(得分:1)
TinEye所做的是对图像或部分图像进行散列(参见他们的FAQ)。它可能不是真正的哈希函数,因为它们想要类似(或几乎相同)图像的类似“哈希”。但是他们需要做的就是比较那个哈希值和它的子串,知道图像是相似/相同还是一个包含在另一个中。
答案 4 :(得分:1)
这是一个image similarity页面,但它是多边形的页面。您可以根据颜色和形状将图像转换为有限数量的多边形,并在每个多边形上运行这些算法。
答案 5 :(得分:1)
这里是我写的一些代码,4年前在java yikes 中使用直方图进行图像比较。除了buildHistograms()
之外,不要看它的任何部分https://jpicsort.dev.java.net/source/browse/jpicsort/ImageComparator.java?rev=1.7&视图=标记
也许它很有用,至少如果你使用的是java
答案 6 :(得分:0)
相关技术会让匹配跳出来。如果它们是JPEG,您可以比较每个8x8块的主导系数并得到一个合适的匹配。这不是完全相关,而是基于余弦变换,因此它是第一个堂兄。