#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
ColourCheckers Chromaticity Coordinates
=======================================
Defines *ColourCheckers* chromaticity coordinates in *CIE xyY* colourspace.
Each *ColourChecker* data is in the form of a list of 24 *namedtuples* as
follows::
[('index', 'name', 'x', 'y', 'Y'), ..., ('index', 'name', 'x', 'y', 'Y')]
The following *ColourCheckers* data is available:
- :attr:`BABELCOLOR_AVERAGE`: Average data derived from measurements of 30
*ColourChecker* charts.
- :attr:`COLORCHECKER_2005`: Reference data from *GretagMacbeth* published in
2005.
- :attr:`COLORCHECKER_1976`: *ColourChecker* developed by McCamy et al. at
Macbeth, a Division of Kollmorgen.
See Also
--------
`Colour Fitting IPython Notebook
<http://nbviewer.ipython.org/github/colour-science/colour-ipython/blob/master/notebooks/characterisation/fitting.ipynb>`_ # noqa
References
----------
.. [1] BabelColor. (2012). ColorChecker RGB and spectra. Retrieved from
http://www.babelcolor.com/download/ColorChecker_RGB_and_spectra.xls
.. [2] BabelColor. (2012). The ColorChecker (since 1976!). Retrieved
September 26, 2014, from
http://www.babelcolor.com/main_level/ColorChecker.htm
"""
from __future__ import division, unicode_literals
from collections import namedtuple
from colour.colorimetry import ILLUMINANTS
from colour.utilities import CaseInsensitiveMapping
__author__ = 'Colour Developers'
__copyright__ = 'Copyright (C) 2013 - 2014 - Colour Developers'
__license__ = 'New BSD License - http://opensource.org/licenses/BSD-3-Clause'
__maintainer__ = 'Colour Developers'
__email__ = 'colour-science@googlegroups.com'
__status__ = 'Production'
__all__ = ['ColourChecker_Specification',
'ColourChecker',
'BABELCOLOR_AVERAGE_DATA',
'BABELCOLOR_AVERAGE_ILLUMINANT',
'BABELCOLOR_AVERAGE',
'COLORCHECKER_2005_DATA',
'COLORCHECKER_2005_ILLUMINANT',
'COLORCHECKER_2005',
'COLORCHECKER_1976_DATA',
'COLORCHECKER_1976_ILLUMINANT',
'COLORCHECKER_1976',
'COLOURCHECKERS']
ColourChecker_Specification = namedtuple('ColourChecker_Specification',
('index', 'name', 'x', 'y', 'Y'))
ColourChecker = namedtuple('ColourChecker',
('name', 'data', 'illuminant'))
BABELCOLOR_AVERAGE_DATA = (
(1, 'dark skin', 0.4325, 0.3788, 0.1034),
(2, 'light skin', 0.4191, 0.3748, 0.3525),
(3, 'blue sky', 0.2761, 0.3004, 0.1847),
(4, 'foliage', 0.37, 0.4501, 0.1335),
(5, 'blue flower', 0.302, 0.2877, 0.2324),
(6, 'bluish green', 0.2856, 0.391, 0.4174),
(7, 'orange', 0.5291, 0.4075, 0.3117),
(8, 'purplish blue', 0.2339, 0.2155, 0.114),
(9, 'moderate red', 0.5008, 0.3293, 0.1979),
(10, 'purple', 0.3326, 0.2556, 0.0644),
(11, 'yellow green', 0.3989, 0.4998, 0.4435),
(12, 'orange yellow', 0.4962, 0.4428, 0.4358),
(13, 'blue', 0.204, 0.1696, 0.0579),
(14, 'green', 0.327, 0.5033, 0.2307),
(15, 'red', 0.5709, 0.3298, 0.1268),
(16, 'yellow', 0.4694, 0.4732, 0.6081),
(17, 'magenta', 0.4177, 0.2704, 0.2007),
(18, 'cyan', 0.2151, 0.3037, 0.1903),
(19, 'white 9.5 (.05 D)', 0.3488, 0.3628, 0.9129),
(20, 'neutral 8 (.23 D)', 0.3451, 0.3596, 0.5885),
(21, 'neutral 6.5 (.44 D)', 0.3446, 0.359, 0.3595),
(22, 'neutral 5 (.70 D)', 0.3438, 0.3589, 0.1912),
(23, 'neutral 3.5 (1.05 D)', 0.3423, 0.3576, 0.0893),
(24, 'black 2 (1.5 D)', 0.3439, 0.3565, 0.032))
BABELCOLOR_AVERAGE_ILLUMINANT = ILLUMINANTS.get(
'CIE 1931 2 Degree Standard Observer').get('D50')
"""
*BabelColor Average* illuminant.
BABELCOLOR_AVERAGE_ILLUMINANT : tuple
"""
BABELCOLOR_AVERAGE = [ColourChecker_Specification(*x) for x in
BABELCOLOR_AVERAGE_DATA]
"""
Average data derived from measurements of 30 *ColourChecker* charts.
BABELCOLOR_AVERAGE : list
"""
COLORCHECKER_2005_DATA = (
(1, 'dark skin', 0.4316, 0.3777, 0.1008),
(2, 'light skin', 0.4197, 0.3744, 0.3495),
(3, 'blue sky', 0.276, 0.3016, 0.1836),
(4, 'foliage', 0.3703, 0.4499, 0.1325),
(5, 'blue flower', 0.2999, 0.2856, 0.2304),
(6, 'bluish green', 0.2848, 0.3911, 0.4178),
(7, 'orange', 0.5295, 0.4055, 0.3118),
(8, 'purplish blue', 0.2305, 0.2106, 0.1126),
(9, 'moderate red', 0.5012, 0.3273, 0.1938),
(10, 'purple', 0.3319, 0.2482, 0.0637),
(11, 'yellow green', 0.3984, 0.5008, 0.4446),
(12, 'orange yellow', 0.4957, 0.4427, 0.4357),
(13, 'blue', 0.2018, 0.1692, 0.0575),
(14, 'green', 0.3253, 0.5032, 0.2318),
(15, 'red', 0.5686, 0.3303, 0.1257),
(16, 'yellow', 0.4697, 0.4734, 0.5981),
(17, 'magenta', 0.4159, 0.2688, 0.2009),
(18, 'cyan', 0.2131, 0.3023, 0.193),
(19, 'white 9.5 (.05 D)', 0.3469, 0.3608, 0.9131),
(20, 'neutral 8 (.23 D)', 0.344, 0.3584, 0.5894),
(21, 'neutral 6.5 (.44 D)', 0.3432, 0.3581, 0.3632),
(22, 'neutral 5 (.70 D)', 0.3446, 0.3579, 0.1915),
(23, 'neutral 3.5 (1.05 D)', 0.3401, 0.3548, 0.0883),
(24, 'black 2 (1.5 D)', 0.3406, 0.3537, 0.0311))
COLORCHECKER_2005_ILLUMINANT = ILLUMINANTS.get(
'CIE 1931 2 Degree Standard Observer').get('D50')
"""
*ColorChecker 2005* illuminant.
COLORCHECKER_2005_ILLUMINANT : tuple
"""
COLORCHECKER_2005 = [ColourChecker_Specification(*x) for x in
COLORCHECKER_2005_DATA]
"""
Reference data from GretagMacbeth (2005).
COLORCHECKER_2005 : list
"""
COLORCHECKER_1976_DATA = (
(1, 'dark skin', 0.4002, 0.3504, 0.1005),
(2, 'light skin', 0.3773, 0.3446, 0.3582),
(3, 'blue sky', 0.247, 0.2514, 0.1933),
(4, 'foliage', 0.3372, 0.422, 0.1329),
(5, 'blue flower', 0.2651, 0.24, 0.2427),
(6, 'bluish green', 0.2608, 0.343, 0.4306),
(7, 'orange', 0.506, 0.407, 0.3005),
(8, 'purplish blue', 0.211, 0.175, 0.12),
(9, 'moderate red', 0.4533, 0.3058, 0.1977),
(10, 'purple', 0.2845, 0.202, 0.0656),
(11, 'yellow green', 0.38, 0.4887, 0.4429),
(12, 'orange yellow', 0.4729, 0.4375, 0.4306),
(13, 'blue', 0.1866, 0.1285, 0.0611),
(14, 'green', 0.3046, 0.4782, 0.2339),
(15, 'red', 0.5385, 0.3129, 0.12),
(16, 'yellow', 0.448, 0.4703, 0.591),
(17, 'magenta', 0.3635, 0.2325, 0.1977),
(18, 'cyan', 0.1958, 0.2519, 0.1977),
(19, 'white 9.5 (.05 D)', 0.3101, 0.3163, 0.9001),
(20, 'neutral 8 (.23 D)', 0.3101, 0.3163, 0.591),
(21, 'neutral 6.5 (.44 D)', 0.3101, 0.3163, 0.362),
(22, 'neutral 5 (.70 D)', 0.3101, 0.3163, 0.1977),
(23, 'neutral 3.5 (1.05 D)', 0.3101, 0.3163, 0.09),
(24, 'black 2 (1.5 D)', 0.3101, 0.3163, 0.0313))
COLORCHECKER_1976_ILLUMINANT = ILLUMINANTS.get(
'CIE 1931 2 Degree Standard Observer').get('C')
"""
*ColorChecker 1976* illuminant.
COLORCHECKER_1976_ILLUMINANT : tuple
"""
COLORCHECKER_1976 = [ColourChecker_Specification(*x) for x in
COLORCHECKER_1976_DATA]
"""
*ColourChecker* developed by McCamy et al. at Macbeth, a Division of
Kollmorgen.
COLORCHECKER_1976 : list
"""
COLOURCHECKERS = CaseInsensitiveMapping(
{'BabelColor Average': ColourChecker('BabelColor Average',
BABELCOLOR_AVERAGE,
BABELCOLOR_AVERAGE_ILLUMINANT),
'ColorChecker 2005': ColourChecker('ColorChecker 2005',
COLORCHECKER_2005,
COLORCHECKER_2005_ILLUMINANT),
'ColorChecker 1976': ColourChecker('ColorChecker 1976',
COLORCHECKER_1976,
COLORCHECKER_1976_ILLUMINANT)})
"""
Aggregated *ColourCheckers* chromaticity coordinates.
COLOURCHECKERS : CaseInsensitiveMapping
{'BabelColor Average', 'ColorChecker 2005', 'ColorChecker 1976'}
Aliases:
- 'babel_average': 'BabelColor Average'
- 'cc2005': 'ColorChecker 2005'
"""
COLOURCHECKERS['babel_average'] = COLOURCHECKERS['BabelColor Average']
COLOURCHECKERS['cc2005'] = COLOURCHECKERS['ColorChecker 2005']