blob: 6017bf77ac0362b6dab994ddb47640e1ae0f11df [file] [log] [blame]
cristy3ed852e2009-09-05 21:47:34 +00001/*
cristyfe676ee2013-11-18 13:03:38 +00002 Copyright 1999-2014 ImageMagick Studio LLC, a non-profit organization
cristy3ed852e2009-09-05 21:47:34 +00003 dedicated to making software imaging solutions freely available.
4
5 You may not use this file except in compliance with the License.
6 obtain a copy of the License at
7
8 http://www.imagemagick.org/script/license.php
9
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
15
cristy3e2860c2010-01-24 01:36:30 +000016 MagickCore statistical methods.
cristy3ed852e2009-09-05 21:47:34 +000017*/
18#ifndef _MAGICKCORE_STATISTIC_H
19#define _MAGICKCORE_STATISTIC_H
20
21#if defined(__cplusplus) || defined(c_plusplus)
22extern "C" {
23#endif
24
cristy3ac6aa92014-09-08 11:48:28 +000025#define MaximumNumberOfImageMoments 8
26
cristy3ed852e2009-09-05 21:47:34 +000027typedef struct _ChannelStatistics
28{
cristybb503372010-05-27 20:51:26 +000029 size_t
cristy3ed852e2009-09-05 21:47:34 +000030 depth;
31
32 double
cristy5048d302012-08-07 01:05:16 +000033 area,
cristy3ed852e2009-09-05 21:47:34 +000034 minima,
35 maxima,
cristyfd9dcd42010-08-08 18:07:02 +000036 sum,
37 sum_squared,
cristya8178ed2010-08-10 17:31:59 +000038 sum_cubed,
39 sum_fourth_power,
cristycf584452010-08-08 02:26:04 +000040 mean,
cristyfd9dcd42010-08-08 18:07:02 +000041 variance,
cristycf584452010-08-08 02:26:04 +000042 standard_deviation,
cristy3ed852e2009-09-05 21:47:34 +000043 kurtosis,
44 skewness;
45} ChannelStatistics;
46
cristybd4a3c22014-01-07 15:09:37 +000047typedef struct _ChannelMoments
48{
49 double
cristy3ac6aa92014-09-08 11:48:28 +000050 I[MaximumNumberOfImageMoments+1];
cristy89298f32014-01-08 00:21:50 +000051
52 PointInfo
53 centroid,
54 ellipse_axis;
55
56 double
57 ellipse_angle,
58 ellipse_eccentricity,
59 ellipse_intensity;
cristybd4a3c22014-01-07 15:09:37 +000060} ChannelMoments;
61
cristyf8f39d42014-02-22 21:44:38 +000062typedef struct _ChannelPerceptualHash
63{
64 double
cristy3ac6aa92014-09-08 11:48:28 +000065 srgb_hu_phash[MaximumNumberOfImageMoments+1],
66 hclp_hu_phash[MaximumNumberOfImageMoments+1];
cristyf8f39d42014-02-22 21:44:38 +000067} ChannelPerceptualHash;
68
cristy351842f2010-03-07 15:27:38 +000069typedef enum
70{
71 UndefinedEvaluateOperator,
cristy95f562a2012-01-01 20:49:11 +000072 AbsEvaluateOperator,
cristy351842f2010-03-07 15:27:38 +000073 AddEvaluateOperator,
cristy95f562a2012-01-01 20:49:11 +000074 AddModulusEvaluateOperator,
cristy351842f2010-03-07 15:27:38 +000075 AndEvaluateOperator,
cristy95f562a2012-01-01 20:49:11 +000076 CosineEvaluateOperator,
cristy351842f2010-03-07 15:27:38 +000077 DivideEvaluateOperator,
cristy95f562a2012-01-01 20:49:11 +000078 ExponentialEvaluateOperator,
cristy351842f2010-03-07 15:27:38 +000079 GaussianNoiseEvaluateOperator,
80 ImpulseNoiseEvaluateOperator,
81 LaplacianNoiseEvaluateOperator,
cristy95f562a2012-01-01 20:49:11 +000082 LeftShiftEvaluateOperator,
83 LogEvaluateOperator,
84 MaxEvaluateOperator,
cristy33aaed22010-08-11 18:10:50 +000085 MeanEvaluateOperator,
cristy95f562a2012-01-01 20:49:11 +000086 MedianEvaluateOperator,
87 MinEvaluateOperator,
88 MultiplicativeNoiseEvaluateOperator,
89 MultiplyEvaluateOperator,
90 OrEvaluateOperator,
91 PoissonNoiseEvaluateOperator,
92 PowEvaluateOperator,
93 RightShiftEvaluateOperator,
cristy7c4c78f2014-06-15 21:57:39 +000094 RootMeanSquareEvaluateOperator,
cristy95f562a2012-01-01 20:49:11 +000095 SetEvaluateOperator,
96 SineEvaluateOperator,
97 SubtractEvaluateOperator,
cristy12a3f8e2012-01-31 01:53:19 +000098 SumEvaluateOperator,
cristy95f562a2012-01-01 20:49:11 +000099 ThresholdBlackEvaluateOperator,
100 ThresholdEvaluateOperator,
101 ThresholdWhiteEvaluateOperator,
102 UniformNoiseEvaluateOperator,
103 XorEvaluateOperator
cristy351842f2010-03-07 15:27:38 +0000104} MagickEvaluateOperator;
105
106typedef enum
107{
108 UndefinedFunction,
109 PolynomialFunction,
110 SinusoidFunction,
111 ArcsinFunction,
112 ArctanFunction
113} MagickFunction;
114
cristy99bd5232011-12-07 14:38:20 +0000115typedef enum
116{
117 UndefinedStatistic,
118 GradientStatistic,
119 MaximumStatistic,
120 MeanStatistic,
121 MedianStatistic,
122 MinimumStatistic,
123 ModeStatistic,
124 NonpeakStatistic,
cristy180908c2014-06-15 13:01:43 +0000125 RootMeanSquareStatistic,
cristy99bd5232011-12-07 14:38:20 +0000126 StandardDeviationStatistic
127} StatisticType;
128
cristy3ed852e2009-09-05 21:47:34 +0000129extern MagickExport ChannelStatistics
cristyd42d9952011-07-08 14:21:50 +0000130 *GetImageStatistics(const Image *,ExceptionInfo *);
cristy3ed852e2009-09-05 21:47:34 +0000131
cristybd4a3c22014-01-07 15:09:37 +0000132extern MagickExport ChannelMoments
133 *GetImageMoments(const Image *,ExceptionInfo *);
134
cristyf8f39d42014-02-22 21:44:38 +0000135extern MagickExport ChannelPerceptualHash
cristyb3538ec2014-02-22 23:13:34 +0000136 *GetImagePerceptualHash(const Image *,ExceptionInfo *);
cristyf8f39d42014-02-22 21:44:38 +0000137
cristy316d5172009-09-17 19:31:25 +0000138extern MagickExport Image
cristy99bd5232011-12-07 14:38:20 +0000139 *EvaluateImages(const Image *,const MagickEvaluateOperator,ExceptionInfo *),
cristyf56e6ad2012-11-11 19:29:38 +0000140 *PolynomialImage(const Image *,const size_t,const double *,ExceptionInfo *),
cristy99bd5232011-12-07 14:38:20 +0000141 *StatisticImage(const Image *,const StatisticType,const size_t,const size_t,
142 ExceptionInfo *);
cristy316d5172009-09-17 19:31:25 +0000143
cristy3ed852e2009-09-05 21:47:34 +0000144extern MagickExport MagickBooleanType
cristy351842f2010-03-07 15:27:38 +0000145 EvaluateImage(Image *,const MagickEvaluateOperator,const double,
146 ExceptionInfo *),
cristybb503372010-05-27 20:51:26 +0000147 FunctionImage(Image *,const MagickFunction,const size_t,const double *,
cristy351842f2010-03-07 15:27:38 +0000148 ExceptionInfo *),
cristy5ed838e2010-05-31 00:05:35 +0000149 GetImageExtrema(const Image *,size_t *,size_t *,ExceptionInfo *),
cristy3ed852e2009-09-05 21:47:34 +0000150 GetImageMean(const Image *,double *,double *,ExceptionInfo *),
cristyd42d9952011-07-08 14:21:50 +0000151 GetImageKurtosis(const Image *,double *,double *,ExceptionInfo *),
152 GetImageRange(const Image *,double *,double *,ExceptionInfo *);
cristy3ed852e2009-09-05 21:47:34 +0000153
154#if defined(__cplusplus) || defined(c_plusplus)
155}
156#endif
157
158#endif