Skip to main content

颜色模型工具

项目描述

颜色

色彩研究工具。

派皮版本 PyPI 版本 GitHub 星星 下载

不和谐

安装

从 PyPI安装colorio

pip install colorio

光源、观察者、白点

光源 CIE 1931 观察员
import colorio
import matplotlib.pyplot as plt

illu = colorio.illuminants.d65()
plt.plot(illu.lmbda_nm, illu.data)
plt.xlabel("wavelength [nm]")
plt.show()

提供以下光源:

  • 光源 A(“室内灯”,colorio.illuminants.a(resolution_in_nm))
  • 光源 C(已过时,“北天日光”,colorio.illuminants.c())
  • 光源 D(“自然日光”colorio.illuminants.d(nominal_temp)等 colorio.illuminants.d65() )
  • 光源 E(等能量,colorio.illuminants.e())
  • F系列光源(“荧光灯”colorio.illuminants.f2()等)

观察员:

  • CIE 1931 标准 2 度观察者 ( colorio.observers.colorio.observers.cie_1931_2())
  • CIE 1964 标准 10 度观察者 ( colorio.observers.colorio.observers.cie_1964_10())

颜色坐标和空间

颜色坐标被处理为 NumPy 数组或作为ColorCoordinates数据的薄包装器,它保留了颜色空间信息并具有一些方便的辅助方法。颜色空间可以从 中的类实例化 colorio.cs,例如,

import colorio

colorio.cs.CIELAB()

大多数接受这种颜色空间的方法也接受字符串,例如 cielab.

例如,在 OKLAB 中插入两种 sRGB 颜色,并返回 sRGB:

from colorio.cs import ColorCoordinates

# you can also plug in large numpy arrays instead of two lists here
c0 = ColorCoordinates([1.0, 1.0, 0.0], "srgb1")  # yellow
c1 = ColorCoordinates([0.0, 0.0, 1.0], "srgb1")  # blue

# naive interpolation gives [0.5, 0.5, 0.5], a mid gray

# convert to OKLAB
c0.convert("oklab")
c1.convert("oklab")

# interpolate
c2 = (c0 + c1) * 0.5

c2.convert("srgbhex", mode="clip")

print(c2.color_space)
print(c2.data)
<colorio color space sRGB-hex>
#6cabc7

所有色彩空间都实现了这两种方法

vals = colorspace.from_xyz100(xyz)
xyz = colorspace.to_xyz100(vals)

用于从和到 XYZ100 的转换。添加新的色彩空间就像编写一个提供这两种方法的类一样简单。以下色彩空间已经实现:

  • XYZ ( colorio.cs.XYZ(100), 决定缩放的参数)

  • xyY ( , 决定)colorio.cs.XYY(100)缩放的参数Y

  • sRGB ( colorio.cs.SRGBlinear(), colorio.cs.SRGB1(), colorio.cs.SRGB255(), colorio.cs.SRGBhex())

  • HSL 和 HSV ( colorio.cs.HSL(), colorio.cs.HSV()) 这些类有两个方法

    from_srgb1()
    to_srgb1()
    

    用于标准 RGB 的转换。

  • OSA-UCS ( colorio.cs.OsaUcs())

  • CIELAB ( colorio.cs.CIELAB())

  • CIELUV ( colorio.cs.CIELUV())

  • RLAB ( colorio.cs.RLAB())

  • DIN99 及其变体 DIN99{b,c,d} ( colorio.cs.DIN99())

  • ICtCp ( colorio.cs.ICtCp())

  • IPT ( colorio.cs.IPT())

  • CIECAM02 / CAM02-UCS

    import math
    import colorio
    
    ciecam02 = colorio.cs.CIECAM02(0.69, 20, 100)
    cam02 = colorio.cs.CAM02("UCS", 0.69, 20, 100)
    

    该实现包含对 CIECAM02 规范的一些改进(参见 此处)。

  • CAM16 / CAM16-UCS

    import math
    import colorio
    
    cam16 = colorio.cs.CAM16(0.69, 20, 100)
    cam16ucs = colorio.cs.CAM16UCS(0.69, 20, 100)
    

    该实现包含对 CAM16 规范的一些改进(参见此处)。

  • J z a z b z ( colorio.cs.JzAzBz())

  • 奥克拉 ( colorio.cs.OKLAB())

  • 专业实验室 ( colorio.cs.PROLAB())

  • SRLAB2 ( colorio.cs.SRLAB2())

colorio 中的所有方法都是完全矢量化的,即计算速度非常快。

色差公式

colorio 实现了以下色差公式:

  • CIE76
    colorio.diff.cie76(lab1, lab2)
    
  • CIE94
    colorio.diff.cie94(lab1, lab2)
    
  • CIEDE2000
    colorio.diff.ciede2000(lab1, lab2)
    
  • CMC l:c
    colorio.diff.cmc(lab1, lab2)
    

色适应变换

colorio 实现了以下 CAT:

  • 冯·克里斯
    cat, cat_inv = colorio.cat.von_kries(whitepoint_source, whitepoint_destination)
    xyz1 = cat @ xyz0
    
  • 布拉德福德 ( colorio.cat.bradford)
  • 尖锐的 ( colorio.cat.sharp)
  • CMCCAT2000 ( colorio.cat.cmccat2000)
  • CAT02 ( colorio.cat.cat02)
  • 十六类 ( colorio.cat.cat16)
  • 比安科-谢蒂尼 ( colorio.cat.bianco_schettini)

色域可视化

colorio 提供了许多有用的工具来分析和可视化色彩空间。

