我想设计一个程序,可以帮助我评估5种预定义的颜色,其中一种颜色更接近可变颜色,以及百分比.问题是我不知道如何逐步手动完成.所以想到一个程序就更难了.
更多细节:颜色来自具有不同颜色的凝胶管的照片.我有5个不同颜色的管子,每个都代表5个级别中的1个.我想拍摄其他样品的照片,并在计算机上通过比较颜色来评估样品属于哪个级别,我想知道这也是近似的百分比.我想要一个类似这样的程序:http://www.colortools.net/color_matcher.html
如果你能告诉我采取什么步骤,即使它们是让我思考和手动做的事情.这将非常有帮助.
这是我多次伪解的东西,从来没有找到解决方案.
问题是想出一种生成N颜色的方法,尽可能区分N参数.
如何计算RGBA色彩空间中两种颜色之间的相似度?(当然背景颜色未知)
我需要通过为图像中的每个像素找到最佳调色板条目,将RGBA图像重新映射到RGBA颜色的调色板.
在RGB颜色空间中,可以假设最相似的颜色是具有最小欧氏距离的颜色.然而,这种方法不RGBA,例如工作,从欧氏距离rgba(0,0,0,0),以rgba(0,0,0,50%)比较小rgba(100%,100%,100%,1%),但后者看起来要好得多.
我正在使用预乘的RGBA色彩空间:
r = r×a
g = g×a
b = b×a
Run Code Online (Sandbox Code Playgroud)
我尝试过这个公式(编辑: 请参阅下面的答案以获得更好的公式):
?r² + ?g² + ?b² + 3 × ?a²
Run Code Online (Sandbox Code Playgroud)
但它看起来不是最佳的 - 在具有半透明渐变的图像中,它会找到错误的颜色,导致不连续/锐边.不透明颜色和alpha之间的线性比例看似腥.
什么是最佳配方?
*)为了简化这个问题,我忽略了误差扩散,伽玛和心理视觉色彩空间.
略有关联:如果你想在这个非Euclidean RGBA空间中找到最接近的颜色,vp-tree是最好的.
我们正在构建一个体育应用程序,并希望将团队颜色合并到应用程序的各个部分.
现在每个团队都可以用几种不同的颜色来表示.
我想做的是执行检查以验证两个团队颜色是否在彼此的特定范围内,以便我不显示两个相似的颜色.
所以,如果团队1的主要团队颜色的值为rgb(255,0,0)(或#FF0000),团队2的主要颜色相似,比如rgb(250,0,0),那么我们会选择不同的颜色其中一支球队的颜色.
如果可能的话,我可以采取什么方法来执行检查?
谢谢
我正在寻找一种能够准确地将两种颜色之间的距离表示为数字或类似物的功能.
例如,我希望有一个HEX值或RGB数组的数组,我想在给定颜色的数组中找到最相似的颜色
例如.我传递一个RGB值的函数,并返回数组中"最接近"的颜色
我有一个MySQL表,其中有数千个数据点存储在3列R,G,B中.如何使用欧几里德距离找到哪个数据点最接近给定点(a,b,c)?
我在表格中单独保存RGB颜色值,因此每列中的值限制为0-255.我想要做的是通过找到欧氏距离最小的颜色找到最接近的颜色匹配.
我显然可以通过表格中的每个点来计算距离,但这不足以扩展.有任何想法吗?
我正在一个网站上,用户可以使用(在许多其他方面)rgb 0-255范围内的任何颜色来描述物理对象.我们提供一些简化的调色板,方便点击,但需要全色轮.
在幕后,其中一个过程比较对象的两个用户描述并对它们进行相似性评分.
我想要做的是得到两种颜色在人类感知方面有多相似的分数.基本上,算法需要确定挑选2种不同颜色的2个人是否可以描述同一个对象.因此,浅红色 - >红色应该是100%,大多数灰色阴影将是100%彼此等,但红色 - >绿色绝对不是匹配.
为了更好地了解算法是如何工作的,我将每个色调的灰度和3个强度与集合中的每个其他颜色进行了对比,并且表示没有匹配(0%)与黑色,视觉上相同(100%)与白色和灰度表示中间值.
我的第一个(非常简单的方法)是简单地将RGB值视为颜色立方体中的坐标,并计算它们之间的距离(矢量的大小).
这引出了一些关于黑色 - > 50%灰色比(例如)黑色 - > 50%蓝色更大的问题.经过数百次比较并要求反馈,这似乎与人类感知不相符(如下所示)

方法2将RGB值转换为HSV.然后,我在色调上产生了80%的分数,其余的20%在Sat/Lum上.这似乎是迄今为止最好的方法,但仍然会引发一些奇怪的比赛

方法3是混合的尝试 - HSL计算值但最终得分基于HSL彩色圆柱体空间中的2种颜色之间的距离(如在3D极坐标中).

我觉得我必须重新发明轮子 - 这肯定以前做过了吗?我在Google上找不到任何体面的例子,因为你可以看到我的方法还有待改进.
所以,我的问题是:
有没有标准的方法来做到这一点?如果是这样,怎么样?如果没有,有人可以建议一种方法来改善我的方法吗?如果需要,我可以提供代码片段但是由于3天的调整而被警告它目前很麻烦.
解决方案(Delta E 2000):
使用下面提供的建议,我实现了一个Delta E 2000比较器.我不得不将加权值调整得相当大 - 我不是在寻找不知不觉但却没有太大差异的颜色.如果有人感兴趣,产生的情节如下......

我正在寻找一种算法/方法,使用Python,PHP,将给定的HEX(例如#111111 R:0x11,G:0x11,B:0x11)转换为最接近的X11色号(终端是88或256色)或VIM脚本,我想知道这里有人知道一种方式或指向我这样做的方向.
提前致谢.
我们有一个数据库表,我们管理一系列颜色.在此表中,我们为颜色保存以下属性:
每个值都在一个单独的字段中.我们现在想要实现的是找到最佳匹配颜色,如果您搜索这些值.
用户可以选择他想要搜索哪些颜色模型.我们的第一种方法是使用范围在数据库中搜索这些值(因此,如果用户搜索红色(RGB)的值150,我们将使用查询数据库BETWEEN 100 AND 200.
结果不是很好,因为组合的值总是与搜索它们并找到适当的行时不同.
有没有更好的方法来搜索我们的数据库以获得最佳匹配颜色?
"最佳匹配"的解释:
我们想找到最近的颜色,所以如果我们搜索红色,我们只想要红色.也许可以计算匹配的百分比,这样用户就可以选择是否必须是100%匹配,或者50%是否也可以.
我有一个数据库表,其中每一行都是一种颜色.我的目标:给定输入颜色,计算它与DB表中每种颜色的距离,并按该距离对结果进行排序.或者,作为用户故事说明:当我选择一种颜色时,我希望看到与我选择的颜色最相似的颜色列表,其中最接近的匹配位于列表顶部.
据我所知,为了做到这一点,各种Delta E(CIE Lab)公式是最佳选择.我无法找到公式的任何本机SQL实现,所以我编写了自己的SQL版本的Delta E CIE 1976和Delta E CIE 2000.我根据python-colormath实现生成的结果验证了公式的SQL版本的准确性.
1976年的公式很容易用SQL或任何其他语言编写,因为它是一个简单的欧几里德距离计算.对于我来说,它对任何大小的数据集执行得很好而且快速(在具有100,000行的颜色表上测试它,并且查询花费不到1秒).
相比之下,2000年的公式非常漫长而复杂.我设法在SQL中实现它,但它的性能不是很好:查询10,000行大约需要5秒,查询100,000行大约需要1分钟.
我写了一个名为colorsearchtest的示例应用程序(在Python/Flask/Postgres中),以解决我的实现问题(我在Heroku上设置了一个演示).如果您试用这个应用程序,您可以清楚地看到1976年和2000年Delta E查询之间的性能差异.
这是颜色表的模式(对于每种颜色,它存储相应的RGB和Lab表示,作为三个数值):
CREATE TABLE color (
id integer NOT NULL,
rgb_r integer,
rgb_g integer,
rgb_b integer,
lab_l double precision,
lab_a double precision,
lab_b double precision
);
Run Code Online (Sandbox Code Playgroud)
这是表格中的一些数据(所有颜色都是随机颜色,由我的应用程序中的脚本生成):
INSERT INTO color (id, rgb_r, rgb_g, rgb_b, lab_l, lab_a, lab_b)
VALUES (902, 164, 214, 189, 81.6521019943304793,
-21.2561872439361323, 7.08354581694699004);
INSERT INTO color (id, rgb_r, rgb_g, …Run Code Online (Sandbox Code Playgroud) algorithm ×8
colors ×8
php ×3
color-space ×2
mysql ×2
.net-4.0 ×1
argb ×1
c# ×1
compare ×1
comparison ×1
console ×1
flask ×1
hex ×1
hsv ×1
image ×1
java ×1
javascript ×1
math ×1
postgresql ×1
remap ×1
rgb ×1
rgba ×1
similarity ×1
x11 ×1