给定 RGB 值,在数据库中找到最接近匹配的最佳方法是什么?

2024-03-07

我有一个 RGB 值,如果它不存在于我的数据库的颜色表中,我需要找到最接近的颜色。我正在考虑比较所有值并找出差异(红色、绿色和蓝色),然后取平均值。最低平均偏差应该是最接近的颜色。在我看来应该有更好的方法。有任何想法吗?


将颜色视为 3 维空间中的向量,然后您可以使用 3d 毕达哥拉斯轻松计算差异:

d = sqrt((r2-r1)^2 + (g2-g1)^2 + (b2-b1)^2)

但请注意,由于颜色会受到不太完美的眼睛的解释,您可能需要调整颜色以避免它们具有相同的重要性。

例如,使用典型的加权方法 https://web.archive.org/web/20100316195057/http://www.dfanning.com/ip_tips/color2gray.html:

d = sqrt(((r2-r1)*0.3)^2 + ((g2-g1)*0.59)^2 + ((b2-b1)*0.11)^2)

由于眼睛对绿色最敏感,对蓝色最不敏感,因此仅蓝色分量不同的两种颜色必须具有更大的数字差异,才能被认为比绿色分量具有相同数字差异的颜色“更不同”。

还有多种方法可以优化此计算。例如,由于您对实际情况并不真正感兴趣d值,您可以省去平方根:

d =   ((r2-r1)*0.30)^2
    + ((g2-g1)*0.59)^2
    + ((b2-b1)*0.11)^2

