colour.volume.XYZ_outer_surface#

colour.volume.XYZ_outer_surface(cmfs: MultiSpectralDistributions | None = None, illuminant: SpectralDistribution | None = None, point_order: Literal['Bins', 'Pulse Wave Width'] | str = 'Bins', filter_jagged_points: bool = False, **kwargs: Any) NDArrayFloat[source]#

Generate the Rösch-MacAdam colour solid, i.e. CIE XYZ colourspace outer surface, for given colour matching functions using multi-spectral conversion of pulse waves to CIE XYZ tristimulus values.

Parameters:
  • cmfs (MultiSpectralDistributions | None) – Standard observer colour matching functions, default to the CIE 1931 2 Degree Standard Observer.

  • illuminant (SpectralDistribution | None) – Illuminant spectral distribution, default to CIE Illuminant E.

  • point_order (Literal['Bins', 'Pulse Wave Width'] | str) – Method for ordering the underlying pulse waves used to generate the Rösch-MacAdam colour solid. Bins is the default order, with Pulse Wave Width ordering, instead of iterating over the pulse wave widths first, iteration occurs over the bins, producing blocks of pulse waves with increasing width.

  • filter_jagged_points (bool) –

    Whether to filter the underlying jagged pulses. When point_order is set to Pulse Wave Width, the pulses are ordered by increasing width. Because of the discrete nature of the underlying signal, the resulting pulses will be jagged. For example assuming 5 bins, the center block with the two extreme values added would be as follows:

    0 0 0 0 0
    0 0 1 0 0
    0 0 1 1 0 <--
    0 1 1 1 0
    0 1 1 1 1 <--
    1 1 1 1 1
    

    Setting the filter_jagged_points parameter to True will result in the removal of the two marked pulse waves above thus avoiding jagged lines when plotting and having to resort to excessive bins values.

  • kwargs (Any) – {colour.msds_to_XYZ()}, See the documentation of the previously listed definition.

Returns:

Rösch-MacAdam colour solid, CIE XYZ outer surface tristimulus values.

Return type:

numpy.ndarray

References

[Lin15], [Man18], [MartinezVerduPC+07]

Examples

>>> from colour import MSDS_CMFS, SPECTRAL_SHAPE_DEFAULT
>>> shape = SpectralShape(
...     SPECTRAL_SHAPE_DEFAULT.start, SPECTRAL_SHAPE_DEFAULT.end, 84
... )
>>> cmfs = MSDS_CMFS["CIE 1931 2 Degree Standard Observer"]
>>> XYZ_outer_surface(cmfs.copy().align(shape))  
array([[  0.0000000...e+00,   0.0000000...e+00,   0.0000000...e+00],
       [  9.6361381...e-05,   2.9056776...e-06,   4.4961226...e-04],
       [  2.5910529...e-01,   2.1031298...e-02,   1.3207468...e+00],
       [  1.0561021...e-01,   6.2038243...e-01,   3.5423571...e-02],
       [  7.2647980...e-01,   3.5460869...e-01,   2.1005149...e-04],
       [  1.0971874...e-02,   3.9635453...e-03,   0.0000000...e+00],
       [  3.0792572...e-05,   1.1119762...e-05,   0.0000000...e+00],
       [  2.5920165...e-01,   2.1034203...e-02,   1.3211965...e+00],
       [  3.6471551...e-01,   6.4141373...e-01,   1.3561704...e+00],
       [  8.3209002...e-01,   9.7499113...e-01,   3.5633622...e-02],
       [  7.3745167...e-01,   3.5857224...e-01,   2.1005149...e-04],
       [  1.1002667...e-02,   3.9746651...e-03,   0.0000000...e+00],
       [  1.2715395...e-04,   1.4025439...e-05,   4.4961226...e-04],
       [  3.6481187...e-01,   6.4141663...e-01,   1.3566200...e+00],
       [  1.0911953...e+00,   9.9602242...e-01,   1.3563805...e+00],
       [  8.4306189...e-01,   9.7895467...e-01,   3.5633622...e-02],
       [  7.3748247...e-01,   3.5858336...e-01,   2.1005149...e-04],
       [  1.1099028...e-02,   3.9775708...e-03,   4.4961226...e-04],
       [  2.5923244...e-01,   2.1045323...e-02,   1.3211965...e+00],
       [  1.0912916...e+00,   9.9602533...e-01,   1.3568301...e+00],
       [  1.1021671...e+00,   9.9998597...e-01,   1.3563805...e+00],
       [  8.4309268...e-01,   9.7896579...e-01,   3.5633622...e-02],
       [  7.3757883...e-01,   3.5858626...e-01,   6.5966375...e-04],
       [  2.7020432...e-01,   2.5008868...e-02,   1.3211965...e+00],
       [  3.6484266...e-01,   6.4142775...e-01,   1.3566200...e+00],
       [  1.1022635...e+00,   9.9998888...e-01,   1.3568301...e+00],
       [  1.1021979...e+00,   9.9999709...e-01,   1.3563805...e+00],
       [  8.4318905...e-01,   9.7896870...e-01,   3.6083235...e-02],
       [  9.9668412...e-01,   3.7961756...e-01,   1.3214065...e+00],
       [  3.7581454...e-01,   6.4539130...e-01,   1.3566200...e+00],
       [  1.0913224...e+00,   9.9603645...e-01,   1.3568301...e+00],
       [  1.1022943...e+00,   1.0000000...e+00,   1.3568301...e+00]])