|
【十】上图不需要额外的证明,它就是前面试验中 HS* 空间的纯色相属性轮转一周所观察到的 RGB 值的六段变化规律在 RGB 空间中描画出来,是同一个事实的另一种描述方式。也就是 HS* 空间色相属性周期变化时,颜色在 RGB 空间的变化轨迹。
注意 RGB 颜色空间立方体,以及颜色空间内部的立方体具有同样的几何特性,它是八个顶点,十二条边和六个面构成的正六面体,十二条边中有六条不接触主对角线,上面的轨迹就是这六条边连成的一条不共面扭曲折线,我们把 RGB 颜色空间颜色点沿折线运动所对应的色相变化标在上面。这是一种 RGB 与 HS* 空间属性的映射关系。内部立方体的八个顶点分别是三基色、三补色加上黑、白,内部立方体各边对应的 RGB 值关系标在图上。在每条边上,三个基色通道色阶值的相对大小关系相同,各边之间则不同,对应三个通道色阶值排序的六种组合。在每个顶点,折线的走向发生转折,也就是通道色阶值的变化趋势发生转折——即三个基色通道中色阶值随色相轮转而变的通道在不同边之间发生了“接力”交换,因此颜色在 RGB 颜色空间中的变化方向发生转折。
这个折线在 RGB 空间转换 HS* 中作用十分重要,其它的重要属性几乎都可以以它为基础推证出来,这里不做具体证明,想要最严格的证明只要用立体解析几何就可以,是实际上立方体中的对称关系十分丰富,概念一目了然,很多证明都不必要了。
下图中左上是另一个重要空间关系,称为“等色相面”,它与前面折线的性质刚好相反,折线是只有色相变,HS* 其他属性不变,等色相面是其他属性都变,只有色相不变的颜色变化在 RGB 空间的变化轨迹。它是一个平面,看图就不用语言描述了。实际上这是等色相与反色相共同拥有的平面。
图中右下称为“等去色面”,“色相/饱和度”中命令“饱和度”属性变化的结果,映射到 RGB 空间就是颜色在这组平面上运动。它是六个三角形拼成的不共面曲折面。有了基本属性的轨迹映射关系,HS* 颜色空间属性变量与 RGB 空间属性变量的映射就基本完整了。
上述这些关系通过立体直观都是十分明显的空间点、线、面关系,我相形对属于“艺术细胞”的朋友想象起来会比我容易得多,准确得多,因此图在就不需多解释了。因这完全属于形象思维的范畴,我是不擅长的。还有前面一直没有提一句关于 HSB(姑且将 HSB 作为各种 HS* 的代表)颜色空间的形状,这好象也不用说了,基础教科书在转向讲解 HSB 颜色空间时都说过。

【十一】上面“四方联”中还有两个标记“等色性体”的图,是结合日前红火的那个调整灰暗颜色帖子,其中涉及一些方法与 RGB 颜色空间属性的概念有关。这个概念称为“等色性体”,也就是 RGB 空间中 r、g、b 属性满足一定大中小顺序关系的局部空间,因为大中小关系是六种所以肯定等色性体有六个。看图。果真是六个,每个“吃”住扭曲折线的一条边。
每个等色性体是一个不规则四面体,例如第一个等色性体占据的顶点是黑、红、黄、白,其中颜色是明暗不等的红橙黄,最亮可以到白最暗到黑。直观的很还是不需多解释。自己可以试把各个等色性体分别画出来。六个等色性体是形状完全相同的空间立体,六个正好精确的拼成立方体。
还有一个图是调色帖中改进算法对应的色相范围(在 RGB 空间中映射为 R、G、B 颜色条件)。我们说过它的条件是 R > G > b 与 2*R > G > R > B 的合集,在 RGB 颜色空间中就是第一个等色性体与第二个等色性体前一半的拼合。两者都是 RGB 空间的四面体,本来八个面,一对重合抵消,一对共面合成一个,剩下的是不规则五面体(四棱锥)。自己想象一下,四个这样相同形状的四棱锥正好纹丝不差的拼满整个立方体。
那么大家一定要问,那么到底 RGB 与 HSB 属性变量转换的数学公式是什么。因为在上面的分析中我们看到,几乎所有的属性映射都市分段的,那么可想而知,RGB 与 HSB 的转换公式也不可能是一个简单的单一函数,它是分段描述,分条件计算的。实际上它与其说一个公式更适合用一小段程序的形式描述,基本上不是计算而是逻辑判断。我感觉用图示更能表示清楚——事实上前面几张土中已经可以概括出两个颜色空间属性坐标的转换关系了。
同样的功能函数可以写成很多等价的形式,用类 JScript 语句写可以写成下面样子。这是 HSB -> RGB 的转换函数,是早期从类 C 格式转写的(比较简洁的形式),关键就是最后一个长语句,前面的都是铺垫。这个函数基本上可以直接在网页中调用。
function hsv2rgb(h, s, v) { if (s == 0) { if (h == null) return [v, v, v]; else return null; } else { if (h == 360) h = 0; h /= 60; var i= Math.floor(h); var f= h - i; var p= v * (1 - s); var q= v * (1 - (s*f)); var t= v * (1 - (s * (1-f))); return [[v,t,p], [q,v,p], [p,v,t], [p,q,v], [t,p,v], [v,p,q]][i]; } }
【十二】从开始对 HS* 与 RGB 颜色空间的问题发生疑问和兴趣,到得到基本清晰的理解,我断断续续用了两年时间。中间不断被其他问题涉及到而想起,前后有不下十篇笔记,至少十多万字篇幅讨论相关内容,在正确与错误、理解与不理解之间颠倒反复。困难的是没有相关资料,没有人讨论,甚至没有用来描述现象和规律的概念,基本是一个盲区。理论的资料不少但是纯粹抽象的理论(网上流传的理论内容也有大量讹误,难讲是正确部分多还是错误部分多),不会有人结合到 PhotoShop 具体使用中的复杂变化,而 PhotoShop 的资料又不涉及正规理论。
想把 Adobe 藏起来的东西挖掘出来,还真是够刺激。
上面内容是笔记主要部分,与大家探讨切磋,欢迎质疑、批评、指正。因为颜色空间理论的基础地位,这个问题涉及的范围极其广泛,无论在哪个方向上稍加深入,不是一本书也是半本书,而且恐怕会把 PhotoShop 中所有主要内容的问题全勾连进来。为把一个问题说清楚,不能不人为划定一个界限,到此止步不再深入。写这篇东西也一样,不是教程而是讨论,但是我相信对于擅长形象思维的艺类朋友来说,这次不会说想不通了吧。
【完】
|