请注意,在许多基于 C 语法的编程语言(如 C#)中,^并不意味着“求...的幂”,而是“二元异或”。

所以如果这是 C#,你会使用Math.Pow计算该部分,或者只是展开并进行乘法。

Added: 从页面来看维基百科上的色差 http://en.wikipedia.org/wiki/Color_difference,有各种标准试图处理感知差异。例如,称为 CIE94 的公式使用不同的公式,在L*C*h颜色模型看起来值得研究,但这取决于您希望它的准确程度。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

给定 RGB 值,在数据库中找到最接近匹配的最佳方法是什么? 的相关文章

  • Java:使用indexOf方法根据另一个数组对数组进行排序

    我想根据另一个数组 索引 的排序顺序迭代两个数组 A B 在本例中为 10 34 32 21 String A a b c d String B e f g h int indexes 10 34 32 21 为这里的坏例子道歉 我已经更新
  • Oracle SQL - 将 oracle sql 中的 id 更新为按顺序排列

    我在 Oracle SQL 中有一个表 其 id 按递增顺序排列 但由于编辑原因 id 中存在间隙 例如id 目前类似于 22 23 24 32 33 44 etc 我想通过浏览表中的每一行并更新它们来修复这些差距 这样就不会有差距 最好的
  • 当目标是查找某个字符串的所有出现情况时,KMP 最坏情况的复杂度是多少?

    我还想知道哪种算法在查找另一个字符串中所有出现的字符串时具有最坏情况的复杂性 博耶 摩尔算法似乎具有线性时间复杂度 KMP 算法在查找字符串中所有出现的模式时具有线性复杂度 如 Boyer Moore 算法1 如果您尝试在 aaaaaaaa
  • MySQL 偏移无限行

    我想构造一个查询 显示表中的所有结果 但从表的开头偏移 5 据我所知 MySQLLIMIT需要一个限制和一个偏移量 有什么办法可以做到这一点吗 来自MySQL LIMIT 手册 http dev mysql com doc refman 5
  • 带有 CONTAINS 查询的PreparedStatement

    我有一个查询需要连续运行 28000 次 所以我认为使用准备好的语句可能是一个聪明的主意 这是我的查询 String requestWithFirstName SELECT SE ELEMENT ID SE LASTNAME SE FIRS
  • 4 x 3 锁图案

    我遇到了这个 它要求计算在 4x3 网格中可以制作特定长度的锁定图案的方式数 并遵循规则 可能有些点不能包含在路径中 有效的模式具有以下属性 图案可以使用第一次接触的点序列来表示 与绘制图案的顺序相同 从 1 1 到 2 2 的图案与图案不
  • 改变 RGB 颜色的色调

    我正在尝试编写一个函数来改变 RGB 颜色的色调 具体来说 我在 iOS 应用程序中使用它 但数学是通用的 下图显示了 R G 和 B 值如何随色调变化 看起来 编写一个函数来改变色调似乎应该是一个相对简单的事情 而不需要对不同的颜色格式进
  • 更新表并返回旧值和新值

    我正在编写一个 VB 应用程序 用于清理 DB2 数据库中的一些数据 在一些表中我想更新整个列 例如帐号列 我正在将所有帐号更改为从 1 开始 并在列表中向下递增 我希望能够返回旧帐号和新帐号 这样我就可以生成某种可以引用的报告 这样我就不
  • PostgreSQL 中的 LATERAL JOIN 和子查询有什么区别?

    自从 PostgreSQL 推出以来 它具备了以下功能 LATERAL连接 我一直在阅读它 因为我目前为我的团队进行复杂的数据转储 其中有许多低效的子查询 使整个查询需要四分钟或更长时间 我明白那个LATERALjoins 可能可以帮助我
  • 如何使用KDTrees实现最近邻搜索?

    所以 我正在实施一个KD Tree http en wikipedia org wiki Kd tree进行最近邻搜索 我已经构建了树部分 但我认为我没有完全理解搜索部分 关于遍历树来搜索邻居 维基百科文章如下 Starting with
  • Bellman-Ford 算法检测什么?负重还是负循环?

    如果给定一个图 现在我们要从源头计算最短路径 现在 如果一条边具有负权重 但在到达目的地时有边到后边返回到该边 我的意思是如果没有循环 那么我们就没有负循环 但是here http en wikipedia org wiki Bellman
  • 稀疏矩阵中的最大和子矩形

    求一个子矩形中的最大和NxN矩阵可以完成O n 3 正如其他帖子中指出的 使用 2 d kadane 算法的时间 然而 如果矩阵是稀疏的 具体来说O n 非零条目 可以O n 3 时间被打败了吗 如果有帮助的话 对于我感兴趣的当前应用程序
  • 交换两个向量之间的值,使两个向量的 max_element 之和最小

    这是 Codechef 的问题 但请耐心等待 https www codechef com ZCOPRAC problems ZCO16001 https www codechef com ZCOPRAC problems ZCO16001
  • 将插入与 select 语句合并

    这对我有用 MERGE Table1 AS tgt USING SELECT TOP 1 FROM Table2 SELECT itmid FROM Table3 WHERE id id as a WHERE id id AS src ON
  • 在无向图中查找强连通分量

    我想在无向图中找到强连接的组件 即如果我从节点开始A然后我会回到节点A并且每条边都被恰好访问一次 对于有向图可以使用Tarjan算法来寻找强连通分量 但是对于无向图怎么办 我认为您错过了强连通分量的含义 强连接组件 如果所有顶点对之间都存在
  • 触发器以捕获服务器中的架构更改

    是否可以实现类似以下触发器的东西 CREATE TRIGGER tr AU ddl All Server ON DATABASE WITH EXECUTE AS self FOR DDL DATABASE LEVEL EVENTS AS D
  • 如何制作 HTML/CSS/JS 变色背景(如 Kahoot.it 那样)

    如何使用 html 和 css 以及可能的 javascript 制作类似于 waht 的颜色变化 褪色背景https kahoot it https kahoot it has 你应该学会检查和获取 keyframes bgcolor 0
  • 在 SQL 查询中使用 fn_Split

    我一直在努力争取fn Split在我的查询中正常工作 我到处搜索 并在这里找到了似乎接近我需要的答案 但我仍然无法使其发挥作用 基本上我试图返回与数组中的条目匹配的记录 我已经有了一个与我的数据库一起使用的表值函数 如下所示 Select
  • Spring Boot如何加入自定义查询

    我需要创建一个端点 该端点按州返回人口普查数据以及城市列表 我目前使用两个端点来获取此数据 目前回应 自定义查询一 censusByState id 1 code 11 name Rond nia statePopulation 18152
  • 从 oracle 中为每个组选择最新行

    我在留言簿中有一张包含用户评论的表格 列有 id user id 标题 评论 时间戳 我需要为每个用户选择最新行 我尝试使用 group by 执行此操作 但没有管理它 因为我无法在按 user id 分组的同一查询中选择任何其他内容 SE

随机推荐