1

我正在尝试使用类似于 ImageMagick-fuzz选项中所做的颜色“距离”(或“容差”或“方差”)的图像搜索:http ://www.imagemagick.org/Usage/color_basics/ #fuzz_distance

我希望得到的是来自单个初始像素的一些 RGB 值的范围或数组,我可以用它来匹配数据库中的比较点。

显然,正在发生的-fuzz是一些描述 RGB 立方体中的球体的欧几里得距离公式,但我不确定在哪里可以找到数学或如何使用 ImageMagick(或其他一些库)来实现这一点。

想法?

4

1 回答 1

3

MageMagick 论坛中所述,如果欧几里得距离低于 R ,则颜色在颜色B的模糊范围内:RA

sqrt((B.r - A.r)^2 + (B.g - A.g)^2 + (B.b - A.b)^2) < R

r,gb代表颜色各自的红色、蓝色和绿色值。

如果你没有透明度,就是这样。如果确实需要考虑透明度,则必须先将颜色乘以它们各自的 Alpha 通道值,然后才能在公式中使用它们。

在 3 维 RGB 颜色空间中,某种颜色的模糊范围内的颜色确实形成了一个(半径为R)的球体。

要再次检查数据库中的点,您只需使用公式检查它们是否在球体内。

关于颜色范围:由于一个维度的“模糊”(=在模糊范围内:-))颜色的范围取决于其他二维中的位置,因此您唯一可以生成的是围绕模糊球体的封闭立方体。这不会为您提供正确的颜色,但您可以使用它来拒绝位于立方体之外的所有颜色。这个立方体的范围是:

(A.r - R) <= B.r <= (A.r + R)
(A.g - R) <= B.g <= (A.g + R)
(A.b - R) <= B.b <= (A.b + R)

更新:

这是计算的代码参考。它看起来有点复杂,但那是因为它还必须处理 CMYK 颜色。对于 RGB,它减少到上述情况。

于 2012-11-13T12:28:47.467 回答