色彩有多种颜色空间表示方式,如RGB,HSV,HSL,LAB等等,

RGB颜色空间:

RGB颜色空间相对简单,也最为普遍,就分为三个颜色通道,分别为红色,绿色,蓝色这三种基本色调的值,然后将这三个颜色融合在一起,也就成为一种颜色.

但用RGB比较颜色之间的相似度时,存在很大的问题,不建议直接使用,因为往往一个通道的一点改变,会导致最后融合在一起的颜色发生巨大变化,而如果三个通道的同时改变,却只会使最后的明暗发生变化,色调并不会产生巨大变化.

而这也是H系列色彩空间普遍存在的问题.

HSV颜色空间:

HSV是个六棱锥模型,这个模型中颜色的参数分别是:色调(H),饱和度(S),明度(V)。

色调H:

用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,品红为300°;

饱和度S:

饱和度S表示颜色接近光谱色的程度。一种颜色,可以看成是某种光谱色与白色混合的结果。其中光谱色所占的比例愈大,颜色接近光谱色的程度就愈高,颜色的饱和度也就愈高。饱和度高,颜色则深而艳。光谱色的白光成分为0,饱和度达到最高。通常取值范围为0%~100%,值越大,颜色越饱和。

明度V:

明度表示颜色明亮的程度,对于光源色,明度值与发光体的光亮度有关;对于物体色,此值和物体的透射比或反射比有关。通常取值范围为0%(黑)到100%(白)。

其中:V对应的是棱锥的中间轴,H对应的是角度,S对应的是距离中间轴的距离.

RGB跟HSV的相互转换可参考百度百科

距离计算方法:

在斜边长R,底面圆半径为r,高为h的HSV圆锥体内,以地面圆心为原点,H=0为x轴正方向建立坐标轴。那么色值是(H,S,V)的点的三维坐标(x,y,z)

x = rVScosH

y = rVSsinH

z = h∗(1−V)

具体Python代码实现(参考这个连接)

def HSVDistance(hsv_1,hsv_2):H_1,S_1,V_1 = hsv_1H_2,S_2,V_2 = hsv_2R=100angle=30h = R * math.cos(angle / 180 * math.pi)r = R * math.sin(angle / 180 * math.pi)x1 = r * V_1 * S_1 * math.cos(H_1 / 180 * math.pi);y1 = r * V_1 * S_1 * math.sin(H_1 / 180 * math.pi);z1 = h * (1 - V_1);x2 = r * V_2 * S_2 * math.cos(H_2 / 180 * math.pi);y2 = r * V_2 * S_2 * math.sin(H_2 / 180 * math.pi);z2 = h * (1 - V_2);dx = x1 - x2;dy = y1 - y2;dz = z1 - z2;return math.sqrt(dx * dx + dy * dy + dz * dz);

HSV颜色空间分布图

但HSV空间计算距离时,存在一定的问题,比如,在接近顶点的地方,基本都接近黑色,不管H色调怎么改变,而在底面的中心或者S饱和度接近0时,基本都接近灰色,不管H色调怎么改变,而在饱和度S较大,且V亮度较大时,H色调的一点改变往往会让整体的颜色产生巨大变化,所以,用HSV计算距离时往往还存在某些问题.

LAB颜色空间:

LAB颜色空间是基于人眼对颜色的感知,可以表示人眼所能感受到的所有颜色。L表示明度,A表示红绿色差,B表示蓝黄色差。两个颜色之见的色差:

ΔE=( ΔL^2 + ΔA^2 + ΔB^2 ) ^ (1/2)

ΔE 表示色差,ΔL/ΔA/Δb分别表示两个颜色之间在不同分量的差值。

为了简化计算及保证计算效果,有人在RGB空间上通过公式计算出加权的欧式距离。

以下为具体的计算方法,详细说明可以参考:链接

具体Python代码实现(参考这个链接):

def ColourDistance(rgb_1, rgb_2):R_1,G_1,B_1 = rgb_1R_2,G_2,B_2 = rgb_2rmean = (R_1 +R_2 ) / 2R = R_1 - R_2G = G_1 -G_2B = B_1 - B_2return math.sqrt((2+rmean/256)*(R**2)+4*(G**2)+(2+(255-rmean)/256)*(B**2))

这个方法是我目前尝试,最为可靠有效的方法.

CIEDE2000色差公式计算:

经下面一楼博友的提醒,我去了解测试CIEDE2000色差计算公式.

CIEDE2000色差公式计算也是基于LAB颜色空间的计算公式.具体的公式可参考维基百科:https://zh.wikipedia.org/wiki/%E9%A2%9C%E8%89%B2%E5%B7%AE%E5%BC%82

Python已有实现的接口模块,可直接调用,参考文档:http://python-colormath.readthedocs.io/en/latest/delta_e.html#delta-e-cie-2000

经过测试,CIEDE2000色差公式与上面提到的LAB颜色空间计算方法的效果对比,结果各有千秋,具体使用哪种方法,看应用场景测试决定.

