5

如果我有两张图片,它们都是同一只鞋子的不同款式的左侧视图,我如何确定它们的不同颜色?也许它是一款有两种款式的鞋,一种是粉色鞋带和白色鞋带,另一种是白色鞋带和黄色鞋带。我想:

图像一种颜色:C1=粉红色,C2=白色

图像两种颜色:C1=白色,C2=黄色

没有超高级算法,但我也不需要实际实现的代码。也许只是循环、数据结构、条件..

图像的实际鞋部分将在白色背景上。这些照片与您在无尽的.com 或 zappos.com 上看到的照片相似,因此它们非常相似,但需要一定的容忍度。

4

2 回答 2

3

因为听起来您只想说出它们的不同颜色(不考虑形状等),并且您希望形状高度相似(尽管不相同),所以我会:

  1. 计算每个图像的颜色直方图(R、G、B 可能需要 3 个直方图)
  2. 减去它们(z = abs(x - y)每种颜色)
  3. 识别生成的直方图中的峰值

当每个图像中一个重要区域的颜色不同时,这将在最终直方图中为您提供两个高峰。abs()(如果您需要判断哪个是哪个,请放弃。)

[编辑]正如 jilles de wit 建议的那样,最好查看 (R, G, B) 三元组而不是单个颜色的频率(即,为每个图像创建一个大小为 256*256*256 的大直方图,而不是 3 个大小为 256直方图)。但在这种情况下,直方图向量很大,可能主要用零填充,因此最好将强度从 256 量化到 16 级,从而提供更易于管理的 16*16*16 向量。

于 2010-10-27T02:29:20.620 回答
0

您应该能够在 bash 中使用类似于“diff”命令的内容来直接比较两个文件的内容。然后,您可以分析该数据,将其处理成颜色(使用十六进制图表来帮助您)并打印出不同的颜色。为了从 diff 中获得一致的结果,我建议将它放入一个文本文件中,然后处理该文本文件。类似'diff file1.jpeg file2.jpeg > Difference.txt'

这可以很容易地从 C 程序中完成。但是,这是基于 unix 的系统的解决方案,我不知道 Windows 是否有可用的操作。

于 2010-10-26T21:29:55.510 回答