def chromatically_adapt(self, whitepoint, whitepoint_name=None, chromatic_adaptation_transform='CAT02'): """ Chromatically adapts the *RGB* colourspace *primaries* :math:`xy` chromaticity coordinates from *RGB* colourspace whitepoint to reference ``whitepoint``. Parameters ---------- whitepoint : array_like Reference illuminant / whitepoint :math:`xy` chromaticity coordinates. whitepoint_name : unicode, optional Reference illuminant / whitepoint name. chromatic_adaptation_transform : unicode, optional **{'CAT02', 'XYZ Scaling', 'Von Kries', 'Bradford', 'Sharp', 'Fairchild', 'CMCCAT97', 'CMCCAT2000', 'CAT02_BRILL_CAT', 'Bianco', 'Bianco PC'}**, *Chromatic adaptation* transform. Returns ------- Chromatically adapted *RGB* colourspace. Examples -------- >>> p = np.array( ... [0.73470, 0.26530, 0.00000, 1.00000, 0.00010, -0.07700]) >>> w_t = np.array([0.32168, 0.33767]) >>> w_r = np.array([0.31270, 0.32900]) >>> colourspace = RGB_Colourspace('RGB Colourspace', p, w_t, 'D65') >>> print(colourspace.chromatically_adapt(w_r, 'D50', 'Bradford')) ... # doctest: +ELLIPSIS RGB Colourspace - Chromatically Adapted to [ 0.3127 0.329 ] ------------------------------------------------------------ <BLANKLINE> Primaries : [[ 0.73485524 0.26422533] [-0.00617091 1.01131496] [ 0.01596756 -0.0642355 ]] Whitepoint : [ 0.3127 0.329 ] Whitepoint Name : D50 Encoding CCTF : None Decoding CCTF : None NPM : None NPM -1 : None Derived NPM : [[ 0.93827985 -0.00445145 0.01662752] [ 0.33736889 0.72952157 -0.06689046] [ 0.00117395 -0.00371071 1.09159451]] Derived NPM -1 : [[ 1.06349549 0.00640891 -0.01580679] [-0.49207413 1.36822341 0.09133709] [-0.00281646 0.00464417 0.91641857]] Use Derived NPM : True Use Derived NPM -1 : True """ colourspace = self.copy() colourspace.primaries = chromatically_adapted_primaries( colourspace.primaries, colourspace.whitepoint, whitepoint, chromatic_adaptation_transform) colourspace.whitepoint = whitepoint colourspace.whitepoint_name = whitepoint_name colourspace._RGB_to_XYZ_matrix = None colourspace._XYZ_to_RGB_matrix = None colourspace._derive_transformation_matrices() colourspace.use_derived_transformation_matrices() colourspace.name = '{0} - Chromatically Adapted to {1}'.format( colourspace.name, whitepoint) return colourspace
def chromatically_adapt( self, whitepoint: ArrayLike, whitepoint_name: Optional[str] = None, chromatic_adaptation_transform: Union[ Literal[ "Bianco 2010", "Bianco PC 2010", "Bradford", "CAT02 Brill 2008", "CAT02", "CAT16", "CMCCAT2000", "CMCCAT97", "Fairchild", "Sharp", "Von Kries", "XYZ Scaling", ], str, ] = "CAT02", ) -> RGB_Colourspace: """ Chromatically adapt the *RGB* colourspace *primaries* :math:`xy` chromaticity coordinates from *RGB* colourspace whitepoint to reference ``whitepoint``. Parameters ---------- whitepoint Reference illuminant / whitepoint :math:`xy` chromaticity coordinates. whitepoint_name Reference illuminant / whitepoint name. chromatic_adaptation_transform *Chromatic adaptation* transform. Returns ------- :class:`colour.RGB_Colourspace` Chromatically adapted *RGB* colourspace. Examples -------- >>> p = np.array( ... [0.73470, 0.26530, 0.00000, 1.00000, 0.00010, -0.07700]) >>> w_t = np.array([0.32168, 0.33767]) >>> w_r = np.array([0.31270, 0.32900]) >>> colourspace = RGB_Colourspace('RGB Colourspace', p, w_t, 'D65') >>> print(colourspace.chromatically_adapt(w_r, 'D50', 'Bradford')) ... # doctest: +ELLIPSIS RGB Colourspace - Chromatically Adapted to 'D50' ------------------------------------------------ <BLANKLINE> Primaries : [[ 0.73485524 0.26422533] [-0.00617091 1.01131496] [ 0.01596756 -0.0642355 ]] Whitepoint : [ 0.3127 0.329 ] Whitepoint Name : D50 Encoding CCTF : None Decoding CCTF : None NPM : None NPM -1 : None Derived NPM : [[ 0.93827985 -0.00445145 0.01662752] [ 0.33736889 0.72952157 -0.06689046] [ 0.00117395 -0.00371071 1.09159451]] Derived NPM -1 : [[ 1.06349549 0.00640891 -0.01580679] [-0.49207413 1.36822341 0.09133709] [-0.00281646 0.00464417 0.91641857]] Use Derived NPM : True Use Derived NPM -1 : True """ colourspace = self.copy() colourspace.primaries = chromatically_adapted_primaries( colourspace.primaries, colourspace.whitepoint, whitepoint, chromatic_adaptation_transform, ) colourspace.whitepoint = whitepoint # type: ignore[assignment] colourspace.whitepoint_name = whitepoint_name colourspace._matrix_RGB_to_XYZ = None colourspace._matrix_XYZ_to_RGB = None colourspace._derive_transformation_matrices() colourspace.use_derived_transformation_matrices() colourspace.name = ( f"{colourspace.name} - Chromatically Adapted to " f"{cast(str, optional(whitepoint_name, whitepoint))!r}" ) return colourspace