37#ifndef VIGRA_COLORCONVERSIONS_HXX
38#define VIGRA_COLORCONVERSIONS_HXX
42#include "mathutil.hxx"
43#include "rgbvalue.hxx"
44#include "functortraits.hxx"
51template<
class ValueType>
52inline ValueType gammaCorrection(
double value,
double gamma)
54 typedef typename NumericTraits<ValueType>::RealPromote Promote;
55 return NumericTraits<ValueType>::fromRealPromote(
56 RequiresExplicitCast<Promote>::cast(
58 ? -std::pow(-value,
gamma)
59 : std::pow(value,
gamma)));
62template<
class ValueType>
63inline ValueType gammaCorrection(
double value,
double gamma,
double norm)
65 typedef typename NumericTraits<ValueType>::RealPromote Promote;
66 return NumericTraits<ValueType>::fromRealPromote(
67 RequiresExplicitCast<Promote>::cast(
73template<
class ValueType>
74inline ValueType sRGBCorrection(
double value,
double norm)
77 typedef typename NumericTraits<ValueType>::RealPromote Promote;
78 return NumericTraits<ValueType>::fromRealPromote(
79 RequiresExplicitCast<Promote>::cast(
82 :
norm*(1.055*std::pow(value, 0.41666666666666667) - 0.055)));
85template<
class ValueType>
86inline ValueType inverse_sRGBCorrection(
double value,
double norm)
89 typedef typename NumericTraits<ValueType>::RealPromote Promote;
90 return NumericTraits<ValueType>::fromRealPromote(
91 RequiresExplicitCast<Promote>::cast(
94 :
norm*VIGRA_CSTD::pow((value + 0.055)/1.055, 2.4)));
276template <
class From,
class To = From>
317 detail::gammaCorrection<To>(
rgb[0], 0.45, max_),
318 detail::gammaCorrection<To>(
rgb[1], 0.45, max_),
319 detail::gammaCorrection<To>(
rgb[2], 0.45, max_));
322 static std::string targetColorSpace()
332class RGB2RGBPrimeFunctor<unsigned char, unsigned char>
334 unsigned char lut_[256];
342 typedef TinyVector<unsigned char, 3>
value_type;
346 for(
int i=0; i<256; ++i)
348 lut_[i] = detail::gammaCorrection<unsigned char>(i, 0.45, 255.0);
354 for(
int i=0; i<256; ++i)
356 lut_[i] = detail::gammaCorrection<unsigned char>(i, 0.45, max);
361 TinyVector<unsigned char, 3>
operator()(V
const & rgb)
const
363 return TinyVector<unsigned char, 3>(lut_[rgb[0]], lut_[rgb[1]], lut_[rgb[2]]);
366 static std::string targetColorSpace()
372template <
class From,
class To>
373class FunctorTraits<RGB2RGBPrimeFunctor<From, To> >
374:
public FunctorTraitsBase<RGB2RGBPrimeFunctor<From, To> >
377 typedef VigraTrueType isUnaryFunctor;
404template <
class From,
class To = From>
445 detail::sRGBCorrection<To>(
rgb[0], max_),
446 detail::sRGBCorrection<To>(
rgb[1], max_),
447 detail::sRGBCorrection<To>(
rgb[2], max_));
450 static std::string targetColorSpace()
460class RGB2sRGBFunctor<unsigned char, unsigned char>
462 unsigned char lut_[256];
470 typedef TinyVector<unsigned char, 3>
value_type;
474 for(
int i=0; i<256; ++i)
476 lut_[i] = detail::sRGBCorrection<unsigned char>(i, 255.0);
482 for(
int i=0; i<256; ++i)
484 lut_[i] = detail::sRGBCorrection<unsigned char>(i, max);
489 TinyVector<unsigned char, 3>
operator()(V
const & rgb)
const
491 return TinyVector<unsigned char, 3>(lut_[rgb[0]], lut_[rgb[1]], lut_[rgb[2]]);
494 static std::string targetColorSpace()
500template <
class From,
class To>
501class FunctorTraits<RGB2sRGBFunctor<From, To> >
502:
public FunctorTraitsBase<RGB2sRGBFunctor<From, To> >
505 typedef VigraTrueType isUnaryFunctor;
529template <
class From,
class To = From>
554 : max_(255.0), gamma_(1.0/0.45)
561 : max_(max), gamma_(1.0/0.45)
569 detail::gammaCorrection<To>(
rgb[0], gamma_, max_),
570 detail::gammaCorrection<To>(
rgb[1], gamma_, max_),
571 detail::gammaCorrection<To>(
rgb[2], gamma_, max_));
574 static std::string targetColorSpace()
585class RGBPrime2RGBFunctor<unsigned char, unsigned char>
587 unsigned char lut_[256];
595 typedef TinyVector<unsigned char, 3>
value_type;
599 for(
int i=0; i<256; ++i)
601 lut_[i] = detail::gammaCorrection<unsigned char>(i, 1.0/0.45, 255.0);
607 for(
int i=0; i<256; ++i)
609 lut_[i] = detail::gammaCorrection<unsigned char>(i, 1.0/0.45, max);
614 TinyVector<unsigned char, 3>
operator()(V
const & rgb)
const
616 return TinyVector<unsigned char, 3>(lut_[rgb[0]], lut_[rgb[1]], lut_[rgb[2]]);
619 static std::string targetColorSpace()
625template <
class From,
class To>
626class FunctorTraits<RGBPrime2RGBFunctor<From, To> >
627:
public FunctorTraitsBase<RGBPrime2RGBFunctor<From, To> >
630 typedef VigraTrueType isUnaryFunctor;
657template <
class From,
class To = From>
697 detail::inverse_sRGBCorrection<To>(
rgb[0], max_),
698 detail::inverse_sRGBCorrection<To>(
rgb[1], max_),
699 detail::inverse_sRGBCorrection<To>(
rgb[2], max_));
702 static std::string targetColorSpace()
712class sRGB2RGBFunctor<unsigned char, unsigned char>
714 unsigned char lut_[256];
722 typedef TinyVector<unsigned char, 3>
value_type;
726 for(
int i=0; i<256; ++i)
728 lut_[i] = detail::inverse_sRGBCorrection<unsigned char>(i, 255.0);
734 for(
int i=0; i<256; ++i)
736 lut_[i] = detail::inverse_sRGBCorrection<unsigned char>(i, max);
741 TinyVector<unsigned char, 3>
operator()(V
const & rgb)
const
743 return TinyVector<unsigned char, 3>(lut_[rgb[0]], lut_[rgb[1]], lut_[rgb[2]]);
746 static std::string targetColorSpace()
752template <
class From,
class To>
753class FunctorTraits<sRGB2RGBFunctor<From, To> >
754:
public FunctorTraitsBase<sRGB2RGBFunctor<From, To> >
757 typedef VigraTrueType isUnaryFunctor;
826 typedef detail::RequiresExplicitCast<component_type>
Convert;
831 result[0] = Convert::cast(0.412453*red + 0.357580*green + 0.180423*blue);
832 result[1] = Convert::cast(0.212671*red + 0.715160*green + 0.072169*blue);
833 result[2] = Convert::cast(0.019334*red + 0.119193*green + 0.950227*blue);
837 static std::string targetColorSpace()
847class FunctorTraits<RGB2XYZFunctor<T> >
848:
public FunctorTraitsBase<RGB2XYZFunctor<T> >
851 typedef VigraTrueType isUnaryFunctor;
904 : gamma_(1.0/ 0.45), max_(max)
911 typedef detail::RequiresExplicitCast<component_type>
Convert;
912 component_type red = detail::gammaCorrection<component_type>(
rgb[0]/max_, gamma_);
913 component_type green = detail::gammaCorrection<component_type>(
rgb[1]/max_, gamma_);
914 component_type blue = detail::gammaCorrection<component_type>(
rgb[2]/max_, gamma_);
916 result[0] = Convert::cast(0.412453*red + 0.357580*green + 0.180423*blue);
917 result[1] = Convert::cast(0.212671*red + 0.715160*green + 0.072169*blue);
918 result[2] = Convert::cast(0.019334*red + 0.119193*green + 0.950227*blue);
922 static std::string targetColorSpace()
933class FunctorTraits<RGBPrime2XYZFunctor<T> >
934:
public FunctorTraitsBase<RGBPrime2XYZFunctor<T> >
937 typedef VigraTrueType isUnaryFunctor;
1003 typedef detail::RequiresExplicitCast<component_type>
Convert;
1007 return value_type(NumericTraits<T>::fromRealPromote(red * max_),
1008 NumericTraits<T>::fromRealPromote(green * max_),
1009 NumericTraits<T>::fromRealPromote(blue * max_));
1012 static std::string targetColorSpace()
1019class FunctorTraits<XYZ2RGBFunctor<T> >
1020:
public FunctorTraitsBase<XYZ2RGBFunctor<T> >
1023 typedef VigraTrueType isUnaryFunctor;
1080 : gamma_(0.45), max_(max)
1088 typedef detail::RequiresExplicitCast<component_type>
Convert;
1092 return value_type(NumericTraits<T>::fromRealPromote(detail::gammaCorrection<component_type>(red, gamma_) * max_),
1093 NumericTraits<T>::fromRealPromote(detail::gammaCorrection<component_type>(green, gamma_) * max_),
1094 NumericTraits<T>::fromRealPromote(detail::gammaCorrection<component_type>(blue, gamma_) * max_));
1097 static std::string targetColorSpace()
1104class FunctorTraits<XYZ2RGBPrimeFunctor<T> >
1105:
public FunctorTraitsBase<XYZ2RGBPrimeFunctor<T> >
1108 typedef VigraTrueType isUnaryFunctor;
1167 kappa_(24389.0/27.0),
1168 epsilon_(216.0/24389.0)
1175 if(
xyz[1] == NumericTraits<T>::zero())
1177 result[0] = NumericTraits<component_type>::zero();
1178 result[1] = NumericTraits<component_type>::zero();
1179 result[2] = NumericTraits<component_type>::zero();
1183 typedef detail::RequiresExplicitCast<component_type> Convert;
1187 : 116.0 * VIGRA_CSTD::pow((double)xyz[1], gamma_) - 16.0);
1188 component_type denom = Convert::cast(xyz[0] + 15.0*xyz[1] + 3.0*xyz[2]);
1192 result[1] = Convert::cast(13.0*L*(uprime - 0.197839));
1193 result[2] = Convert::cast(13.0*L*(vprime - 0.468342));
1198 static std::string targetColorSpace()
1204 double gamma_, kappa_, epsilon_;
1208class FunctorTraits<XYZ2LuvFunctor<T> >
1209:
public FunctorTraitsBase<XYZ2LuvFunctor<T> >
1212 typedef VigraTrueType isUnaryFunctor;
1249 ikappa_(27.0/24389.0)
1258 if(
luv[0] == NumericTraits<T>::zero())
1260 result[0] = NumericTraits<component_type>::zero();
1261 result[1] = NumericTraits<component_type>::zero();
1262 result[2] = NumericTraits<component_type>::zero();
1266 typedef detail::RequiresExplicitCast<component_type>
Convert;
1270 result[1] = Convert::cast(
1273 : VIGRA_CSTD::pow((
luv[0] + 16.0) / 116.0, gamma_));
1274 result[0] = Convert::cast(9.0*
uprime*result[1] / 4.0 /
vprime);
1275 result[2] = Convert::cast(((9.0 /
vprime - 15.0)*result[1] - result[0])/ 3.0);
1280 static std::string targetColorSpace()
1286 double gamma_, ikappa_;
1290class FunctorTraits<Luv2XYZFunctor<T> >
1291:
public FunctorTraitsBase<Luv2XYZFunctor<T> >
1294 typedef VigraTrueType isUnaryFunctor;
1350 kappa_(24389.0/27.0),
1351 epsilon_(216.0/24389.0)
1359 typedef detail::RequiresExplicitCast<component_type>
Convert;
1366 : 116.0 *
ygamma - 16.0);
1374 static std::string targetColorSpace()
1380 double gamma_, kappa_, epsilon_;
1384class FunctorTraits<XYZ2LabFunctor<T> >
1385:
public FunctorTraitsBase<XYZ2LabFunctor<T> >
1388 typedef VigraTrueType isUnaryFunctor;
1427 ikappa_(27.0/24389.0)
1435 typedef detail::RequiresExplicitCast<component_type>
Convert;
1439 : std::pow((
lab[0] + 16.0) / 116.0, gamma_));
1450 static std::string targetColorSpace()
1456 double gamma_, ikappa_;
1460class FunctorTraits<Lab2XYZFunctor<T> >
1461:
public FunctorTraitsBase<Lab2XYZFunctor<T> >
1464 typedef VigraTrueType isUnaryFunctor;
1540 return xyz2luv(rgb2xyz(
rgb));
1543 static std::string targetColorSpace()
1549 RGB2XYZFunctor<T> rgb2xyz;
1550 XYZ2LuvFunctor<component_type> xyz2luv;
1554class FunctorTraits<RGB2LuvFunctor<T> >
1555:
public FunctorTraitsBase<RGB2LuvFunctor<T> >
1558 typedef VigraTrueType isUnaryFunctor;
1634 return xyz2lab(rgb2xyz(
rgb));
1637 static std::string targetColorSpace()
1643 RGB2XYZFunctor<T> rgb2xyz;
1644 XYZ2LabFunctor<component_type> xyz2lab;
1648class FunctorTraits<RGB2LabFunctor<T> >
1649:
public FunctorTraitsBase<RGB2LabFunctor<T> >
1652 typedef VigraTrueType isUnaryFunctor;
1669 typedef typename NumericTraits<T>::RealPromote component_type;
1702 return xyz2rgb(luv2xyz(
luv));
1705 static std::string targetColorSpace()
1712class FunctorTraits<Luv2RGBFunctor<T> >
1713:
public FunctorTraitsBase<Luv2RGBFunctor<T> >
1716 typedef VigraTrueType isUnaryFunctor;
1733 typedef typename NumericTraits<T>::RealPromote component_type;
1773 return xyz2rgb(lab2xyz(
lab));
1776 static std::string targetColorSpace()
1783class FunctorTraits<Lab2RGBFunctor<T> >
1784:
public FunctorTraitsBase<Lab2RGBFunctor<T> >
1787 typedef VigraTrueType isUnaryFunctor;
1856 return xyz2luv(rgb2xyz(
rgb));
1859 static std::string targetColorSpace()
1865 RGBPrime2XYZFunctor<T> rgb2xyz;
1866 XYZ2LuvFunctor<component_type> xyz2luv;
1870class FunctorTraits<RGBPrime2LuvFunctor<T> >
1871:
public FunctorTraitsBase<RGBPrime2LuvFunctor<T> >
1874 typedef VigraTrueType isUnaryFunctor;
1943 return xyz2lab(rgb2xyz(
rgb));
1946 static std::string targetColorSpace()
1952 RGBPrime2XYZFunctor<T> rgb2xyz;
1953 XYZ2LabFunctor<component_type> xyz2lab;
1957class FunctorTraits<RGBPrime2LabFunctor<T> >
1958:
public FunctorTraitsBase<RGBPrime2LabFunctor<T> >
1961 typedef VigraTrueType isUnaryFunctor;
1978 typedef typename NumericTraits<T>::RealPromote component_type;
2018 return xyz2rgb(luv2xyz(
luv));
2021 static std::string targetColorSpace()
2028class FunctorTraits<Luv2RGBPrimeFunctor<T> >
2029:
public FunctorTraitsBase<Luv2RGBPrimeFunctor<T> >
2032 typedef VigraTrueType isUnaryFunctor;
2049 typedef typename NumericTraits<T>::RealPromote component_type;
2089 return xyz2rgb(lab2xyz(
lab));
2092 static std::string targetColorSpace()
2099class FunctorTraits<Lab2RGBPrimeFunctor<T> >
2100:
public FunctorTraitsBase<Lab2RGBPrimeFunctor<T> >
2103 typedef VigraTrueType isUnaryFunctor;
2185 typedef detail::RequiresExplicitCast<component_type>
Convert;
2191 result[0] = Convert::cast(0.299*red + 0.587*green + 0.114*blue);
2192 result[1] = Convert::cast(-0.1687358916*red - 0.3312641084*green + 0.5*blue);
2193 result[2] = Convert::cast(0.5*red - 0.4186875892*green - 0.0813124108*blue);
2197 static std::string targetColorSpace()
2207class FunctorTraits<RGBPrime2YPrimePbPrFunctor<T> >
2208:
public FunctorTraitsBase<RGBPrime2YPrimePbPrFunctor<T> >
2211 typedef VigraTrueType isUnaryFunctor;
2267 typedef detail::RequiresExplicitCast<component_type>
Convert;
2272 NumericTraits<T>::fromRealPromote(
ngreen * max_),
2273 NumericTraits<T>::fromRealPromote(
nblue * max_));
2276 static std::string targetColorSpace()
2283class FunctorTraits<YPrimePbPr2RGBPrimeFunctor<T> >
2284:
public FunctorTraitsBase<YPrimePbPr2RGBPrimeFunctor<T> >
2287 typedef VigraTrueType isUnaryFunctor;
2368 typedef detail::RequiresExplicitCast<component_type>
Convert;
2374 result[0] = Convert::cast(0.299*red + 0.587*green + 0.114*blue);
2375 result[1] = Convert::cast(0.596*red - 0.274*green - 0.322*blue);
2376 result[2] = Convert::cast(0.212*red - 0.523*green + 0.311*blue);
2380 static std::string targetColorSpace()
2390class FunctorTraits<RGBPrime2YPrimeIQFunctor<T> >
2391:
public FunctorTraitsBase<RGBPrime2YPrimeIQFunctor<T> >
2394 typedef VigraTrueType isUnaryFunctor;
2450 typedef detail::RequiresExplicitCast<component_type>
Convert;
2455 NumericTraits<T>::fromRealPromote(
ngreen * max_),
2456 NumericTraits<T>::fromRealPromote(
nblue * max_));
2459 static std::string targetColorSpace()
2466class FunctorTraits<YPrimeIQ2RGBPrimeFunctor<T> >
2467:
public FunctorTraitsBase<YPrimeIQ2RGBPrimeFunctor<T> >
2470 typedef VigraTrueType isUnaryFunctor;
2551 typedef detail::RequiresExplicitCast<component_type>
Convert;
2557 result[0] = Convert::cast(0.299*red + 0.587*green + 0.114*blue);
2558 result[1] = Convert::cast(-0.1471376975*red - 0.2888623025*green + 0.436*blue);
2559 result[2] = Convert::cast(0.6149122807*red - 0.5149122807*green - 0.100*blue);
2563 static std::string targetColorSpace()
2573class FunctorTraits<RGBPrime2YPrimeUVFunctor<T> >
2574:
public FunctorTraitsBase<RGBPrime2YPrimeUVFunctor<T> >
2577 typedef VigraTrueType isUnaryFunctor;
2633 typedef detail::RequiresExplicitCast<component_type>
Convert;
2638 NumericTraits<T>::fromRealPromote(
ngreen * max_),
2639 NumericTraits<T>::fromRealPromote(
nblue * max_));
2642 static std::string targetColorSpace()
2649class FunctorTraits<YPrimeUV2RGBPrimeFunctor<T> >
2650:
public FunctorTraitsBase<YPrimeUV2RGBPrimeFunctor<T> >
2653 typedef VigraTrueType isUnaryFunctor;
2724 typedef detail::RequiresExplicitCast<component_type>
Convert;
2730 result[0] = Convert::cast(16.0 + 65.481*red + 128.553*green + 24.966*blue);
2731 result[1] = Convert::cast(128.0 - 37.79683972*red - 74.20316028*green + 112.0*blue);
2732 result[2] = Convert::cast(128.0 + 112.0*red - 93.78601998*green - 18.21398002*blue);
2736 static std::string targetColorSpace()
2746class FunctorTraits<RGBPrime2YPrimeCbCrFunctor<T> >
2747:
public FunctorTraitsBase<RGBPrime2YPrimeCbCrFunctor<T> >
2750 typedef VigraTrueType isUnaryFunctor;
2806 typedef detail::RequiresExplicitCast<component_type>
Convert;
2815 NumericTraits<T>::fromRealPromote(
ngreen * max_),
2816 NumericTraits<T>::fromRealPromote(
nblue * max_));
2819 static std::string targetColorSpace()
2826class FunctorTraits<YPrimeCbCr2RGBPrimeFunctor<T> >
2827:
public FunctorTraitsBase<YPrimeCbCr2RGBPrimeFunctor<T> >
2830 typedef VigraTrueType isUnaryFunctor;
2936inline TinyVector<float, 3>
2954 return polar2Lab(polar[0], polar[1], polar[2]);
2981 : VIGRA_CSTD::atan2(
lab[2],
lab[1])/M_PI*180.0-39.9977;
2982 result[0] =
angle < 0.0 ?
3022inline TinyVector<float, 3>
3039 return polar2Luv(polar[0], polar[1], polar[2]);
3066 : VIGRA_CSTD::atan2(
luv[2],
luv[1])/M_PI*180.0-12.1727;
3067 result[0] =
angle < 0.0 ?
3107inline TinyVector<float, 3>
3151 : VIGRA_CSTD::atan2(-
ypbpr[1],
ypbpr[2])/M_PI*180.0-18.6481;
3152 result[0] =
angle < 0.0 ?
3192inline TinyVector<float, 3>
3238 : VIGRA_CSTD::atan2(-
cb,
cr)/M_PI*180.0-18.6482;
3239 result[0] =
angle < 0.0 ?
3279inline TinyVector<float, 3>
3323 : VIGRA_CSTD::atan2(-
yiq[2],
yiq[1])/M_PI*180.0+19.5807;
3324 result[0] =
angle < 0.0 ?
3364inline TinyVector<float, 3>
3408 : VIGRA_CSTD::atan2(-
yuv[1],
yuv[2])/M_PI*180.0-13.4569;
3409 result[0] =
angle < 0.0 ?
Convert perceptual uniform CIE L*a*b* into linear (raw) RGB.
Definition colorconversions.hxx:1732
Lab2RGBFunctor(component_type max)
Definition colorconversions.hxx:1764
TinyVector< T, 3 > argument_type
Definition colorconversions.hxx:1744
Lab2RGBFunctor()
Definition colorconversions.hxx:1757
result_type operator()(V const &lab) const
Definition colorconversions.hxx:1771
XYZ2RGBFunctor< T >::result_type value_type
Definition colorconversions.hxx:1752
XYZ2RGBFunctor< T >::result_type result_type
Definition colorconversions.hxx:1748
Convert perceptual uniform CIE L*a*b* into non-linear (gamma corrected) R'G'B'.
Definition colorconversions.hxx:2048
TinyVector< T, 3 > argument_type
Definition colorconversions.hxx:2060
Lab2RGBPrimeFunctor()
Definition colorconversions.hxx:2073
result_type operator()(V const &lab) const
Definition colorconversions.hxx:2087
XYZ2RGBFunctor< T >::result_type value_type
Definition colorconversions.hxx:2068
Lab2RGBPrimeFunctor(component_type max)
Definition colorconversions.hxx:2080
XYZ2RGBFunctor< T >::result_type result_type
Definition colorconversions.hxx:2064
Convert perceptual uniform CIE L*a*b* into standardized tri-stimulus XYZ.
Definition colorconversions.hxx:1404
TinyVector< T, 3 > argument_type
Definition colorconversions.hxx:1413
Lab2XYZFunctor()
Definition colorconversions.hxx:1425
result_type operator()(V const &lab) const
Definition colorconversions.hxx:1433
TinyVector< component_type, 3 > value_type
Definition colorconversions.hxx:1421
NumericTraits< T >::RealPromote component_type
Definition colorconversions.hxx:1409
TinyVector< component_type, 3 > result_type
Definition colorconversions.hxx:1417
Convert perceptual uniform CIE L*u*v* into linear (raw) RGB.
Definition colorconversions.hxx:1668
TinyVector< T, 3 > argument_type
Definition colorconversions.hxx:1679
result_type operator()(V const &luv) const
Definition colorconversions.hxx:1700
XYZ2RGBFunctor< T >::result_type value_type
Definition colorconversions.hxx:1687
XYZ2RGBFunctor< T >::result_type result_type
Definition colorconversions.hxx:1683
Convert perceptual uniform CIE L*u*v* into non-linear (gamma corrected) R'G'B'.
Definition colorconversions.hxx:1977
TinyVector< T, 3 > argument_type
Definition colorconversions.hxx:1989
result_type operator()(V const &luv) const
Definition colorconversions.hxx:2016
XYZ2RGBFunctor< T >::result_type value_type
Definition colorconversions.hxx:1997
Luv2RGBPrimeFunctor()
Definition colorconversions.hxx:2002
XYZ2RGBFunctor< T >::result_type result_type
Definition colorconversions.hxx:1993
Luv2RGBPrimeFunctor(component_type max)
Definition colorconversions.hxx:2009
Convert perceptual uniform CIE L*u*v* into standardized tri-stimulus XYZ.
Definition colorconversions.hxx:1228
TinyVector< T, 3 > argument_type
Definition colorconversions.hxx:1237
result_type operator()(V const &luv) const
Definition colorconversions.hxx:1255
TinyVector< component_type, 3 > value_type
Definition colorconversions.hxx:1245
NumericTraits< T >::RealPromote component_type
Definition colorconversions.hxx:1233
TinyVector< component_type, 3 > result_type
Definition colorconversions.hxx:1241
Convert linear (raw) RGB into perceptual uniform CIE L*a*b*.
Definition colorconversions.hxx:1589
TinyVector< T, 3 > argument_type
Definition colorconversions.hxx:1605
result_type operator()(V const &rgb) const
Definition colorconversions.hxx:1632
XYZ2LabFunctor< component_type >::result_type value_type
Definition colorconversions.hxx:1613
RGB2LabFunctor()
Definition colorconversions.hxx:1618
XYZ2LabFunctor< component_type >::result_type result_type
Definition colorconversions.hxx:1609
NumericTraits< T >::RealPromote component_type
Definition colorconversions.hxx:1601
RGB2LabFunctor(component_type max)
Definition colorconversions.hxx:1625
Convert linear (raw) RGB into perceptual uniform CIE L*u*v*.
Definition colorconversions.hxx:1495
TinyVector< T, 3 > argument_type
Definition colorconversions.hxx:1511
result_type operator()(V const &rgb) const
Definition colorconversions.hxx:1538
XYZ2LuvFunctor< component_type >::result_type value_type
Definition colorconversions.hxx:1519
RGB2LuvFunctor(component_type max)
Definition colorconversions.hxx:1531
XYZ2LuvFunctor< component_type >::result_type result_type
Definition colorconversions.hxx:1515
NumericTraits< T >::RealPromote component_type
Definition colorconversions.hxx:1507
RGB2LuvFunctor()
Definition colorconversions.hxx:1524
Convert linear (raw) RGB into non-linear (gamma corrected) R'G'B'.
Definition colorconversions.hxx:278
result_type operator()(V const &rgb) const
Definition colorconversions.hxx:314
NumericTraits< To >::RealPromote component_type
Definition colorconversions.hxx:295
TinyVector< To, 3 > value_type
Definition colorconversions.hxx:291
RGB2RGBPrimeFunctor(component_type max)
Definition colorconversions.hxx:307
TinyVector< From, 3 > argument_type
Definition colorconversions.hxx:283
TinyVector< To, 3 > result_type
Definition colorconversions.hxx:287
RGB2RGBPrimeFunctor()
Definition colorconversions.hxx:300
Convert linear (raw) RGB into standardized tri-stimulus XYZ.
Definition colorconversions.hxx:789
TinyVector< T, 3 > argument_type
Definition colorconversions.hxx:798
RGB2XYZFunctor(component_type max)
Definition colorconversions.hxx:818
TinyVector< component_type, 3 > value_type
Definition colorconversions.hxx:806
NumericTraits< T >::RealPromote component_type
Definition colorconversions.hxx:794
RGB2XYZFunctor()
Definition colorconversions.hxx:811
result_type operator()(argument_type const &rgb) const
Definition colorconversions.hxx:824
TinyVector< component_type, 3 > result_type
Definition colorconversions.hxx:802
Convert linear (raw) RGB into standardized sRGB.
Definition colorconversions.hxx:406
result_type operator()(V const &rgb) const
Definition colorconversions.hxx:442
NumericTraits< To >::RealPromote component_type
Definition colorconversions.hxx:423
TinyVector< To, 3 > value_type
Definition colorconversions.hxx:419
RGB2sRGBFunctor(component_type max)
Definition colorconversions.hxx:435
TinyVector< From, 3 > argument_type
Definition colorconversions.hxx:411
RGB2sRGBFunctor()
Definition colorconversions.hxx:428
TinyVector< To, 3 > result_type
Definition colorconversions.hxx:415
Convert non-linear (gamma corrected) R'G'B' into perceptual uniform CIE L*a*b*.
Definition colorconversions.hxx:1905
TinyVector< T, 3 > argument_type
Definition colorconversions.hxx:1914
result_type operator()(V const &rgb) const
Definition colorconversions.hxx:1941
XYZ2LabFunctor< component_type >::result_type value_type
Definition colorconversions.hxx:1922
RGBPrime2LabFunctor()
Definition colorconversions.hxx:1927
XYZ2LabFunctor< component_type >::result_type result_type
Definition colorconversions.hxx:1918
NumericTraits< T >::RealPromote component_type
Definition colorconversions.hxx:1910
RGBPrime2LabFunctor(component_type max)
Definition colorconversions.hxx:1934
Convert non-linear (gamma corrected) R'G'B' into perceptual uniform CIE L*u*v*.
Definition colorconversions.hxx:1818
TinyVector< T, 3 > argument_type
Definition colorconversions.hxx:1827
result_type operator()(V const &rgb) const
Definition colorconversions.hxx:1854
XYZ2LuvFunctor< component_type >::result_type value_type
Definition colorconversions.hxx:1835
RGBPrime2LuvFunctor(component_type max)
Definition colorconversions.hxx:1847
XYZ2LuvFunctor< component_type >::result_type result_type
Definition colorconversions.hxx:1831
RGBPrime2LuvFunctor()
Definition colorconversions.hxx:1840
NumericTraits< T >::RealPromote component_type
Definition colorconversions.hxx:1823
Convert non-linear (gamma corrected) R'G'B' into non-linear (raw) RGB.
Definition colorconversions.hxx:531
RGBPrime2RGBFunctor()
Definition colorconversions.hxx:553
NumericTraits< To >::RealPromote component_type
Definition colorconversions.hxx:548
TinyVector< To, 3 > value_type
Definition colorconversions.hxx:544
TinyVector< From, 3 > argument_type
Definition colorconversions.hxx:536
TinyVector< To, 3 > result_type
Definition colorconversions.hxx:540
result_type operator()(argument_type const &rgb) const
Definition colorconversions.hxx:566
RGBPrime2RGBFunctor(component_type max)
Definition colorconversions.hxx:560
Convert non-linear (gamma corrected) R'G'B' into standardized tri-stimulus XYZ.
Definition colorconversions.hxx:874
TinyVector< T, 3 > argument_type
Definition colorconversions.hxx:883
TinyVector< component_type, 3 > value_type
Definition colorconversions.hxx:891
NumericTraits< T >::RealPromote component_type
Definition colorconversions.hxx:879
result_type operator()(argument_type const &rgb) const
Definition colorconversions.hxx:909
RGBPrime2XYZFunctor(component_type max)
Definition colorconversions.hxx:903
RGBPrime2XYZFunctor()
Definition colorconversions.hxx:896
TinyVector< component_type, 3 > result_type
Definition colorconversions.hxx:887
Convert non-linear (gamma corrected) R'G'B' into Y'CbCr color difference components.
Definition colorconversions.hxx:2679
RGBPrime2YPrimeCbCrFunctor(component_type max)
Definition colorconversions.hxx:2715
TinyVector< T, 3 > argument_type
Definition colorconversions.hxx:2695
result_type operator()(V const &rgb) const
Definition colorconversions.hxx:2722
RGBPrime2YPrimeCbCrFunctor()
Definition colorconversions.hxx:2708
TinyVector< component_type, 3 > value_type
Definition colorconversions.hxx:2703
NumericTraits< T >::RealPromote component_type
Definition colorconversions.hxx:2691
TinyVector< component_type, 3 > result_type
Definition colorconversions.hxx:2699
Convert non-linear (gamma corrected) R'G'B' into Y'IQ components.
Definition colorconversions.hxx:2323
TinyVector< T, 3 > argument_type
Definition colorconversions.hxx:2339
result_type operator()(V const &rgb) const
Definition colorconversions.hxx:2366
TinyVector< component_type, 3 > value_type
Definition colorconversions.hxx:2347
NumericTraits< T >::RealPromote component_type
Definition colorconversions.hxx:2335
RGBPrime2YPrimeIQFunctor(component_type max)
Definition colorconversions.hxx:2359
RGBPrime2YPrimeIQFunctor()
Definition colorconversions.hxx:2352
TinyVector< component_type, 3 > result_type
Definition colorconversions.hxx:2343
Convert non-linear (gamma corrected) R'G'B' into Y'PbPr color difference components.
Definition colorconversions.hxx:2140
TinyVector< T, 3 > argument_type
Definition colorconversions.hxx:2156
result_type operator()(V const &rgb) const
Definition colorconversions.hxx:2183
TinyVector< component_type, 3 > value_type
Definition colorconversions.hxx:2164
NumericTraits< T >::RealPromote component_type
Definition colorconversions.hxx:2152
RGBPrime2YPrimePbPrFunctor()
Definition colorconversions.hxx:2169
RGBPrime2YPrimePbPrFunctor(component_type max)
Definition colorconversions.hxx:2176
TinyVector< component_type, 3 > result_type
Definition colorconversions.hxx:2160
Convert non-linear (gamma corrected) R'G'B' into Y'UV components.
Definition colorconversions.hxx:2506
TinyVector< T, 3 > argument_type
Definition colorconversions.hxx:2522
result_type operator()(V const &rgb) const
Definition colorconversions.hxx:2549
RGBPrime2YPrimeUVFunctor()
Definition colorconversions.hxx:2535
TinyVector< component_type, 3 > value_type
Definition colorconversions.hxx:2530
NumericTraits< T >::RealPromote component_type
Definition colorconversions.hxx:2518
RGBPrime2YPrimeUVFunctor(component_type max)
Definition colorconversions.hxx:2542
TinyVector< component_type, 3 > result_type
Definition colorconversions.hxx:2526
Class for a single RGB value.
Definition rgbvalue.hxx:128
Convert standardized tri-stimulus XYZ into perceptual uniform CIE L*a*b*.
Definition colorconversions.hxx:1329
TinyVector< T, 3 > argument_type
Definition colorconversions.hxx:1338
result_type operator()(V const &xyz) const
Definition colorconversions.hxx:1357
TinyVector< component_type, 3 > value_type
Definition colorconversions.hxx:1346
NumericTraits< T >::RealPromote component_type
Definition colorconversions.hxx:1334
TinyVector< component_type, 3 > result_type
Definition colorconversions.hxx:1342
Convert standardized tri-stimulus XYZ into perceptual uniform CIE L*u*v*.
Definition colorconversions.hxx:1146
TinyVector< T, 3 > argument_type
Definition colorconversions.hxx:1155
TinyVector< component_type, 3 > value_type
Definition colorconversions.hxx:1163
NumericTraits< T >::RealPromote component_type
Definition colorconversions.hxx:1151
TinyVector< component_type, 3 > result_type
Definition colorconversions.hxx:1159
Convert standardized tri-stimulus XYZ into linear (raw) RGB.
Definition colorconversions.hxx:964
XYZ2RGBFunctor(component_type max)
Definition colorconversions.hxx:994
TinyVector< T, 3 > argument_type
Definition colorconversions.hxx:974
XYZ2RGBFunctor()
Definition colorconversions.hxx:987
result_type operator()(V const &xyz) const
Definition colorconversions.hxx:1001
TinyVector< T, 3 > value_type
Definition colorconversions.hxx:982
TinyVector< T, 3 > result_type
Definition colorconversions.hxx:978
Convert standardized tri-stimulus XYZ into non-linear (gamma corrected) R'G'B'.
Definition colorconversions.hxx:1046
TinyVector< T, 3 > argument_type
Definition colorconversions.hxx:1059
result_type operator()(V const &xyz) const
Definition colorconversions.hxx:1086
TinyVector< T, 3 > value_type
Definition colorconversions.hxx:1067
TinyVector< T, 3 > result_type
Definition colorconversions.hxx:1063
XYZ2RGBPrimeFunctor(component_type max)
Definition colorconversions.hxx:1079
XYZ2RGBPrimeFunctor()
Definition colorconversions.hxx:1072
Convert Y'CbCr color difference components into non-linear (gamma corrected) R'G'B'.
Definition colorconversions.hxx:2766
result_type operator()(V const &ycbcr) const
Definition colorconversions.hxx:2804
TinyVector< T, 3 > argument_type
Definition colorconversions.hxx:2777
TinyVector< T, 3 > value_type
Definition colorconversions.hxx:2785
TinyVector< T, 3 > result_type
Definition colorconversions.hxx:2781
YPrimeCbCr2RGBPrimeFunctor()
Definition colorconversions.hxx:2790
YPrimeCbCr2RGBPrimeFunctor(component_type max)
Definition colorconversions.hxx:2797
Convert Y'IQ color components into non-linear (gamma corrected) R'G'B'.
Definition colorconversions.hxx:2410
YPrimeIQ2RGBPrimeFunctor()
Definition colorconversions.hxx:2434
TinyVector< T, 3 > argument_type
Definition colorconversions.hxx:2421
result_type operator()(V const &yiq) const
Definition colorconversions.hxx:2448
TinyVector< T, 3 > value_type
Definition colorconversions.hxx:2429
TinyVector< T, 3 > result_type
Definition colorconversions.hxx:2425
YPrimeIQ2RGBPrimeFunctor(component_type max)
Definition colorconversions.hxx:2441
Convert Y'PbPr color difference components into non-linear (gamma corrected) R'G'B'.
Definition colorconversions.hxx:2227
TinyVector< T, 3 > argument_type
Definition colorconversions.hxx:2238
YPrimePbPr2RGBPrimeFunctor()
Definition colorconversions.hxx:2251
TinyVector< T, 3 > value_type
Definition colorconversions.hxx:2246
result_type operator()(V const &ypbpr) const
Definition colorconversions.hxx:2265
TinyVector< T, 3 > result_type
Definition colorconversions.hxx:2242
YPrimePbPr2RGBPrimeFunctor(component_type max)
Definition colorconversions.hxx:2258
Convert Y'UV color components into non-linear (gamma corrected) R'G'B'.
Definition colorconversions.hxx:2593
TinyVector< T, 3 > argument_type
Definition colorconversions.hxx:2604
YPrimeUV2RGBPrimeFunctor(component_type max)
Definition colorconversions.hxx:2624
YPrimeUV2RGBPrimeFunctor()
Definition colorconversions.hxx:2617
result_type operator()(V const &yuv) const
Definition colorconversions.hxx:2631
TinyVector< T, 3 > value_type
Definition colorconversions.hxx:2612
TinyVector< T, 3 > result_type
Definition colorconversions.hxx:2608
Convert standardized sRGB into non-linear (raw) RGB.
Definition colorconversions.hxx:659
NumericTraits< To >::RealPromote component_type
Definition colorconversions.hxx:676
TinyVector< To, 3 > value_type
Definition colorconversions.hxx:672
sRGB2RGBFunctor()
Definition colorconversions.hxx:681
TinyVector< From, 3 > argument_type
Definition colorconversions.hxx:664
sRGB2RGBFunctor(component_type max)
Definition colorconversions.hxx:688
TinyVector< To, 3 > result_type
Definition colorconversions.hxx:668
result_type operator()(argument_type const &rgb) const
Definition colorconversions.hxx:694
TinyVector< float, 3 > polar2YPrimeCbCr(double color, double brightness, double saturation)
Init Y'CbCr color triple from polar representation.
Definition colorconversions.hxx:3193
TinyVector< float, 3 > lab2Polar(V const &lab)
Create polar representation form L*a*b*.
Definition colorconversions.hxx:2975
TinyVector< float, 3 > polar2YPrimeIQ(double color, double brightness, double saturation)
Init Y'IQ color triple from polar representation.
Definition colorconversions.hxx:3280
TinyVector< float, 3 > yPrimeIQ2Polar(V const &yiq)
Create polar representation form Y'IQ.
Definition colorconversions.hxx:3317
double gamma(double x)
The gamma function.
Definition mathutil.hxx:1587
TinyVector< float, 3 > polar2YPrimeUV(double color, double brightness, double saturation)
Init Y'UV color triple from polar representation.
Definition colorconversions.hxx:3365
FFTWComplex< R >::NormType norm(const FFTWComplex< R > &a)
norm (= magnitude)
Definition fftw3.hxx:1037
TinyVector< float, 3 > polar2Lab(double color, double brightness, double saturation)
Init L*a*b* color triple from polar representation.
Definition colorconversions.hxx:2937
TinyVector< float, 3 > yPrimeUV2Polar(V const &yuv)
Create polar representation form Y'UV.
Definition colorconversions.hxx:3402
TinyVector< float, 3 > yPrimePbPr2Polar(V const &ypbpr)
Create polar representation form Y'PbPr.
Definition colorconversions.hxx:3145
TinyVector< float, 3 > polar2Luv(double color, double brightness, double saturation)
Init L*u*v* color triple from polar representation.
Definition colorconversions.hxx:3023
TinyVector< float, 3 > yPrimeCbCr2Polar(V const &ycbcr)
Create polar representation form Y'CbCr.
Definition colorconversions.hxx:3230
TinyVector< float, 3 > polar2YPrimePbPr(double color, double brightness, double saturation)
Init Y'PbPr color triple from polar representation.
Definition colorconversions.hxx:3108
TinyVector< float, 3 > luv2Polar(V const &luv)
Create polar representation form L*u*v*.
Definition colorconversions.hxx:3060