文档章节

能理解RGB模式中确定数值的各种颜色,但怎么理解明度、饱和度、色相等概念?

天蚕宝衣
 天蚕宝衣
发布于 2017/04/12 09:12
字数 2319
阅读 136
收藏 0

一. 问题

无法理解明度、饱和度、色相等概念,学习图层调整,现在很痛苦!
在rgb模式中,三原色组合出各种颜色,如著名的色相环,这个无非是红色,绿色,蓝色三个颜色的16进制值组合出的类似#85b056的颜色系数,我一直觉着这个东西就完完全全唯一指定了颜色,所以无法接受“明度”,“饱和度”,“色相”的概念,我程序员学ps还真有点难度。

现在学习“图层调整”,对“亮度”与“对比度”,“色阶”,“色相”与“饱和度”完全没有感觉,所以调整起来完全想不通其中的原理。比如色阶是什么感念,亮度是什么感念,调整对比度时,图片上每个像素颜色系数怎么变化的?通过色阶或者亮度调整图片亮度时,是通过什么方式(或者是算法)让图片整体看起来变暗了或变亮了?色相调整更有趣,为什么色相环会旋转?是因为三原色,复色,间色的排序吗?色相调整时,颜色不能跳着变化,只能按照色相环上自己相邻的颜色值变化吗?

二. 答案

不请自来。

本人是C#程序员兼Photoshop爱好者。

首先说说我对你的看法,你理解明度、饱和度、色相等概念很困难,一方面固然是从数字世界转到模拟世界的思考方式难以转变,更重要的是,你学习Photoshop还学得太少。

色相环,这个无非是红色,绿色,蓝色三个颜色的16进制值组合出的类似#85b056的颜色系数,我一直觉着这个东西就完完全全唯一指定了颜色,所以无法接受“明度”,“饱和度”,“色相”的概念。

你如果学过数字信号处理或者数字图像处理的话,应该对于理解这个帮助很大。
自然界中,信号都是连续的,也就是模拟量。将模拟量变成数字量要经过“采样——量化——编码”。

重点讲讲量化。

例如某自然界的某种发光物的亮度为189.879977652244...尼特,是一个无限不循环的数,计算机只认识0和1. 要表示这个数必然要经过量化,其中一种可能是四舍五入取整,例如取整为190尼特。(有人可能要抬杠说什么double类型,但是double能表示的小数点后的位数也是有限的,因此依然有精度的损失)

通常来,R、G、B的通道的亮度均用从0-255的数值来表示,这其实就是一个量化的过程。例如将189.879977652244...量化为190。

无非是红色,绿色,蓝色三个颜色的16进制值组合出的类似#85b056的颜色系数。

这种说法是错误的。你指的只是一种特殊情况。即R、G、B都只用8位来编码,也就是256*256*256 ,总共只能表示1677.7万(16 777 216)种颜色。

8+8+8,这叫24位真彩色,或者叫32位真彩色(知道Bitmap类的,应该知道里面还有一个通道是控制不透明度的,也就是8+8+8+8)。

除了8位编码,还有16位编码和32位编码,位数越多,说明量化越精细,损失的颜色越少。16位编码的话,就是48位彩色。

我可不是忽悠大家哦,有图有真相。

所以,只要是数字图像,就一定有颜色损失。

那么什么是无损图片呢?众所周知,.bmp就是一种无损格式,这种无损其实指的是无损编码。“采样,量化,编码”,虽然.bmp格式图像在编码阶段无损,但是在量化阶段依然是有损的。

所以,只要是数字图像,就一定有颜色损失。

你能理解类似#85b056这样的唯一指定了的颜色,但无法接受明度、饱和度、色相,这大概是因为,在你心中,你认为明度、饱和度、色相是模拟量,因为生活中就是如此啊!

程序员能理解数字量,但不能理解模拟量这当然无可非议。我之前也说过,Photoshop里面的颜色有8位编码,还有16位编码,是从模拟量转到数字量,其实颜色在自然界中本身就是模拟量,而不是类似#85b056的颜色。

同样的,明度、饱和度、色相在自然界中也是模拟量,但是在Photoshop里面,它们同样经过了量化,也转成了数字量。

例如:色相量化到0-360里面去了,明度和饱和度都量化到0-100%里面去了,而且不能取45.28%这样的小数,只能取45%。

