def plotDL(ccts = None, cieobs =_CIEOBS, cspace = _CSPACE, axh = None, \ show = True, force_daylight_below4000K = False, cspace_pars = {}, \ formatstr = 'k-', **kwargs): """ Plot daylight locus. Args: :ccts: | None or list[float], optional | None defaults to [4000 K to 1e19 K] in 100 steps on a log10 scale. :force_daylight_below4000K: | False or True, optional | CIE daylight phases are not defined below 4000 K. | If True plot anyway. :axh: | None or axes handle, optional | Determines axes to plot data in. | None: make new figure. :show: | True or False, optional | Invoke matplotlib.pyplot.show() right after plotting :cieobs: | luxpy._CIEOBS or str, optional | Determines CMF set to calculate spectrum locus or other. :cspace: | luxpy._CSPACE or str, optional | Determines color space / chromaticity diagram to plot data in. | Note that data is expected to be in specified :cspace: :formatstr: | 'k-' or str, optional | Format str for plotting (see ?matplotlib.pyplot.plot) :cspace_pars: | {} or dict, optional | Dict with parameters required by color space specified in :cspace: (for use with luxpy.colortf()) :kwargs: | additional keyword arguments for use with matplotlib.pyplot. Returns: :returns: | None (:show: == True) | or | handle to current axes (:show: == False) """ if ccts is None: ccts = 10**np.linspace(np.log10(4000.0),np.log10(10.0**19.0),100.0) xD,yD = daylightlocus(ccts, force_daylight_below4000K = force_daylight_below4000K) Y = 100*np.ones(xD.shape) DL = Yxy_to_xyz(np.vstack((Y, xD,yD)).T) DL = colortf(DL, tf = cspace, tfa0 = cspace_pars) Y,x,y = asplit(DL) axh = plot_color_data(x,y,axh = axh, cieobs = cieobs, cspace = cspace, show=show, formatstr=formatstr, **kwargs) if show == False: return axh
def get_gij_fmc(Yxy, etype = 'fmc2', ellipsoid = True, Y = None, cspace = 'Yxy'): """ Get gij matrices describing the discrimination ellipses/ellipsoids for Yxy or xyz using FMC-1 or FMC-2. Args: :Yxy: | 2D ndarray with [Y,]x,y coordinate centers. | If Yxy.shape[-1]==2: Y is added using the value from the Y-input argument. :etype: | 'fmc2', optional | Type of FMC color discrimination equations to use (see references below). | options: 'fmc1', fmc2' :Y: | None, optional | Only affects FMC-2 (see note below). | If not None: Y = 10.69 and overrides values in Yxy. :ellipsoid: | True, optional | If True: return ellipsoids, else return ellipses (only if cspace == 'Yxy')! :cspace: | 'Yxy', optional | Return coefficients for Yxy-ellipses/ellipsoids ('Yxy') or XYZ ellipsoids ('xyz') Note: 1. FMC-2 is almost identical to FMC-1 is Y = 10.69!; see [2] References: 1. Chickering, K.D. (1967), Optimization of the MacAdam-Modified 1965 Friele Color-Difference Formula, 57(4), p.537-541 2. Chickering, K.D. (1971), FMC Color-Difference Formulas: Clarification Concerning Usage, 61(1), p.118-122 """ if Yxy.shape[-1] == 2: Yxy = np.hstack((100*np.ones((Yxy.shape[0],1)),Yxy)) if Y is not None: Yxy[...,0] = Y xyz = Yxy_to_xyz(Yxy) if etype == 'fmc2': gij = _get_gij_fmc_2(xyz, cspace = cspace) else: gij = _get_gij_fmc_1(xyz, cspace = cspace) if ellipsoid == True: return gij else: if cspace.lower()=='xyz': return gij else: return gij[:,1:,1:]