我建议考虑不再使用 RGB 直方图。
如果您采用图像的 2d Haar 小波(它比听起来容易得多,它只是大量平均和一些用于加权系数的平方根)并且只保留 k 最大的,则可以获得更好的图像摘要将小波中的加权系数作为稀疏向量,对其进行归一化并保存以减小其大小。您应该至少预先使用感知权重重新缩放 RG 和 B,或者我建议切换到 YIQ(或 YCoCg,以避免量化噪声),以便您可以降低重要性对色度信息进行采样。
您现在可以使用其中两个稀疏归一化向量的点积作为相似度的度量。具有最大点积的图像对在结构上将非常相似。这样做的好处是对调整大小、色调偏移和水印有轻微的抵抗力,并且非常容易实现和紧凑。
您可以通过增加或减少 k 来权衡存储和准确性。
对于此类分类问题,按单个数字分数排序将是棘手的。如果您考虑一下,它将要求图像只能沿一个轴“更改”,但事实并非如此。这就是为什么你需要一个特征向量。在 Haar 小波情况下,它大约是图像中出现最尖锐不连续的地方。您可以成对计算图像之间的距离,但由于您所拥有的只是距离度量,因此线性排序无法表示距离相同的 3 个图像的“三角形”。(即想象一个全是绿色的图像,一个全是红色的图像和一个全是蓝色的图像。)
这意味着任何真正解决您的问题的方法都需要对您拥有的图像数量进行 O(n^2) 操作。而如果可以对度量进行线性化,则可能只需要 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