【问题标题】:How can I compare colors to a known set?如何将颜色与已知集合进行比较?
【发布时间】:2016-10-14 09:44:15
【问题描述】:

给定一个台球的图像,我想知道它是什么球。球的颜色是众所周知的,并且通常不会偏离一些已知的例外情况。但是识别特定球的最佳方法是什么?

我的方法是,给定一张我们知道的图片只包含一个台球(无背景等),我的方法是将每个像素映射到我们期望的台球的已知颜色。理想情况下,这个映射只有白色(所有球都有一些白色)、黑色(更少的黑色,用于书写,除了 8 个球),以及决定其数量的球的颜色。所以对于 2 球,我预计可能有 90% 的红色、7% 的白色和 3% 的黑色,给予或接受。该方法取得了一定的成功。

问题是如何正确地将像素的颜色映射到已知颜色之一。仅色调对大多数人来说效果很好,但对于某些人(粉红色 4 + 红色 3),色调可以相同,但饱和度不同。

我觉得我可以为此制定自己的一套规则,并对其进行一段时间的调整,但我想看看是否有更好的选择。我尝试了 CIE76 的实现,但结果令人失望。我不想扮演我自己的已知算法实现的角色,但如果有一个对程序员友好的良好解释,我可以这样做。

建议、想法或资源?

【问题讨论】:

  • 看看一些好的视觉库可能是个好主意。
  • 我已经尝试过一点 opencv,但它很难使用,尤其是在 .net 中
  • 请参阅here 了解有关颜色距离的一些想法
  • 实际上都试过了——在问这里之前我已经做了很多谷歌搜索
  • 我会从这个开始:RGB value base color name 并使用最准确地转换示例图像的方法/色彩空间......使用球和桌子的颜色作为基色表。

标签: c# image-processing computer-vision


【解决方案1】:

每 cmets:DeltaE(CIE76 和变体)在更大的样本量下效果更好。我最初的想法是,我会找到球的“真实”颜色,并尝试使用它,而不是有大量在光照下会发生变化的样本,但这被证明是无效的,尽管也许如果可以考虑光照本身,它有可能。

最后,我确实找到了一个名为 Colourful 的 c# 库,它可以在 nuget 上找到,它非常易于使用并且看起来写得很好。 RGB -> Lab 变换很昂贵,因此请尽可能进行预处理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    • 2017-07-09
    相关资源
    最近更新 更多