UPD:问题已经更新了细节和代码,见下文。
警告:这个问题是关于优化矩阵中项目的排列。这不是比较颜色。最初,我决定提供有关我的问题的上下文会有所帮助。我现在后悔这个决定,因为结果恰恰相反:关于颜色的无关紧要的谈论太多,而对实际算法几乎没有。
我为我的孩子准备了一盒 80 支毡尖笔,这让我很恼火,以至于它们没有分类。
我曾经在 Android 上玩过一个叫做 Blendoku 的游戏,你需要这样做:以形成渐变的方式排列颜色,附近的颜色最相似:
像填字游戏一样在交叉线上组织颜色既简单又有趣。但是有了这些草图标记,我就有了一个完整的 2D 网格。更糟糕的是,颜色不是从均匀渐变中提取的。
这让我无法凭直觉对毡尖笔进行分类。我需要用算法来做!
这是我所拥有的:
distance(color1, color2),显示一个颜色对是如何相似。它返回一个浮点数0和100where0表示颜色相同。我所缺少的只是一个算法。
阶乘80是一个 118 位的数字,它排除了暴力破解。
可能有一些方法可以使暴力破解可行:
但我仍然缺乏一个实际的算法,更不用说一个非暴力的算法了。
PS作业:
在 8×10 网格中排列一组预定义的 80 种颜色,使颜色形成漂亮的渐变而不会撕裂。
由于以下原因,这个问题没有明确的解决方案,可能的解决方案容易产生不完美的结果和主观性。这是预期的。
请注意,我已经有一个函数可以比较两种颜色并说明它们的相似程度。
人眼具有三种类型的感受器来区分颜色。人类色彩空间是三维的(三色)。
描述颜色有不同的模型,它们都是三维的:RGB、HSL、HSV、XYZ、LAB、CMY(请注意,CMYK 中的“K”只是必需的,因为彩色墨水并非完全不透明且价格昂贵)。
例如,这个调色板:
...使用极坐标,角度为色调,半径为饱和度。没有第三维(亮度),这个调色板缺少所有明亮和黑暗的颜色:白色、黑色、所有灰色(除了中心的 50% 灰色)和有色灰色。
这个调色板只是 HSL/HSV 色彩空间的一小部分:
不可能在不撕裂渐变的情况下以渐变的方式在 2D …
javascript arrays algorithm matrix mathematical-optimization
计算机科学中有几种颜色表示:标准RGB,还有HSV,HSL,CIE XYZ,YCC,CIELAB,CIELUV ......在我看来,大多数时候,这些表示试图近似人类的视觉(颜色)在感知上相同应该有类似的表示)
但我想知道的是,在图片方面,哪种表现最为"稳定".我有一个物体,比方说一瓶可乐,我有几千张这瓶的照片,在不同情况下拍摄(主要区别在于照片的亮度或暗度,但有方向等等...... )
我的问题是:什么颜色表示将凭经验给我最稳定的瓶子颜色表示?标签的"红色"颜色不应有太大变化.好吧,我知道它会有所不同,但我想知道最"稳定"的表现形式.
我已经被告知HSV对于这些东西比RGB更好,但我对其余部分一无所知.
编辑(技术细节):我采取瓶子的特定点.我在这一点的一千张照片中选择了相应的像素.我现在有一堆积分,取决于表现形式.我希望表示最小化此云的"大小",例如最小化云点到其重心的平均距离的表示.
有没有人知道采用两个十六进制颜色值并返回某种索引来说明颜色有多相似的方法?例如,两种黄色可能会返回更高的指数,即它们比灰色和黄色更相似?
(我使用javascript,但猜这样的东西将是一个独立于语言的公式/算法)
有一款叫做Roblox的游戏,游戏玩家可以玩游戏,通常是看起来像乐高积木的游戏.
在Roblox中,对于Brick颜色,您可以使用典型的RGB值,但这需要一个在文件大小方面效率不高的附加元素.BrickColor不是使用RGB值,而是文件大小更经济.它使用整数来解释为某种颜色.这就是我的意思:

这是我的代码片段:
import Image
f = raw_input('Image:\n')
im = Image.open(f)
rgb_im = im.convert('RGB')
r, g, b = rgb_im.getpixel((x, y))
Run Code Online (Sandbox Code Playgroud)
在我的程序中,我需要找到最接近RGB值的颜色代码.
这怎么可能实现?