89 const double luma,
double *red,
double *green,
double *blue)
103 assert(red != (
double *) NULL);
104 assert(green != (
double *) NULL);
105 assert(blue != (
double *) NULL);
108 x=c*(1.0-fabs(fmod(h,2.0)-1.0));
112 if ((0.0 <= h) && (h < 1.0))
118 if ((1.0 <= h) && (h < 2.0))
124 if ((2.0 <= h) && (h < 3.0))
130 if ((3.0 <= h) && (h < 4.0))
136 if ((4.0 <= h) && (h < 5.0))
142 if ((5.0 <= h) && (h < 6.0))
147 m=luma-(0.298839*r+0.586811*g+0.114350*b);
182 const double luma,
double *red,
double *green,
double *blue)
197 assert(red != (
double *) NULL);
198 assert(green != (
double *) NULL);
199 assert(blue != (
double *) NULL);
202 x=c*(1.0-fabs(fmod(h,2.0)-1.0));
206 if ((0.0 <= h) && (h < 1.0))
212 if ((1.0 <= h) && (h < 2.0))
218 if ((2.0 <= h) && (h < 3.0))
224 if ((3.0 <= h) && (h < 4.0))
230 if ((4.0 <= h) && (h < 5.0))
236 if ((5.0 <= h) && (h < 6.0))
241 m=luma-(0.298839*r+0.586811*g+0.114350*b);
251 z=(1.0-luma)/(m+c-luma);
287 const double brightness,
double *red,
double *green,
double *blue)
299 assert(red != (
double *) NULL);
300 assert(green != (
double *) NULL);
301 assert(blue != (
double *) NULL);
309 h=6.0*(hue-floor(hue));
310 f=h-floor((
double) h);
311 p=brightness*(1.0-saturation);
312 q=brightness*(1.0-saturation*f);
313 t=brightness*(1.0-(saturation*(1.0-f)));
390 const double intensity,
double *red,
double *green,
double *blue)
401 assert(red != (
double *) NULL);
402 assert(green != (
double *) NULL);
403 assert(blue != (
double *) NULL);
405 h-=360.0*floor(h/360.0);
408 b=intensity*(1.0-saturation);
409 r=intensity*(1.0+saturation*cos(h*(
MagickPI/180.0))/cos((60.0-h)*
417 r=intensity*(1.0-saturation);
418 g=intensity*(1.0+saturation*cos(h*(
MagickPI/180.0))/cos((60.0-h)*
425 g=intensity*(1.0-saturation);
426 b=intensity*(1.0+saturation*cos(h*(
MagickPI/180.0))/cos((60.0-h)*
463 const double lightness,
double *red,
double *green,
double *blue)
474 assert(red != (
double *) NULL);
475 assert(green != (
double *) NULL);
476 assert(blue != (
double *) NULL);
478 if (lightness <= 0.5)
479 c=2.0*lightness*saturation;
481 c=(2.0-2.0*lightness)*saturation;
483 h-=360.0*floor(h/360.0);
485 x=c*(1.0-fabs(h-2.0*floor(h/2.0)-1.0));
486 switch ((
int) floor(h))
567 const double value,
double *red,
double *green,
double *blue)
578 assert(red != (
double *) NULL);
579 assert(green != (
double *) NULL);
580 assert(blue != (
double *) NULL);
584 h-=360.0*floor(h/360.0);
586 x=c*(1.0-fabs(h-2.0*floor(h/2.0)-1.0));
587 switch ((
int) floor(h))
668 const double blackness,
double *red,
double *green,
double *blue)
684 assert(red != (
double *) NULL);
685 assert(green != (
double *) NULL);
686 assert(blue != (
double *) NULL);
699 n=whiteness+f*(v-whiteness);
704 case 0: r=v; g=n; b=whiteness;
break;
705 case 1: r=n; g=v; b=whiteness;
break;
706 case 2: r=whiteness; g=v; b=n;
break;
707 case 3: r=whiteness; g=n; b=v;
break;
708 case 4: r=n; g=whiteness; b=v;
break;
709 case 5: r=v; g=whiteness; b=n;
break;
745 const double hue,
double *X,
double *Y,
double *Z)
752 const double hue,
double *red,
double *green,
double *blue)
762 assert(red != (
double *) NULL);
763 assert(green != (
double *) NULL);
764 assert(blue != (
double *) NULL);
798 const double hue,
double *X,
double *Y,
double *Z)
805 const double hue,
double *red,
double *green,
double *blue)
815 assert(red != (
double *) NULL);
816 assert(green != (
double *) NULL);
817 assert(blue != (
double *) NULL);
851 const double blue,
double *hue,
double *chroma,
double *luma)
861 assert(hue != (
double *) NULL);
862 assert(chroma != (
double *) NULL);
863 assert(luma != (
double *) NULL);
871 h=fmod((green-blue)/c+6.0,6.0);
874 h=((blue-red)/c)+2.0;
877 h=((red-green)/c)+4.0;
880 *luma=
QuantumScale*(0.298839*red+0.586811*green+0.114350*blue);
912 const double blue,
double *hue,
double *chroma,
double *luma)
922 assert(hue != (
double *) NULL);
923 assert(chroma != (
double *) NULL);
924 assert(luma != (
double *) NULL);
932 h=fmod((green-blue)/c+6.0,6.0);
935 h=((blue-red)/c)+2.0;
938 h=((red-green)/c)+4.0;
941 *luma=
QuantumScale*(0.298839*red+0.586811*green+0.114350*blue);
973 const double blue,
double *hue,
double *saturation,
double *brightness)
983 assert(hue != (
double *) NULL);
984 assert(saturation != (
double *) NULL);
985 assert(brightness != (
double *) NULL);
989 min=red < green ? red : green;
992 max=red > green ? red : green;
998 *saturation=delta/max;
1003 *hue=(green-blue)/delta;
1006 *hue=2.0+(blue-red)/delta;
1008 *hue=4.0+(red-green)/delta;
1043 const double blue,
double *hue,
double *saturation,
double *intensity)
1052 assert(hue != (
double *) NULL);
1053 assert(saturation != (
double *) NULL);
1054 assert(intensity != (
double *) NULL);
1056 if (*intensity <= 0.0)
1066 *hue=atan2(beta,alpha)*(180.0/
MagickPI)/360.0;
1100 const double blue,
double *hue,
double *saturation,
double *lightness)
1110 assert(hue != (
double *) NULL);
1111 assert(saturation != (
double *) NULL);
1112 assert(lightness != (
double *) NULL);
1118 *lightness=(max+min)/2.0;
1137 if (*lightness <= 0.5)
1138 *saturation=c/(2.0*(*lightness));
1140 *saturation=c/(2.0-2.0*(*lightness));
1172 const double blue,
double *hue,
double *saturation,
double *value)
1182 assert(hue != (
double *) NULL);
1183 assert(saturation != (
double *) NULL);
1184 assert(value != (
double *) NULL);
1241 const double blue,
double *hue,
double *whiteness,
double *blackness)
1252 assert(hue != (
double *) NULL);
1253 assert(whiteness != (
double *) NULL);
1254 assert(blackness != (
double *) NULL);
1268 *hue=(p-f/(v-1.0*w))/6.0;
1299 const double blue,
double *L,
double *a,
double *b)
1340 const double Z,
double *luma,
double *chroma,
double *hue)
1347 *chroma=hypot(255.0*(a-0.5),255.0*(b-0.5))/255.0+0.5;
1348 *hue=180.0*atan2(255.0*(b-0.5),255.0*(a-0.5))/
MagickPI/360.0;
1354 const double blue,
double *luma,
double *chroma,
double *hue)
1364 assert(luma != (
double *) NULL);
1365 assert(chroma != (
double *) NULL);
1366 assert(hue != (
double *) NULL);
1401 const double Z,
double *luma,
double *chroma,
double *hue)
1408 *chroma=hypot(354.0*u-134.0,262.0*v-140.0)/255.0+0.5;
1409 *hue=180.0*atan2(262.0*v-140.0,354.0*u-134.0)/
MagickPI/360.0;
1415 const double blue,
double *luma,
double *chroma,
double *hue)
1425 assert(luma != (
double *) NULL);
1426 assert(chroma != (
double *) NULL);
1427 assert(hue != (
double *) NULL);
1462 return(sqrt(fabs(affine->
sx*affine->
sy-affine->
rx*affine->
ry)));
1497 #define SigmaUniform (attenuate*0.015625) 1498 #define SigmaGaussian (attenuate*0.015625) 1499 #define SigmaImpulse (attenuate*0.1) 1500 #define SigmaLaplacian (attenuate*0.0390625) 1501 #define SigmaMultiplicativeGaussian (attenuate*0.5) 1502 #define SigmaPoisson (attenuate*12.5) 1503 #define SigmaRandom (attenuate) 1504 #define TauGaussian (attenuate*0.078125) 1530 gamma=sqrt(-2.0*log(alpha));
1531 sigma=gamma*cos((
double) (2.0*
MagickPI*beta));
1532 tau=gamma*sin((
double) (2.0*
MagickPI*beta));
1533 noise=(double) (pixel+sqrt((
double) pixel)*
SigmaGaussian*sigma+
1545 noise=(double) pixel;
1570 sigma=sqrt(-2.0*log(alpha));
1573 cos((
double) (2.0*
MagickPI*beta))/2.0);
1585 for (i=0; alpha > poisson; i++)
1654 return((
size_t) (2.0*ceil(radius)+1.0));
1663 j=(ssize_t) (width-1)/2;
1664 for (i=(-j); i <= j; i++)
1665 normalize+=exp(-((
double) (i*i))*alpha)*beta;
1666 value=exp(-((
double) (j*j))*alpha)*beta/normalize;
1671 return((
size_t) (width-2));
1694 return((
size_t) (2.0*ceil(radius)+1.0));
1703 j=(ssize_t) (width-1)/2;
1704 for (v=(-j); v <= j; v++)
1705 for (u=(-j); u <= j; u++)
1706 normalize+=exp(-((
double) (u*u+v*v))*alpha)*beta;
1707 value=exp(-((
double) (j*j))*alpha)*beta/normalize;
1712 return((
size_t) (width-2));
static void ConvertXYZToLCHuv(const double X, const double Y, const double Z, double *luma, double *chroma, double *hue)
MagickExport void ConvertRGBToHSL(const double red, const double green, const double blue, double *hue, double *saturation, double *lightness)
static void ConvertLCHuvToXYZ(const double luma, const double chroma, const double hue, double *X, double *Y, double *Z)
MagickPrivate void ConvertLCHuvToRGB(const double luma, const double chroma, const double hue, double *red, double *green, double *blue)
MagickPrivate void ConvertRGBToLCHuv(const double red, const double green, const double blue, double *luma, double *chroma, double *hue)
static void ConvertLCHabToXYZ(const double luma, const double chroma, const double hue, double *X, double *Y, double *Z)
MagickPrivate void ConvertRGBToHSV(const double red, const double green, const double blue, double *hue, double *saturation, double *value)
MagickPrivate void ConvertHSVToRGB(const double hue, const double saturation, const double value, double *red, double *green, double *blue)
MagickPrivate void ConvertHSBToRGB(const double hue, const double saturation, const double brightness, double *red, double *green, double *blue)
MagickPrivate void ConvertHSIToRGB(const double hue, const double saturation, const double intensity, double *red, double *green, double *blue)
MagickPrivate size_t GetOptimalKernelWidth(const double radius, const double sigma)
MagickExport double ExpandAffine(const AffineMatrix *affine)
static double PerceptibleReciprocal(const double x)
MagickPrivate double GenerateDifferentialNoise(RandomInfo *random_info, const Quantum pixel, const NoiseType noise_type, const double attenuate)
MagickPrivate size_t GetOptimalKernelWidth1D(const double radius, const double sigma)
#define SigmaMultiplicativeGaussian
static void ConvertLuvToXYZ(const double L, const double u, const double v, double *X, double *Y, double *Z)
static void ConvertXYZToLuv(const double X, const double Y, const double Z, double *L, double *u, double *v)
MagickExport MagickBooleanType LogMagickEvent(const LogEventType type, const char *module, const char *function, const size_t line, const char *format,...)
MagickExport void ConvertHSLToRGB(const double hue, const double saturation, const double lightness, double *red, double *green, double *blue)
MagickPrivate size_t GetOptimalKernelWidth2D(const double radius, const double sigma)
MagickPrivate void ConvertHCLToRGB(const double hue, const double chroma, const double luma, double *red, double *green, double *blue)
static ssize_t CastDoubleToLong(const double value)
#define GetMagickModule()
static void ConvertXYZToLab(const double X, const double Y, const double Z, double *L, double *a, double *b)
static void ConvertRGBToXYZ(const double red, const double green, const double blue, double *X, double *Y, double *Z)
MagickPrivate void ConvertHWBToRGB(const double hue, const double whiteness, const double blackness, double *red, double *green, double *blue)
MagickPrivate void ConvertRGBToLab(const double red, const double green, const double blue, double *L, double *a, double *b)
MagickPrivate void ConvertRGBToLCHab(const double red, const double green, const double blue, double *luma, double *chroma, double *hue)
static void ConvertLabToXYZ(const double L, const double a, const double b, double *X, double *Y, double *Z)
MagickExport double GetPseudoRandomValue(RandomInfo *magick_restrict random_info)
static void ConvertXYZToLCHab(const double X, const double Y, const double Z, double *luma, double *chroma, double *hue)
static RandomInfo * random_info
MagickPrivate void ConvertRGBToHCL(const double red, const double green, const double blue, double *hue, double *chroma, double *luma)
static void ConvertXYZToRGB(const double X, const double Y, const double Z, double *red, double *green, double *blue)
MagickPrivate void ConvertRGBToHSI(const double red, const double green, const double blue, double *hue, double *saturation, double *intensity)
MagickPrivate void ConvertRGBToHWB(const double red, const double green, const double blue, double *hue, double *whiteness, double *blackness)
MagickPrivate void ConvertLCHabToRGB(const double luma, const double chroma, const double hue, double *red, double *green, double *blue)
MagickPrivate void ConvertRGBToHCLp(const double red, const double green, const double blue, double *hue, double *chroma, double *luma)
MagickPrivate void ConvertHCLpToRGB(const double hue, const double chroma, const double luma, double *red, double *green, double *blue)
MagickPrivate void ConvertRGBToHSB(const double red, const double green, const double blue, double *hue, double *saturation, double *brightness)