Loading...
墨滴

张春成

2021/06/28  阅读:52  主题:默认主题

图解颜色空间

图解颜色空间

不知道你是否和我一样,对颜色空间的形状有些好奇。 它之所谓是个“舌头”的形状,是与眼睛感光的机制有关。 本文将进行适当图解。


感光与波长

眼前感觉光的颜色,与其波长有关,可以用下图表示

dist.png
dist.png

可以看到,红、绿和蓝三种原色与光的波长具有对应关系。

将这种关系画到三维空间中,可得下图

dist_3d.png
dist_3d.png

将下图稍微扭转,并对中心进行填充,便可得一般使用的“颜色舌形图”

dist_tonque.png
dist_tonque.png

图中的轮廓,与三维空间中的包络线是一致的,只不过是画在二维空间中。 其上点的数字,代表光的波长,可以借助三张图来理解。

模拟代码

计算过程使用python代码,可以参考我的GITHUB仓库[1]

由于本计算过程较为简单,我们直接列出如下。

  • 引用的包
import numpy as np
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
from scipy.stats import norm
from tqdm.auto import tqdm
  • 基本参数设置
wave_length_range = (360700)
wave_length = dict(
    red=565,
    green=530,
    blue=445
)
heights = [111# [0.65, 0.4, 0.3]
num=1000
  • 自定义工具
def rgb2str(rgb):
    return '#' + ''.join([hex(e).replace('x''')[-2:] for e in rgb])
  • 计算模拟
# Compute X-axis
xaxis = np.linspace(wave_length_range[0], wave_length_range[1], num=num, endpoint=False)
xaxis.shape

# Compute Distribution of the WaveForm across RGB Colors
dists = np.array([
    norm.pdf((xaxis-wave_length['red'])/30),
    norm.pdf((xaxis-wave_length['green'])/30),
    norm.pdf((xaxis-wave_length['blue'])/20)
])

dists = dists / np.max(dists, axis=1, keepdims=True)
for j in range(3):
    dists[j] = dists[j] * heights[j]

dists.shape

# Build DataFrame
colors = []
colors_raw = []
for x in tqdm(dists.transpose()):
    x = x / np.max(dists)
    x = (x * 255).astype(np.int16)
    colors_raw.append(x)
    colors.append(rgb2str(x))
colors

df = pd.DataFrame()
df['xaxis'] = xaxis
df['y'] = xaxis * 0 + 1
df['color'] = colors
df[['red''green''blue']] = colors_raw
df

# Draw WaveLengh Plot
fig = px.line(x=xaxis, y=[e for e in dists], title='RGB WaveLength')

for d, n in zip(fig.data, wave_length):
    d['name'] = n
    d['line']['color'] = n

fig.add_trace(go.Scatter(
    x=xaxis,
    y=xaxis * 0 + 1.3,
    mode='markers',
    marker={'color': colors}
))

fig.show()

参考资料

[1]

GITHUB仓库: https://github.com/listenzcc/JupyterScripts.git

张春成

2021/06/28  阅读:52  主题:默认主题

作者介绍

张春成