【Unity】计算颜色色差,近似颜色识别,实现油漆桶工具
想要做一个工具,自动化把贴图中的所有主色调区域区分开,以便逐步为各个主色调区域单独上色。所以需要将贴图中颜色近似的区域区分开,看似非常简单,其实不然。常用的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.开发工具 Python版本:Anaconda 的python环境3.8版本 开发软件:Pycharm社区版 识别模型:深度学习模型,普通学习模型 相关模块:opencv-p ...
- idea中java项目显示不对_Intellj Idea中的maven工程Java文件颜色不对,未被识别的解决...
Intellj Idea中的maven工程Java文件颜色不对,未被识别的解决,模块,工程,给大家,文件,灰色 Intellj Idea中的maven工程Java文件颜色不对,未被识别的解决 易采站长 ...
- 图像特征(一)——颜色特征(颜色直方图,颜色矩,颜色集,颜色聚合向量和颜色相关图)
本文主要是为了更好地理解图像特征,理解各方法的原理. 转载请注明出处 https://mp.csdn.net/console/editor/html/105090183 图像模式识别的一般步骤为:输入 ...
- MATLAB | 有关数值矩阵、颜色图及颜色列表的技巧整理
这是一篇有关数值矩阵.颜色矩阵.颜色列表的技巧整合,会以随笔的形式想到哪写到哪,可能思绪会比较飘逸请大家见谅,本文大体分为以下几个部分: 数值矩阵用颜色显示 从颜色矩阵提取颜色 从颜色矩阵中提取数据 ...
- [html] HTML采用的是RGB颜色还是CMYK颜色?为什么?
[html] HTML采用的是RGB颜色还是CMYK颜色?为什么? 用在电脑或者手机上显示的大部分都是RGB,用于需要印刷的都用CMYK 并且不同的显示器色域不同会导致色差,不同浏览器也有自己的调色板 ...
- OpenGL学习笔记:颜色(RGBA颜色,颜色索引模式)
OpenGL支持两种颜色模式:一种是RGBA,一种是颜色索引模式. 无论哪种颜色模式,计算机都必须为每一个像素保存一些数据. 不同的是,RGBA模式中,数据直接就代表了颜色:而颜色索引模式中,数据代表 ...
- css——font 样式和对照表 颜色格式和颜色渐变
1.font 常用字体:宋体(SimSon).黑体(SimHei).微软雅黑 {font:italic bold 12px/20px arial,sans-serif;} font简写中size和fa ...
- RGB 空间颜色量化 - 减少颜色数目
很多图像处理算法是以颜色为原理展开的, 因此颜色数目很大程度上决定了算法的运行效率. 如果可以大大降低图像中的颜色数目, 将可以轻松地优化特定的图像处理算法. 1. 简单方法 - 像素除法 使用以下的 ...
- 一本正经的聊聊手机主题颜色随手机壳颜色变化的几种方案
最近几天某公司产品提出了一个需求:"手机主题颜色随手机壳颜色变化",但是程序猿大哥不答应了,你这个触及到我的知识盲区了! 本着能动手不吵吵的原则, 最终产品和程序猿双双被开除了.虽 ...
最新文章
- U盘安装win8教程(资源下载地址、远程桌面连接方法等)
- css清楚浮动的class
- Win8总提示安装FLASH插件怎么办?
- Windows Mobile访问SQL Server CE 3.5(2)
- print打印字符串之谜
- 校园网搭建案例(课堂总结)
- .NET平台微服务项目汇集
- XML—— 验证XML文档
- 第五十八期:AI艺术日渐繁荣,未来何去何从?
- JavaScript 获取 当前日期和三十天以前日期
- Scanner的注意细节
- 微软发布 VS Code Remote,开启远程开发新时代!
- octave与matlab语法,Octave与Matlab
- 过目不忘JS正则表达式(转)
- 解决CentOS7 安装后无法识别windows分区问题
- 实现单片机通过传感器获取信息,并且将信息通过wifi模块发送信息给PC端,并在pyqt5界面上显示(PC端部分)
- 关于shiro报The security manager does not implement the WebSecurityManager interface
- FPGA之三八译码器
- 技术分享:国民远控向日葵如何通过BBR算法提升远控体验?
- vue项目各个文件的作用