我正在寻找一种比较两种RGB颜色并生成其相似性值的算法(其中相似性意味着"与人类平均感知相似").
有任何想法吗?
编辑:
由于我不能回答,我决定将我的"解决方案"作为问题的编辑.
我决定在我的应用程序中使用(非常)小的真彩色子集,以便我可以自己处理颜色的比较.我使用大约30种颜色,并使用它们之间的硬编码距离.
由于它是一个iPhone应用程序,我使用Objective-C,实现或多或少是一个表示下表的矩阵,它显示了颜色之间的距离.
我一直在研究这个问题已经有一段时间没什么可喜的结果了.我试图将图像分割成相似颜色的连接区域.(基本上将所有像素的列表分成多个组(每个组包含属于它的像素的坐标并共享相似的颜色).
例如:http: //unsplash.com/photos/SoC1ex6sI4w/
在这张图片中,顶部的乌云可能会落入一组.山上的一些灰色岩石在另一个,另一些是橙色的草.雪会是另一个 - 背包的红色 - 等等.
我正在尝试设计一种既准确又高效的算法(它需要在中端笔记本电脑级硬件上运行几毫秒)
以下是我的尝试:
使用基于连通分量的算法从左上角扫描每个像素,从左到右扫描每行像素(并将当前像素与顶部像素和左像素进行比较).使用CIEDE2000色差公式,如果顶部或左侧的像素在一定范围内,那么它将被视为"相似"并且是该组的一部分.
这种方法有效 - 但问题在于它依赖于具有锐边的颜色区域 - 如果任何颜色组通过软渐变连接,它将沿着该渐变向下移动并继续"连接"像素,因为各个像素之间的差异是比较小到足以被认为是"相似的".
为了解决这个问题,我选择将每个访问过的像素的颜色设置为大多数"相似"相邻像素(顶部或左侧)的颜色.如果没有相似的像素,则保留其原始颜色.这在某种程度上解决了更加模糊的边界或柔化边缘的问题,因为随着算法的进展,新组的第一种颜色将被"携带",并且最终颜色与当前比较颜色之间的差异将超过"相似性"威胁和不再是该群体的一部分.
希望这是有道理的.问题是这些选项都没有真正起作用.在上面的图像上返回的不是干净的组,而是嘈杂的碎片组,这不是我想要的.
我不是专门寻找代码 - 而是关于如何构建算法以成功解决这个问题的更多想法.有没有人有这个想法?
谢谢!
我需要能够提取两种十六进制颜色之间的差异,将其自身表示为十六进制颜色,以便稍后使用LESS将它们组合起来.
理想情况下,这将适用于JavaScript
互联网界的人们!我正在制作一个程序,需要使用 Jimp 尝试找到大量像素的最接近的 RGB 匹配。
假设您有一种略带紫色的颜色,我想将其更改为表格中的紫色,如下所示:
var colors = [
[0,0,255,0],
[1,255,165,0],
[2,0,0,255],
[3,255,192,203],
[4,165,42,42],
[5,255,255,255],
[6,0,0,0],
[7,230,230,350],
[8,255,255,0],
[9,0,0,0],
]
Run Code Online (Sandbox Code Playgroud)
(其中一个数组中的第一个数字可以忽略,其余的只是 R、G 和 B)
因此,如果我有像 (255,7,1) 这样的红色,我想将其与表中的红色相匹配,即 (255,0,0)
我已经尝试过一些东西,但它非常愚蠢并且不起作用,所以我就不告诉你细节了。
有谁能够帮助我?谢谢!