Realizar la operación directamente usando las coordenadas de cromaticidad (es decir, tomar el punto medio entre las dos coordenadas de cromaticidad) arrojará resultados incorrectos ya que el diagrama de cromaticidad es altamente no uniforme.
Suponiendo que está utilizando valores de luz lineales, podría realizar la siguiente cadena de cálculos:
Ahora, es probable que esto esté más dedicado a SO, pero podría usar el color para realizar esos cálculos:
% matplotlib inline
import numpy as np
import pylab
import colour
from colour.plotting import *
# Conversion from RGB to chromaticity coordinates.
# Defining RGB values for reference.
RGB_r = np.array([1, 0, 0])
RGB_g = np.array([0, 1, 0])
# We assume they are encoded in *sRGB* colourspace.
XYZ_r = colour.sRGB_to_XYZ(RGB_r, apply_EOCF=False)
XYZ_g = colour.sRGB_to_XYZ(RGB_g, apply_EOCF=False)
# Conversion to chromaticity coordinates.
xy_r = colour.XYZ_to_xy(XYZ_r)
print(xy_r)
# [ 0.64 0.33]
xy_g = colour.XYZ_to_xy(XYZ_g)
print(xy_g)
# [ 0.3 0.6]
# Conversion to CIE xyY in order to maintain Luminance ratios.
# Using sRGB Luminance ratios, second row of the NPM.
xyY_r = [0.64, 0.33, colour.sRGB_COLOURSPACE.RGB_to_XYZ_matrix[1, 0]]
xyY_g = [0.3, 0.6, colour.sRGB_COLOURSPACE.RGB_to_XYZ_matrix[1, 1]]
xy_s = colour.XYZ_to_xy(
colour.sRGB_to_XYZ(
colour.XYZ_to_sRGB(colour.xyY_to_XYZ(xyY_r), apply_OECF=False) +
colour.XYZ_to_sRGB(colour.xyY_to_XYZ(xyY_g), apply_OECF=False)))
print(xy_s)
# [ 0.41930366 0.50525886]
# Plotting.
RGB_colourspaces_CIE_1931_chromaticity_diagram_plot(
('sRGB', ),
bounding_box=(-0.1, 0.9, -0.1, 0.9),
standalone=False)
pylab.plot(xy_r[0], xy_r[1], 'o', markersize=15, color=RGB_r)
pylab.plot(xy_g[0], xy_g[1], 'o', markersize=15, color=RGB_g)
pylab.plot(xy_s[0], xy_s[1], 'o', markersize=15, color=RGB_s)
XYZ_to_RGB
, RGB_to_XYZ
). > Para ser honesto, no entiendo la parte opcional en la que sugiere convertir xy en xyY Al usar solo las coordenadas de cromaticidad, no sabe qué es la Luminancia. Es posible que desee elegir un valor de Luminancia por coordenadas de cromaticidad que preserve las proporciones de la sensibilidad del sistema visual humano al brillo.color
argumento en las tres últimas líneas ( pylab.plot(xy_s[0], xy_s[1], 'o', markersize=15, color=RGB_s)
) a lo que quiera: color='black'
, etc...
mattdm
jeka
Euri Pinhueco
cyan, magenta, yellow
qué estás hablando? sonblue+green, red+blue, red+green
respectivamente?jeka
Euri Pinhueco