这说明:和颜色(例如#85b056)一样,明度、饱和度、色相在Photoshop里面同样经过了量化。

那么我们不禁要问,这样的量化是合理的吗?

合理。因为8位编码最多可以表示1677.7万(16 777 216)种颜色,而人眼能分辨的颜色总数大致也就1000多万种,所以8位编码是基本可以复现人眼能感知到的颜色的。

这个弯转过来了,再去理解数字图像调整应该就会容易一些了。

至于你说的:

色阶是什么感念,亮度是什么感念,调整对比度时,图片上每个像素颜色系数怎么变化的?通过色阶或者亮度调整图片亮度时,是通过什么方式(或者是算法)让图片整体看起来变暗了或变亮了?

这些问题,我就懒得回答了,都是基本问题。一言以蔽之,学得太少,或者没有一个好老师。好老师可以是一个言传身教的人,可以是一本好的入门书,也可以是一套好视频。

对了,至于色相环为什么会旋转,这个问题有点意思,在色相中,0和360对应的色相是同一种色相(至于为什么在此不再深究,可从三原色的滤色混合慢慢推导),因为首尾色相相同,自然就可以绕成一个环。旋转的色相环,你的意思大概指的是色轮,因为将色相弄成环形,有些概念更易于解释和记忆,例如邻色、间色、互补色等概念更容易理解了。

当然,色相的呈现也不一定要成,完全可以是以条形展示,例如:

但是在这种条形的表示方法里,色相0和色相360依然是同一种色相。

看你的个人信息,貌似想转UI设计,我给你的建议是学好图层样式
当然,现在扁平化大行其道,UI特效不需要很多,illustrator也是非常有力的工具,而且它的矢量特性决定了它对于不同屏幕适配的适用性会更好。

对于新手,强烈推荐祁连山老师的Photoshop CS3专家讲堂视频系列。(也有CS6的)

还有,基础一定要学得全面又扎实。

我本人写过一篇讲图像处理基本概念的文章——《图像处理技术中的色彩理论简述》,对于初步理解数字图像应该有一定帮助:http://xh6300.sinaapp.com/2015/06/article/98/

============================= 分割线 =============================

我又仔细看了题主的问题补充,感觉要补充一点东西。

题主大概在想,颜色就用#85b056的形式描述不就得了吗?一个数代表一种确定的颜色,多好啊。#85b056要拆分也是拆分成85、b0、56,也就是R、G、B。怎么又蹦出个明度、饱和度、色相?

RGB模型确实显示颜色的本质,然而它最大的缺陷是极不直观。Photoshop毕竟是一款是商用的大众型软件,所以需要一些更直观的概念。

HSB(HSI)模型则是非常符合人的直观感觉的一种描述颜色的方法。色相H在色相环上变动,用红橙黄绿青蓝紫等等。

明度B,值越大越亮,越小越暗 。这是非常符合人的直觉的。

饱和度S我们知道的,饱和度越高,越鲜艳;饱和度为0,则就是黑白图像了。

其实在编程世界里,RGB和HSI的值是可以互相转换的:

那么HSB在Photoshop里面,哪些时候会用到呢?在一些直观的操作里会用到,例如取色板、例如色相/饱和度命令。

但是对于任何图像的像素计算,Photoshop里面都没有HSB的影子,在RGB模式下,都是按照R、G、B的值去计算的,典型的比如混合模式。色阶的话勉强也算,其实色阶也可以分通道调整色阶,那样的话就是纯粹的R、G、B值计算了。

本文转载自:https://www.zhihu.com/question/35200358

共有 人打赏支持
天蚕宝衣
粉丝 20
博文 239
码字总数 179054
作品 0
天津
一篇文章读懂RGB、HSL、Hex 网页色彩值

网页使用到的色彩标示方法中,从古早时期大家都在用的16进位码(#000000)、RGB色值标示、HSL色彩标示,其中网页设计师最常使用的16进位色码标示法,设计师究竟了解多少?而16进位码又是如何计...

半撇私塾
2017/11/11
0
0
Image Representation & Classification(图像表示与分类)

1.Computer Vision Pipeline(计算机视觉管道) 预处理主要是关于标准化数据,比如处理输入图像大小。 Separating Data(分离数据) Images as Grids of Pixels Import resources Read in a...

徐凯_xp
08/12
0
0
颜色空间:RGB,CMY,HSV,HSL,Lab详解

颜色空间(彩色模型、色彩空间、 彩色系统etc)是对色彩的一种描述方式,定义有很多种,区别在于面向不同的应用背景。 例如显示器中采用的RGB颜色空间是基于物体发光定义的(RGB正好对应光的...

li_wen01
2017/06/05
0
0
从0打造一个GPUImage(4)

用容易理解的语言讲一些不太容易理解的概念. 答疑 上一章提了个问题,就是如何写fragment shader绘制 -w200 这样的图像。 现在揭晓一下答案。 ContentMode UIImageView的contentMode经常使用...

叶孤城___
2017/11/20
0
0
sass笔记-4|像写脚本一样写Sass,把能交给Sass办的都交给它

Sass笔记关于sass的基础部分已经写完,这一篇介绍Sass的高级特性——脚本特性。Sass能做很多事让样式表更智能,我们先会看到Sass眼中的数据类型,在这些数据类型上会有可进行的操作,此外,S...

Stinson_Zhao
2016/12/06
147
0

没有更多内容

加载失败,请刷新页面

加载更多

70.shell的函数 数组 告警系统需求分析

20.16/20.17 shell中的函数 20.18 shell中的数组 20.19 告警系统需求分析 20.16/20.17 shell中的函数: ~1. 函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段...

王鑫linux
今天
2
0
分布式框架spring-session实现session一致性使用问题

前言:项目中使用到spring-session来缓存用户信息,保证服务之间session一致性,但是获取session信息为什么不能再服务层获取? 一、spring-session实现session一致性方式 用户每一次请求都会...

WALK_MAN
今天
5
0
C++ yield()与sleep_for()

C++11 标准库提供了yield()和sleep_for()两个方法。 (1)std::this_thread::yield(): 线程调用该方法时,主动让出CPU,并且不参与CPU的本次调度,从而让其他线程有机会运行。在后续的调度周...

yepanl
今天
4
0
Java并发编程实战(chapter_3)(线程池ThreadPoolExecutor源码分析)

这个系列一直没再写,很多原因,中间经历了换工作,熟悉项目,熟悉新团队等等一系列的事情。并发课题对于Java来说是一个又重要又难的一大块,除非气定神闲、精力满满,否则我本身是不敢随便写...

心中的理想乡
今天
34
0
shell学习之获取用户的输入命令read

在运行脚本的时候,命令行参数是可以传入参数,还有就是在脚本运行过程中需要用户输入参数,比如你想要在脚本运行时问个问题,并等待运行脚本的人来回答。bash shell为此提 供了read命令。 ...

woshixin
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部