• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2   Copyright 1999-2016 ImageMagick Studio LLC, a non-profit organization
3   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 
16   MagickCore statistical methods.
17 */
18 #ifndef MAGICKCORE_STATISTIC_H
19 #define MAGICKCORE_STATISTIC_H
20 
21 #if defined(__cplusplus) || defined(c_plusplus)
22 extern "C" {
23 #endif
24 
25 #define MaximumNumberOfImageMoments  8
26 #define MaximumNumberOfPerceptualHashes  7
27 
28 typedef struct _ChannelStatistics
29 {
30   size_t
31     depth;
32 
33   double
34     area,
35     minima,
36     maxima,
37     sum,
38     sum_squared,
39     sum_cubed,
40     sum_fourth_power,
41     mean,
42     variance,
43     standard_deviation,
44     kurtosis,
45     skewness,
46     entropy;
47 } ChannelStatistics;
48 
49 typedef struct _ChannelMoments
50 {
51   double
52      invariant[MaximumNumberOfImageMoments+1];
53 
54   PointInfo
55     centroid,
56     ellipse_axis;
57 
58   double
59     ellipse_angle,
60     ellipse_eccentricity,
61     ellipse_intensity;
62 } ChannelMoments;
63 
64 typedef struct _ChannelPerceptualHash
65 {
66   double
67     srgb_hu_phash[MaximumNumberOfImageMoments+1],
68     hclp_hu_phash[MaximumNumberOfImageMoments+1];
69 } ChannelPerceptualHash;
70 
71 typedef enum
72 {
73   UndefinedEvaluateOperator,
74   AbsEvaluateOperator,
75   AddEvaluateOperator,
76   AddModulusEvaluateOperator,
77   AndEvaluateOperator,
78   CosineEvaluateOperator,
79   DivideEvaluateOperator,
80   ExponentialEvaluateOperator,
81   GaussianNoiseEvaluateOperator,
82   ImpulseNoiseEvaluateOperator,
83   LaplacianNoiseEvaluateOperator,
84   LeftShiftEvaluateOperator,
85   LogEvaluateOperator,
86   MaxEvaluateOperator,
87   MeanEvaluateOperator,
88   MedianEvaluateOperator,
89   MinEvaluateOperator,
90   MultiplicativeNoiseEvaluateOperator,
91   MultiplyEvaluateOperator,
92   OrEvaluateOperator,
93   PoissonNoiseEvaluateOperator,
94   PowEvaluateOperator,
95   RightShiftEvaluateOperator,
96   RootMeanSquareEvaluateOperator,
97   SetEvaluateOperator,
98   SineEvaluateOperator,
99   SubtractEvaluateOperator,
100   SumEvaluateOperator,
101   ThresholdBlackEvaluateOperator,
102   ThresholdEvaluateOperator,
103   ThresholdWhiteEvaluateOperator,
104   UniformNoiseEvaluateOperator,
105   XorEvaluateOperator
106 } MagickEvaluateOperator;
107 
108 typedef enum
109 {
110   UndefinedFunction,
111   ArcsinFunction,
112   ArctanFunction,
113   PolynomialFunction,
114   SinusoidFunction
115 } MagickFunction;
116 
117 typedef enum
118 {
119   UndefinedStatistic,
120   GradientStatistic,
121   MaximumStatistic,
122   MeanStatistic,
123   MedianStatistic,
124   MinimumStatistic,
125   ModeStatistic,
126   NonpeakStatistic,
127   RootMeanSquareStatistic,
128   StandardDeviationStatistic
129 } StatisticType;
130 
131 extern MagickExport ChannelStatistics
132   *GetImageStatistics(const Image *,ExceptionInfo *);
133 
134 extern MagickExport ChannelMoments
135   *GetImageMoments(const Image *,ExceptionInfo *);
136 
137 extern MagickExport ChannelPerceptualHash
138   *GetImagePerceptualHash(const Image *,ExceptionInfo *);
139 
140 extern MagickExport Image
141   *EvaluateImages(const Image *,const MagickEvaluateOperator,ExceptionInfo *),
142   *PolynomialImage(const Image *,const size_t,const double *,ExceptionInfo *),
143   *StatisticImage(const Image *,const StatisticType,const size_t,const size_t,
144     ExceptionInfo *);
145 
146 extern MagickExport MagickBooleanType
147   EvaluateImage(Image *,const MagickEvaluateOperator,const double,
148     ExceptionInfo *),
149   FunctionImage(Image *,const MagickFunction,const size_t,const double *,
150     ExceptionInfo *),
151   GetImageEntropy(const Image *,double *,ExceptionInfo *),
152   GetImageExtrema(const Image *,size_t *,size_t *,ExceptionInfo *),
153   GetImageMean(const Image *,double *,double *,ExceptionInfo *),
154   GetImageKurtosis(const Image *,double *,double *,ExceptionInfo *),
155   GetImageRange(const Image *,double *,double *,ExceptionInfo *);
156 
157 #if defined(__cplusplus) || defined(c_plusplus)
158 }
159 #endif
160 
161 #endif
162