In [1]:
%matplotlib inline
import numpy as np
from __future__ import division
import matplotlib.pyplot as plt
import matplotlib.pylab as pylab
#pylab.rcParams['figure.figsize'] = 4*4, 3*4
pylab.rcParams['axes.grid'] = False
import seaborn as sns
import cv2
print cv2.__version__
import logging
logger = logging.getLogger()
色彩 VS 对比度
人眼与相机的区别:
色偏:物体受环境光影响而产生不自然的色调时,
冷色色偏很少能让人接受,而暧色色偏有时是讨喜的。
补充:显示器修色时,不会注意到色偏;制成印刷品时,才会发现色偏。
同时对比效应(存在背景色时)
色适应:
其他人眼视觉错觉:
迎合人类视错觉:
减少色偏,抑制反光,让主体对象的色彩更丰富,让次要背景变灰。
本书只关注几个造成原稿和修正图间差异的问题:
曲线。
确保完整的阶调范围,突出最重要区域的细节,避免颜色失真。
通道混合。 解决曲线不能解决的某些问题,最典型的用法是修补对比度弱的通道。
锐化。
高光和阴影。
数码相机(不同于底片)为了加强中间调的对比度,会牺牲高光和阴影。高光和阴影变成极端的颜色,失去层次感。
“阴影/高光“命令获得最佳效果 $\gets$ 领会锐化滤镜的基本工作原理。
滥用。
我们总是希望使用曲线可以解决图面问题,除非它确实不够用了,再补充其他命令。
In [2]:
plt.figure(figsize=(20,20))
plt.imshow(plt.imread('./res/color_relation.png'))
Out[2]:
In [3]:
plt.figure(figsize=(20,20))
plt.imshow(plt.imread('./res/rgb_cmyk.jpg'))
Out[3]:
In [4]:
f, axarr = plt.subplots(4, 3, figsize=(20,20))
axarr[0,0].imshow(plt.imread('./res/exp/m.jpg'), cmap = plt.get_cmap('gray'), vmin = 0, vmax = 255)
axarr[0,0].set_title('A')
axarr[0,1].imshow(plt.imread('./res/exp/blue.jpg'), cmap = plt.get_cmap('gray'), vmin = 0, vmax = 255)
axarr[0,1].set_title('B')
axarr[0,2].imshow(plt.imread('./res/exp/k.jpg'), cmap = plt.get_cmap('gray'), vmin = 0, vmax = 255)
axarr[0,2].set_title('C')
axarr[1,0].imshow(plt.imread('./res/exp/a.jpg'), cmap = plt.get_cmap('gray'), vmin = 0, vmax = 255)
axarr[1,0].set_title('D')
axarr[1,1].imshow(plt.imread('./res/exp/l.jpg'), cmap = plt.get_cmap('gray'), vmin = 0, vmax = 255)
axarr[1,1].set_title('E')
axarr[1,2].imshow(plt.imread('./res/exp/red.jpg'), cmap = plt.get_cmap('gray'), vmin = 0, vmax = 255)
axarr[1,2].set_title('F')
axarr[2,0].imshow(plt.imread('./res/exp/green.jpg'), cmap = plt.get_cmap('gray'), vmin = 0, vmax = 255)
axarr[2,0].set_title('G')
axarr[2,1].imshow(plt.imread('./res/exp/c.jpg'), cmap = plt.get_cmap('gray'), vmin = 0, vmax = 255)
axarr[2,1].set_title('H')
axarr[2,2].imshow(plt.imread('./res/exp/b.jpg'), cmap = plt.get_cmap('gray'), vmin = 0, vmax = 255)
axarr[2,2].set_title('J')
axarr[3,0].imshow(plt.imread('./res/exp/y.jpg'), cmap = plt.get_cmap('gray'), vmin = 0, vmax = 255)
axarr[3,0].set_title('K')
Out[4]:
花的叶子一般是绿色。
L 相当于原图的黑白照片,难以确定是 E 还是 F。
a 和 b 只有颜色信息,一般是灰蒙蒙的,所以是 D 和 J。
其中,a 是绿色-品红,叶子细节更详细,所以是 D。
而 b 是蓝色-黄色,叶子应该是中性色,所以是 J。
结合 a 和 b 可知,花中有大量的品红(红+蓝)和黄色(红+绿),所以花的颜色中红色成分有很大占比。
L - ?; a - D; b - J
K 是黑色,一般是骨架轮廓,对比鲜明,所以是 C.
花偏红,R 红光多,C 青色颜料少,所以花的灰值应该偏白,所以是 F 和 H。$\to$ L - E。
一般来说,因为 K 拿走部分对比,所以 CMYK 偏白, RGB 细节和对比更丰富,所以 R - F, C - H。
叶子绿色,所以 G 绿光多 和 M 品红颜料少,第一眼应该是 A 和 K,明暗比较一致。
但仔细观察 K ,其叶子几乎没有对比,特别是观察 y 坐标 0 - 200 图像的浓淡趋势,其实 A 和 G 才是一对。
G 明显比 A 黑很多,所以 G - G, M - A。
花和叶子中蓝色均较少,剩下的 B 和 K 基本都是块状图形,对比很浅,
B 明显较 K 黑,
所以 B - B, Y - K。
总结:
序号 | 颜色分量 |
---|---|
A | M 品红 |
B | B 蓝 |
C | K 黑 |
D | a |
E | L |
F | R 红 |
G | G 绿 |
H | C 青 |
J | b |
K | Y 黄 |
这个测试真得挺难,反复推究几次,对颜色空间的理解会增加不少。
In [5]:
plt.imshow(plt.imread('./res/CD_Fig_1-5_original_color.jpg'))
Out[5]:
In [7]:
f, axarr = plt.subplots(2, 2, figsize=(10,10))
axarr[0,0].imshow(plt.imread('./res/exp1_8/A.jpg'))
axarr[0,0].set_title('A')
axarr[0,1].imshow(plt.imread('./res/exp1_8/B.jpg'))
axarr[0,1].set_title('B')
axarr[1,0].imshow(plt.imread('./res/exp1_8/C.jpg'))
axarr[1,0].set_title('C')
axarr[1,1].imshow(plt.imread('./res/exp1_8/D.jpg'))
axarr[1,1].set_title('D')
Out[7]:
编号 | 模式 | 配比 |
---|---|---|
A | CMYK | C + 0%M + 0%Y + 0%K |
B | RGB | R + 100%G + 100%B |
C | CMYK | C + 50%M + 50%Y + 0%K |
D | RGB | R + 50%G + 50%B |
注:通道灰度调整:Photoshop 里在相应通道,全选图像,然后 Edit - Fill 选择 50% Gray 即可。
理论上说, RGB 和 CMY 是互补色,所以 1.8 A 和 1.8 B 应该是相同的,但观察花,红色通道比青色通道有更多细节。
因为另外两通道是最大值,所以两张图均是蓝绿色,而不显红色。
1.8 C 和 D 分别在通道中加入 50% 灰,花的地方红色大于蓝和绿,显现红色。同理,白色部分红大于蓝绿,也显现红色。而叶子是深绿色,红色较少,低于蓝绿,所以仍然不显红色。(前面说过的色光混合原理)。
最后,观察白色背景部分,CMYK 背景较 RGB 背景偏暧。
In [8]:
f, axarr = plt.subplots(2, 2, figsize=(10,10))
axarr[0,0].imshow(plt.imread('./res/exp1_9/A.jpg'))
axarr[0,0].set_title('A')
axarr[0,1].imshow(plt.imread('./res/exp1_9/B.jpg'))
axarr[0,1].set_title('B')
axarr[1,0].imshow(plt.imread('./res/exp1_9/C.jpg'))
axarr[1,0].set_title('C')
axarr[1,1].imshow(plt.imread('./res/exp1_9/D.jpg'))
axarr[1,1].set_title('D')
Out[8]:
In [9]:
plt.imshow(plt.imread('./res/CD_Fig_1-10_guitarist.jpg'))
Out[9]:
对付严重色偏:通道混合。