【发布时间】:2011-05-09 15:36:13
【问题描述】:
我有一张预定义颜色的地图和一个给定的颜色来选择一个最接近的匹配。如果我将使用距离公式,我是否会计算与地图中每种预定义颜色的距离,而不是在匹配限制之间找到一个键?
【问题讨论】:
我有一张预定义颜色的地图和一个给定的颜色来选择一个最接近的匹配。如果我将使用距离公式,我是否会计算与地图中每种预定义颜色的距离,而不是在匹配限制之间找到一个键?
【问题讨论】:
是的,您需要遍历地图中的每种颜色并计算距离。此外,颜色是 3D,而 std::map 是 1D,如果您有很多颜色,您可能需要类似 3D kd tree 而不是 1D 地图来快速查找。虽然只是迭代几种颜色不会很昂贵。
【讨论】:
颜色比 3D 稍微复杂一些。您必须考虑亮度以及颜色可能是多红、多绿或多蓝。那么 1,0,0 比 0,1,0 更接近 255,0,0 吗?所以也许颜色需要被认为是四维的?此外,人类对颜色的反应不是线性的,所以如果你只看两个 RGB 值之间的数学距离,你会测量到一个与人类判断两种颜色之间的距离不一致的“距离”。
对于这种或工作来说,RGB 是一种非常不令人满意的颜色度量(虽然它便于控制硬件)很多人建议使用 HSL 系统,它允许您独立于“颜色”设置亮度,它是应该更接近于人类对颜色的反应。
有关在此类工作中使用 HSL 的更多信息,以及在 HSL 和 RGB 之间转换的代码,请参阅我之前的回答 Function for creating color wheels
【讨论】: