处理窄带图像,可选颜色可以说是最方便使用的工具。但是PS只能应用8bit的调整,导致多次调整以后像素颜色分离很严重。于是就想办法把算法分离出来,考虑另外开发一个能在32位浮点下计算的小程序。

首先,可选颜色的调整选项包括所谓的“可选的”[颜色]与“可调的”[青色][洋红][黄色][黑色]。显然,这四个颜色是油墨印刷下的基础色,CMYK。调整黑色是调整颜色的整体亮度,这个在窄带处理中一般不会去动它,这里只考虑CMY的影响。

再回到[颜色]的选项,会发现总共有9个选项,后面那三个也是涉及整体亮度的调整,同样不去管它,只考虑前面六个。红黄绿青蓝紫,均分了整个色轮。

那么计算一个像素在一个可选颜色调整下会发生什么变化,首先要判定这个像素属于什么色相,或者说它会受到什么颜色的影响,如果随便调都会影响到所有像素的话,那“可选”就无从谈起。判断的方法很简单,考察像素的RGB值,它必然会受到值最大的那个分量的影响。其次,它会受到最大值与第二大值形成的颜色的影响,下面以8bit下的颜色举例。

(R,G,B)=(128,84,64),最大值为R,其次为G,那么会受到红色(R)和黄色(R+G)的影响,它在色轮上处于红色线和黄色线之间;

(R,G,B)=(128,64,64),最大值为R,B=G,那么它只受到红色的影响,它在色轮上刚好落在红色线上。

确定了一个调整会影响哪些像素之后,就得知道是怎么影响。第一步是确定调整的范围大小,即某个通道的最大值与最小值的差。如果[颜色]选择红绿蓝中的一个,那么范围大小为三通道最大值减中间值;如果选择黄青紫中的一个,范围大小则是中间值减最小值,即:

if (Red||Green||Blue) delta=max(R,G,B)-mid(R,G,B);if (Yellow||Cyan||Magenta) delta=mid(R,G,B)-min(R,G,B);

为了简化,后文简写为max和mid。

选好[颜色]之后,我们有青色、洋红、黄色三个选项可以调整。这三个颜色分别是RGB的补色,因此增加青色就是减少红色,诸如此类。

那么对于RGB任意通道,在[颜色]红绿蓝时,将青色+100%,会导致R通道变化为:

①Rmin=(255-max+mid)×R/255

由于增加青色等于减少红色,此时的R为最小值,记为Rmin。那么根据上述的调整范围大小,可知青色-100%的情况下,R通道变化为:

②Rmax=Rmin+delta

如果调整量非±100%,也很简单,假设调整强度为Amount,其值有符号:

③R'=R-delta×Amount

如果调整其他通道,例如调整黄色,由于黄色是蓝色的补色,上面三个式子只需要将R改写成B即可:

①Bmin=(255-max+mid)×B/255

②Bmax=Bmin+delta

③B'=B-delta×Amount

[颜色]黄青紫时,情况也很相似,只是把①中的max和mid改成mid和min:

①Rmin=(255-mid+min)×R/255

②Rmax=Rmin+delta

③R'=R-delta×Amount

这样就描述了所有的情况。

需要注意的是,这样的调整下,Amount值在不到±100%时调整就会到达极限。举个例子:

(R,G,B)=(89,104,46),显然这会受到[黄色][绿色]的影响。我们选择[绿色],并且调整青色,可以计算得到:

delta=104-89=15

Rmin=(255-104+89)×89/255=84

Rmax=84+15=99

那么很显然,当Amount分别等于-67%和+33%时,R'就已经达到极值,超出这个范围,调整Amount的话,像素值也就停留在极值不变化。

此外,范围大小取决于max-mid或者mid-min,因此当像素三通道特别接近,即像素颜色接近中性灰时,可调范围就特别特别小。也就是说,如何剧烈的可选颜色调整,都不会让本就是中性灰的像素偏离中性灰。

参考:

Photoshop中可选颜色是如何计算的? - 知乎

我终于把坑填了——关于可选颜色的计算公式

PS中可选颜色的计算方法(绝对量)相关推荐

  1. PS中色相饱合度/可选颜色/色彩平衡/曲线的区别和运用方法详解

    http://www.jb51.net/photoshop/374517.html PS中色相饱合度/可选颜色/色彩平衡/曲线的区别和运用方法详解 整体思路: 1.使用颜色混合模式营造照片基调. 2. ...

  2. 深度剖析:PS中的3大类调色功能。

    1.怎么做好调色? 从我开公众号开始以及在其他的社交平台上,问我后期最多的就是关于调色的问题.并且大家最喜欢问的就是"这个风格怎么调?这个图片怎么做出来的?" 这个问题完全可以写一 ...

  3. 高精度矢量汉字的一种填充方法_使用PS中的钢笔工具制作一只蝴蝶矢量插画

    使用PS中的钢笔工具制作一只蝴蝶矢量插画 矢量插画用途广泛,很漂亮.但是对于很多艺术家来说,创建起来太数字化而且不直观. 然而,Photoshop 的最新版本CC就解决了你在使用钢笔工具添加新变量碰到 ...

  4. 背景图层和普通图层的区别_新手如何在PS中创建图层?不容错过的7种方法,你值得学习...

    昨天跟小波一起认识了PS图层的童鞋应该已经对它不陌生了,那么在了解之后就要来实践操作,毕竟实践出真知嘛.那这一章就一起来学习在PS中创建图层吧. 在PS中,图层的创建方法有很多种,包括在"图 ...

  5. 考究Hadoop中split的计算方法

    Hadoop中block块大小和split切片大小会影响到MapReduce程序在运行过程中的效率.map的个数.在本文中,以经典入门案例WordCount为例,通过debug的方式跟踪源代码,来分析 ...

  6. 中如何将方形图片转换成圆形图片_【PS】PS中不可不知的实用技巧!你都掌握了吗?...

    今天给大家分享一些在PS中经常用到的实用小技巧,操作简单易上手. 01 拉伸图片人物不变形 在我们在PS里想要拉伸一些图片时,里面的人物往往会跟着一起变形,那么如何改变图片比例的同时,又不影响人物的形 ...

  7. mysql key_len_浅谈mysql explain中key_len的计算方法

    mysql的explain命令可以分析sql的性能,其中有一项是key_len(索引的长度)的统计.本文将分析mysql explain中key_len的计算方法. 1.创建测试表及数据 CREATE ...

  8. 在PS中如何进行图文互排,且层的使用……

    在PS中如何进行图文互排,且层的使用-- 1.先打开PS,新建一个图层(或者打开一个图片),我们称为图层一 ,然后复制该图层 ,然后再把该图层和该图层的副本前的"眼睛"去掉. 2. ...

  9. 在ps中画两个同心圆并且把两个同心圆进行任意角度切割

    在工作中遇到要在ps中画如图两个同心圆,并且进行6等分.查找资料加自己摸索,可以通过以下方式实现: 1.新建一画布.并用通过标尺画出两条水平和垂直参考线,选择椭圆工具,并在选项设置中选择圆和从中心两个 ...

最新文章

  1. LINUX创建www的用户组和用户,并且不允许登录权限:
  2. Android面试题目之(9) 幽灵引用
  3. 博耳电力中标上海万国数据中心项目
  4. 运维与自动化运维发展概括
  5. 如何向本地MSDN帮助库中添加和修改一些帮助内容
  6. 云原生时代 给予.NET的机会
  7. Linux编译C没有文件名,crt1.o linux x64上没有这样的文件c编译错误
  8. 怎么用计算机连接电视,电视当电脑显示器怎么连接
  9. Android使用百度翻译api
  10. mastercam加工报表生成_如何使用 Mastercam 进行角度头编程?丨角度头铣削轮毂内腔案例分享...
  11. JDBC系列 之 JDBC层次结构和基本构成
  12. nodejs通过later实现定时执行任务
  13. 学术资源不定期分享-【钱学森《工程控制论》英文原版】
  14. TCP 和 UDP 区别
  15. 程序员工资真的很高么,月入几万的难道不是吹牛?
  16. 算法笔记(胡凡)刷题收获@Kaysen
  17. 如何通过线性回归预测股票价格?
  18. java基于ssm的宠物狗商店交流网站
  19. 最好和最便宜的照片存储网站(优质图库摄影)
  20. 谷粒学院(十七)讲师列表页 | 讲师详情 | 课程列表页 | 课程详情 | 整合阿里云视频点播

热门文章

  1. Thinkphp快速入门(一)
  2. asc和desc的区别
  3. 单片机节日彩灯实训报告_基于单片机的节日彩灯设计论文课程设计.doc
  4. Unittest简单项目
  5. vue地址栏隐藏id 隐藏参数
  6. pvr.ccz转png
  7. 桌面word excel ppt图标变白怎么解决?
  8. java如何导入jframe包_Java:将类导入Jframe
  9. 百度地图,读取后台值,获取地点坐标
  10. 前端入门学习笔记—HTML