首页 时政热点 科技头条 智能AI 安全攻防 数码硬件 开发者生态 汽车 游戏 社会热点 开源推荐 医疗健康 归档 标签 关于

Show HN:简单的算法和色彩空间来生成多样化的肤色

摘要

What Colors Are We? Constructing A Good Enough Color Space For Skin Tones If you're just looking for the results, below is a custom color picker based on the color space written in Javascript and a sa...

radius the math float uniform int color r_square theta you
2026-08-05 1 阅读 约7分钟阅读 automatoney
分享:
字号:
我们是什么颜色?为肤色构建足够好的颜色空间如果您只是在寻找结果,下面是一个基于用 Javascript 编写的颜色空间的自定义颜色选择器和一个用 Python 编写的示例程序生成算法(Javascript 等效项位于页面源代码中) - 请随意进行数学计算,并享受描绘我们多样化世界的乐趣!该项目的目标是定义一个色彩空间,以便更轻松地为各种环境(例如角色创建者或数字艺术)构建包容性色彩工具。如果您在这里看到激发您好奇心的内容,我希望您能继续阅读本节下面的内容以了解更多信息!拾取器上的每个方向调整是什么?跳到这里的解释。 # 将 select_point 实现之一的输出插入 to_rgb(t, u, v) def select_point(r_square: float = 2.) -> tuple[float, float, float]: """确定性地从球体均匀采样""" radius = r_square ** (1. / 2) phi = Uniform(0, 2 * math.pi) costheta =uniform(-1, 1) n = Uniform(0, 1) theta = math.acos(costheta) r = 半径 * (n ** (1.0 / 3)) t = r * math.sin(theta) * math.cos(phi) u = r * math.sin(theta) * math.sin(phi) v = r * math.cos(theta) return (t, u, v) def select_point(r_square: float = 2.) -> tuple[float, float, float]: """使用拒绝采样从球体中均匀采样""" radius = r_square ** (1. / 2) R = radius + 1 while R > radius: t =uniform(-radius, radius) u =uniform(-radius, radius) v =uniform(-radius, radius) R = (t**2 + u**2 + v**2) ** (1.0 / 2) return (t, u, v) def to_rgb(t, u, v) -> 元组[int, int, int]: x = (t - 0.15) / 0.45 y = (v - 1.2 * t ** 2 + 0.2 * t + 0.655) / 1.84 z = u / 3.6 r = 28.77438370854 * x + 36.78307445559 * y - 19.69766918644 * z + 187.1436241611 g = 35.38327306318 * x - 2.009931981182 * y + 47.93462563172 * z + 137.1073825503 b = 36.14733717939 * x - 43.54346996173 * y - 28.50821294135 * z + 108.2241610738 return int(r), int(g), int(b) # 概述 我们是什么颜色?简短的答案可能是“棕色”,而长的答案则非常非常长。以数字方式表示广泛的人类肤色是一个难题。通常,一组有限的颜色被认为足以覆盖全部多样性。然而,在使用一组特定的颜色时,无法准确地代表大量人群,或者可能会无意中被排除在外。这项工作的目标是确定 RGB 颜色空间中最广泛的颜色范围,这些颜色与合理但简化的肤色相对应。特别是,目的是确定定义该区域的简单、“足够好”的方程,从而允许在各种情况下使用该范围。称这些方程“足够好”是为了将这项工作的局限性放在最前沿——结果是一个有用的起点,但不应被视为具有权威性。 # 简介 虽然代表我们的颜色集有所改进,但仍然存在需要弥补的差距。表情符号表示我们有 5 种颜色(或卡通黄色);化妆品品牌可能会说 50;角色创建者可能会耸耸肩并告诉你从所有 16,777,216 个选项中进行选择。如果你看看外面——或者只是看看你自己——你很快就会发现,这些都无法与现实的多样性相提并论。一个人不只是一种颜色。尽管如此,尝试将事情归结为更少的值可能会很有用。 Unicode联盟和化妆品公司可以找出自己的范围,但我相信我们可以找到更好的解决方案,介于“几个”和“几百万”之间。以数字艺术世界为例,如下图所示的图像经常被传播,试图帮助其他艺术家识别合理的颜色。 Tumblr 用户 shiroxix 的“Flesh Cloud” 在视频游戏世界中,如今的预设颜色往往范围广泛,并辅以通用颜色选择器,但如果最初的体验能够提供更好的选择,那就更好了。抢先体验游戏 Paralives 的角色创建者的屏幕截图 # 局限性 回到现实,本作有许多固有的局限性。如前所述,肤色比单一颜色复杂得多。它们在身体的不同部位之间差异很大,并且受到复杂的生物过程的影响。皮肤的感知颜色受到血流、黑色素浓度、穿过皮肤层的光的复杂散射以及白癜风、雀斑、色素沉着过度、疤痕和其他常见变化等因素的影响。其次,各种健康状况可能会导致人们的肤色远远超出人们可能认为的合理范围。银中毒通常会导致皮肤呈蓝灰色;高胆红素会导致皮肤呈黄色或绿色。另外,需要注意的是,我是一个人,而不是一个研究人员
这篇文章对您有帮助吗?

订阅66必读

每日精选科技资讯,直达你的邮箱