sRGB色域

CIELAB CAM16-UCS 奥克实验室

sRGB 色域是 sRGB 空间中的完美立方体,在转换为其他颜色空间时会呈现出奇怪的形状。上图显示了不同色彩空间中的 sRGB 色域。

import colorio

p = colorio.plot_rgb_gamut(
    "cielab",  # or colorio.cs.CIELAB()
    n=51,
    show_grid=True,
)
p.show()

如需更多可视化选项,您可以将 sRGB 数据存储在文件中

import colorio

colorio.save_rgb_gamut("srgb.vtk", "cielab", n=51)
# all formats supported by https://github.com/nschloe/meshio

并使用您选择的工具打开它。请参阅 此处了解如何在ParaView中打开文件。

对于 sRGB 色域的亮度切片,使用

import colorio

p = colorio.plot_rgb_slice("cielab", lightness=50.0, n=51)
p.show()
# or
# p.screenshot("screenshot.png")

表面色域

XYZ CIELAB CAM16-UCS

与上述相同,但在给定光源下表面色域可见。

import colorio

illuminant = colorio.illuminants.d65()
observer = colorio.observers.cie_1931_2()

p = colorio.plot_surface_gamut(
    "xyz100",  # or colorio.cs.XYZ(100)
    observer,
    illuminant,
)
p.show()

色域显示为灰色,因为 sRGB 屏幕无论如何都无法显示颜色。

可见色域

xyy JzAzBz 奥克实验室

与上面相同,但可见颜色的色域达到给定的亮度Y。

import colorio

observer = colorio.observers.cie_1931_2()

colorspace = colorio.cs.XYZ(100)

p = colorio.plot_visible_gamut(colorspace, observer, max_Y1=1)
p.show()

色域显示为灰色,因为 sRGB 屏幕无论如何都无法显示颜色。

对于切片,使用

import colorio

plt = colorio.plot_visible_slice("cielab", lightness=0.5)
plt.show()

颜色渐变

使用 colorio,您可以轻松地可视化任何颜色空间的基本颜色渐变。这可能会使色彩空间中的缺陷变得明显,例如众所周知的 CIELAB 和相关空间的蓝色失真。(与下面的色调线性数据进行比较。)

import colorio

plt = colorio.plot_primary_srgb_gradients("cielab")
plt.show()
CIELAB DIN99 OKLAB

实验数据

colorio 包含许多实验数据集,其中一些可用于评估色彩空间的某些属性。大多数数据集也可以可视化。

颜色差异

xyy CIELAB CAM16

来自MacAdam (1974)的色差数据。上图显示了亮度相当的 43 种颜色对。如果面对的线存根在一点相遇,则数据完美匹配。

import colorio

data = colorio.data.MacAdam1974()

cs = colorio.cs.CIELAB

plt = data.plot(cs)
plt.show()
print(colorio.data.MacAdam1974().stress(cs))
24.54774029343344

同样适用于

colorio.data.BfdP()
colorio.data.Leeds()
colorio.data.RitDupont()
colorio.data.Witt()

colorio.data.COMBVD()  # a weighted combination of the above

孟塞尔

xyy CIELAB CAM16

孟塞尔颜色数据可视化

import colorio

cs = colorio.cs.CIELUV
plt = colorio.data.Munsell().plot(cs, V=5)
plt.show()

要以 xyY 格式检索 Munsell 数据,请使用

import colorio

munsell = colorio.data.Munsell()

# munsell.h
# munsell.V
# munsell.C
# munsell.xyy

椭圆

麦克亚当椭圆 (1942)
xyY(在 Y=0.4 时) CIELAB(L=50) CAM16(在 L=50 时)

著名的麦克亚当椭圆(来自这篇文章)可以用

import colorio

cs = colorio.cs.CIELUV
plt = colorio.data.MacAdam1942(50.0).plot(cs)
plt.show()

颜色空间与数据匹配得越好,椭圆越接近相同大小的圆。

罗-里格椭圆
xyy CIELAB CAM16

洛里格也是如此。

import colorio

# xyy = colorio.cs.XYY(100)
# colorio.data.LuoRigg(8).show(xyy, 0.4)
# colorio.data.LuoRigg(8).savefig("luo-rigg-xyy.png", xyy, 0.4)

cieluv = colorio.cs.CIELUV()
plt = colorio.data.LuoRigg(8).plot(cieluv, 50)
plt.show()

色调线性

艾伯纳-仙童
xyy CIELAB CAM16

例如

import colorio

colorspace = colorio.cs.JzAzBz
plt = colorio.data.EbnerFairchild().plot(colorspace)
plt.show()

显示了来自Ebner-Fairchild 实验在某些颜色空间的色调平面中的恒定色调数据。(理想情况下,一组中的所有颜色都排成一行。)

洪伯恩斯

同样对于Hung-Berns:

xyy CIELAB CAM16

注意 CIELAB 和 CAM16 中的深蓝色失真。

import colorio

colorspace = colorio.cs.JzAzBz
plt = colorio.data.HungBerns().plot(colorspace)
plt.show()
肖等人。

肖等人也是如此。:

xyy CIELAB CAM16
import colorio

colorspace = colorio.cs.CIELAB
plt = colorio.data.Xiao().plot(colorspace)
plt.show()

亮度

仙童陈
xyy CIELAB CAM16

Fairchild-Chen的亮度实验。

import colorio

cs = colorio.cs.CIELAB
plt = colorio.data.FairchildChen("SL2").plot(cs)
plt.show()

文章

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

内置分布