色差计算(颜色之间的相似度计算)相关推荐

  1. Python计算图片之间的相似度

    1.cosin相似度(余弦相似度) 把图片表示成一个向量,通过计算向量之间的余弦距离来表征两张图片的相似度 # -*- coding: utf-8 -*- # !/usr/bin/env python ...

  2. 一文看懂推荐系统:召回03:基于用户的协同过滤(UserCF),要计算用户之间的相似度

    一文看懂推荐系统:召回03:基于用户的协同过滤(UserCF),要计算用户之间的相似度 提示:最近系统性地学习推荐系统的课程.我们以小红书的场景为例,讲工业界的推荐系统. 我只讲工业界实际有用的技术. ...

  3. 软件工程java向量相似度计算_向量的相似度计算常用方法9个

    <向量的相似度计算常用方法9个>由会员分享,可在线阅读,更多相关<向量的相似度计算常用方法9个(5页珍藏版)>请在人人文库网上搜索. 1.向量的相似度计算常用方法相似度的计算简 ...

  4. gensim在“中文查找(关键词)“与“txt文本“之间做相似度计算(返回最相似的文本)

    本文目的 搜索关键词,返回最相关的txt文本内容(模仿搜索引擎) 网上的例子都是一个list里面放入几句话,然后输入关键词去计算相似度. 无法在实际中应用,例如 http://blog.csdn.ne ...

  5. word2vec相似度计算_干货|文本相似度计算

    点击上方"AI遇见机器学习",选择"星标"公众号 原创干货,第一时间送达 一.余弦测量相似度 为了定义两个目标词v和w之间的相似度,我们需要一个度量来取两个这样 ...

  6. 根据经纬度计算两点之间的距离---google计算公式推导

    经纬度常用词   经度 longitude, 维度 latitude 图和解读来源网上资料,自我也进行一遍推导,有些地方会加入自己的一些理解,重新温故了之前学的三角函数,度,弧度,弧长的概念,记忆模糊 ...

  7. java 图片相似度_GitHub - java51talk/image-similarity: 计算图片之间的相似度

    ImageSimilarity 计算图片相似度的应用很广泛,如google.baidu.360等搜索引擎以图搜图的功能就是其典型应用.下面介绍介绍两种算法: 感知哈希算法(Perceptual has ...

  8. 深度学习的相似度计算 向量之间的相似程度计算 Q K V的注意力权重

    https://blog.csdn.net/qq_32797059/article/details/106502737

  9. 文本分类和提取关键词算法_文本内容之间的关键词提取和相似度计算

    文本分类和提取关键词算法 背景 Web应用程序变得越来越智能. 从网站上使用服务的日子已经一去不复返了,用户不得不填写一个巨大的表格. 假设您有一个适合书迷的网站. 在Web 2.0之前,像这样的网站 ...

最新文章

  1. 开启iOS自动化测试之门
  2. 计算机算法设计与分析之----- 递归与分治策略
  3. Nginx域名访问与访问控制
  4. 单臂路由配置实验同一交换机上vlan间ping不通_【干货】什么是单臂路由?如何配置?...
  5. pytorch 音频分类_Pytorch中音频的神经风格转换
  6. remove是什么意思计算机语言,remove是什么意思?remove是什么意思?
  7. C++多线程实例(_beginThreadex创建多线程)
  8. android动画view上移,在Android开发中使用View制作一个引导动画
  9. Modbus节点地址规则
  10. 计算机中复合模板在哪,冷冲模CAD系统中装配模板的设计与复合算法研究-计算机软件专业论文.docx...
  11. asp.NET去掉form的runat=server照样使用服务器控件,包括表单的服务器控件
  12. Inception-v4论文总结
  13. 局域网限速软件_8款Windows实用软件推荐,纯干货,总有一款是你必备的
  14. 行为型模式17-责任链模式
  15. QQ认证空间已升级QQ公众空间,申请地址是?
  16. java 省市联动_Java 地区字典之省市区三级联动 (一)
  17. 9月20日云栖精选夜读:异构计算高性能计算分论坛——揭秘拿什么实现超算平民化、国际化?
  18. 关于国土空间交通专项规划体系框架与编制要点的思考
  19. “IND-”安全概念的简单解释(IND-CPA,IND-CCA等)
  20. SD卡扇区损坏引起了读文件失败

热门文章

  1. php图片转换软件,能能图片格式转换器 支持主流图片格式批量转换,简单实用的图片转换软件...
  2. 图片上传流程前端上传文件后端保存文件并返回图片地址
  3. 10个python爬虫入门实例,学会直接上手项目开发
  4. Vue动态组件 传值
  5. Lingo学习笔记(二)——常用函数
  6. 埃森哲 java_【埃森哲JAVA软件工程师面试】要求挺高,从面试到拿到offer历经时间长-看准网...
  7. 基于C#+Oracle的模拟图书馆管理系统
  8. 【码农教程】手把手教你Mockito的使用
  9. 国立台湾大学_郭彦甫老师_MATLAB课程练习
  10. Chinadaily双语新闻爬取