想要做一个工具,自动化把贴图中的所有主色调区域区分开,以便逐步为各个主色调区域单独上色。所以需要将贴图中颜色近似的区域区分开,看似非常简单,其实不然。常用的RGB或HSV颜色模型,由三个变量共同控制着颜色,如何合并成一个因子呢?经过查阅资料最终选用了一个效率和准确度相对平衡的算法。

最简单的方式就是转化为颜色空间的距离,即:distance² = (R2 - R1)² + (G2 - G1)² + (B2 - B1)²

但是人类的眼睛对于红、绿、蓝的敏感度也是不同的,这就可能造成数值上distance很小,但肉眼识别颜色感觉色差很大。因此就引入了一个RGB权重的问题,人眼越敏感的颜色权重值越大。麻烦的是在不同的色值下人类对RGB的敏感权重不同,比如R < 128 和 R ≥ 128时的敏感权重就不同:

取两个颜色R的平均值,计为averageR:

averageR = (R1 + R2) / 2

averageR < 128时:distance² = 2 * (R2 - R1)² + 4 * (G2 - G1)² + 3 * (B2 - B1)²

averageR ≥ 128时:distance² = 3 * (R2 - R1)² + 4 * (G2 - G1)² + 2 * (B2 - B1)²

还可以把两种情况的权重平滑过度,变成一个公式:

distance² = (2 + averageR / 255f) * (R2 - R1)² + 4 * (G2 - G1)² + (2 + (255 - averageR) / 255f) * (B2 - B1)²

最后最终的结果distance归一化到0-1

下面是C#实现,需要做后处理可以照搬shader中实现:

    public class ColorExt{public static float Difference(Color c1, Color c2){c1 *= 255; c2 *= 255;var averageR = (c1.r + c2.r) * 0.5f;return Mathf.Sqrt((2 + averageR / 255f) * Mathf.Pow(c1.r - c2.r, 2) + 4 * Mathf.Pow(c1.g - c2.g, 2) + (2 + (255 - averageR) / 255f) * Mathf.Pow(c1.b - c2.b, 2)) / (3 * 255f);}}

返回值为色差,取值范围0-1。颜色越近似返回值越小,比如相同颜色返回值为0,白色与黑色返回值为1.

算法参考:

https://en.wikipedia.org/wiki/Color_difference

【Unity】计算颜色色差,近似颜色识别,实现油漆桶工具相关推荐

  1. 颜色和移动物体识别系统

    颜色和移动物体识别系统 1.开发工具 Python版本:Anaconda 的python环境3.8版本 开发软件:Pycharm社区版 识别模型:深度学习模型,普通学习模型 相关模块:opencv-p ...

  2. idea中java项目显示不对_Intellj Idea中的maven工程Java文件颜色不对,未被识别的解决...

    Intellj Idea中的maven工程Java文件颜色不对,未被识别的解决,模块,工程,给大家,文件,灰色 Intellj Idea中的maven工程Java文件颜色不对,未被识别的解决 易采站长 ...

  3. 图像特征(一)——颜色特征(颜色直方图,颜色矩,颜色集,颜色聚合向量和颜色相关图)

    本文主要是为了更好地理解图像特征,理解各方法的原理. 转载请注明出处 https://mp.csdn.net/console/editor/html/105090183 图像模式识别的一般步骤为:输入 ...

  4. MATLAB | 有关数值矩阵、颜色图及颜色列表的技巧整理

    这是一篇有关数值矩阵.颜色矩阵.颜色列表的技巧整合,会以随笔的形式想到哪写到哪,可能思绪会比较飘逸请大家见谅,本文大体分为以下几个部分: 数值矩阵用颜色显示 从颜色矩阵提取颜色 从颜色矩阵中提取数据 ...

  5. [html] HTML采用的是RGB颜色还是CMYK颜色?为什么?

    [html] HTML采用的是RGB颜色还是CMYK颜色?为什么? 用在电脑或者手机上显示的大部分都是RGB,用于需要印刷的都用CMYK 并且不同的显示器色域不同会导致色差,不同浏览器也有自己的调色板 ...

  6. OpenGL学习笔记:颜色(RGBA颜色,颜色索引模式)

    OpenGL支持两种颜色模式:一种是RGBA,一种是颜色索引模式. 无论哪种颜色模式,计算机都必须为每一个像素保存一些数据. 不同的是,RGBA模式中,数据直接就代表了颜色:而颜色索引模式中,数据代表 ...

  7. css——font 样式和对照表 颜色格式和颜色渐变

    1.font 常用字体:宋体(SimSon).黑体(SimHei).微软雅黑 {font:italic bold 12px/20px arial,sans-serif;} font简写中size和fa ...

  8. RGB 空间颜色量化 - 减少颜色数目

    很多图像处理算法是以颜色为原理展开的, 因此颜色数目很大程度上决定了算法的运行效率. 如果可以大大降低图像中的颜色数目, 将可以轻松地优化特定的图像处理算法. 1. 简单方法 - 像素除法 使用以下的 ...

  9. 一本正经的聊聊手机主题颜色随手机壳颜色变化的几种方案

    最近几天某公司产品提出了一个需求:"手机主题颜色随手机壳颜色变化",但是程序猿大哥不答应了,你这个触及到我的知识盲区了! 本着能动手不吵吵的原则, 最终产品和程序猿双双被开除了.虽 ...

最新文章

  1. U盘安装win8教程(资源下载地址、远程桌面连接方法等)
  2. css清楚浮动的class
  3. Win8总提示安装FLASH插件怎么办?
  4. Windows Mobile访问SQL Server CE 3.5(2)
  5. print打印字符串之谜
  6. 校园网搭建案例(课堂总结)
  7. .NET平台微服务项目汇集
  8. XML—— 验证XML文档
  9. 第五十八期:AI艺术日渐繁荣,未来何去何从?
  10. JavaScript 获取 当前日期和三十天以前日期
  11. Scanner的注意细节
  12. 微软发布 VS Code Remote,开启远程开发新时代!
  13. octave与matlab语法,Octave与Matlab
  14. 过目不忘JS正则表达式(转)
  15. 解决CentOS7 安装后无法识别windows分区问题
  16. 实现单片机通过传感器获取信息,并且将信息通过wifi模块发送信息给PC端,并在pyqt5界面上显示(PC端部分)
  17. 关于shiro报The security manager does not implement the WebSecurityManager interface
  18. FPGA之三八译码器
  19. 技术分享:国民远控向日葵如何通过BBR算法提升远控体验?
  20. vue项目各个文件的作用

热门文章

  1. 愿你目标清晰,从不曾动摇。。。
  2. 密码加密(MD5)原则
  3. nmcli 命令配置网络
  4. iOS系统定位基础使用
  5. linux上传文件权限命令,Linux 普通用户拿到root权限及使用szrz命令上传下载文件...
  6. golang 线程安全的map
  7. python利用itchat监控微信好友的头像是否更换(纯属娱乐)
  8. 浅谈async函数await用法
  9. traditional: true异步请求后台接收不到参数需要将这个属性修改为true,默认为false
  10. jupyter notebook 打开指定路径文件