我建议考虑不仅使用RGB直方图。
如果您对图像进行2D Haar小波变换(这比听起来容易得多,只需要大量平均和一些平方根用于加权系数),并仅保留小波中k个最大的加权系数作为稀疏向量,将其归一化并保存以减小其大小,那么您可以获得更好的图像摘要。您应该先使用感知权重重新缩放R、G和B,或者我建议切换到YIQ(或YCoCg,以避免量化噪声),以便可以使用降低重要性的色度信息进行采样。
现在,您可以使用两个这些稀疏归一化向量的点积作为相似性度量。点积最大的图像对在结构上非常相似。这具有稍微抵抗调整大小、色调移位和水印的好处,并且实现简单而紧凑。
您可以通过增加或减少k来权衡存储和准确性。
对于这种分类问题,按单个数字分数排序是不可行的。如果您考虑一下,它要求图像只能沿一个轴“改变”,但它们不会。这就是为什么您需要一个特征向量的原因。在Haar小波情况下,它大约是图像中最尖锐不连续性的位置。您可以计算成对图像之间的距离,但由于您只有一个距离度量,线性排序无法表达三个距离相等的图像的“三角形”(即想象一下一个全绿色的图像,一个全红色的图像和一个全蓝色的图像)。
这意味着,任何解决您问题的真正方案都需要 O(n^2) 的操作次数,其中 n 是您拥有的图像数量。如果可以将度量线性化,那么您只需要 O(n log n) 或者如果度量适合于基数排序,则需要 O(n)。话虽如此,您不需要花费 O(n^2),因为在实践中,您不需要筛选整个集合,您只需要找到比某个阈值更接近的内容即可。因此,通过应用几种技术来分割您稀疏向量空间,您可以获得比朴素地将每个图像与每个图像进行比较更快的渐近速度,从而为您提供您可能需要的东西... 如果不是您精确要求的。
无论如何,我几年前个人使用过这个方法,以有效地尝试最小化我存储的不同纹理数量,但在这个领域也有很多研究噪音,显示了它的功效(并在这种情况下将其与更复杂的直方图分类形式进行比较):
http://www.cs.princeton.edu/cass/papers/spam_ceas07.pdf
如果您需要更准确的检测,可以使用minHash和tf-idf算法与Haar小波(或直方图)一起使用来更加稳健地处理编辑:
http://cmp.felk.cvut.cz/~chum/papers/chum_bmvc08.pdf
最后,斯坦福大学拥有一种基于更多特征提取的小波变换的图像搜索方法,以查找旋转或缩放的图像部分等,但这可能远远超出您想要做的工作量。
http://wang14.ist.psu.edu/cgi-bin/zwang/regionsearch_show.cgi