blob: a410db372628dd6de0888e2e6f2b73f315897565 [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
cristy4cc7ead2014-10-18 14:49:43 +000026#define MaximumNumberOfPerceptualHashes 7
cristy3ac6aa92014-09-08 11:48:28 +000027
cristy3ed852e2009-09-05 21:47:34 +000028typedef struct _ChannelStatistics
29{
cristybb503372010-05-27 20:51:26 +000030 size_t
cristy3ed852e2009-09-05 21:47:34 +000031 depth;
32
33 double
cristy5048d302012-08-07 01:05:16 +000034 area,
cristy3ed852e2009-09-05 21:47:34 +000035 minima,
36 maxima,
cristyfd9dcd42010-08-08 18:07:02 +000037 sum,
38 sum_squared,
cristya8178ed2010-08-10 17:31:59 +000039 sum_cubed,
40 sum_fourth_power,
cristycf584452010-08-08 02:26:04 +000041 mean,
cristyfd9dcd42010-08-08 18:07:02 +000042 variance,
cristycf584452010-08-08 02:26:04 +000043 standard_deviation,
cristy3ed852e2009-09-05 21:47:34 +000044 kurtosis,
45 skewness;
46} ChannelStatistics;
47
cristybd4a3c22014-01-07 15:09:37 +000048typedef struct _ChannelMoments
49{
50 double
cristy57f71282014-10-04 12:32:50 +000051 invariant[MaximumNumberOfImageMoments+1];
cristy89298f32014-01-08 00:21:50 +000052
53 PointInfo
54 centroid,
55 ellipse_axis;
56
57 double
58 ellipse_angle,
59 ellipse_eccentricity,
60 ellipse_intensity;
cristybd4a3c22014-01-07 15:09:37 +000061} ChannelMoments;
62
cristyf8f39d42014-02-22 21:44:38 +000063typedef struct _ChannelPerceptualHash
64{
65 double
cristy3ac6aa92014-09-08 11:48:28 +000066 srgb_hu_phash[MaximumNumberOfImageMoments+1],
67 hclp_hu_phash[MaximumNumberOfImageMoments+1];
cristyf8f39d42014-02-22 21:44:38 +000068} ChannelPerceptualHash;
69
cristy351842f2010-03-07 15:27:38 +000070typedef enum
71{
72 UndefinedEvaluateOperator,
cristy95f562a2012-01-01 20:49:11 +000073 AbsEvaluateOperator,
cristy351842f2010-03-07 15:27:38 +000074 AddEvaluateOperator,
cristy95f562a2012-01-01 20:49:11 +000075 AddModulusEvaluateOperator,
cristy351842f2010-03-07 15:27:38 +000076 AndEvaluateOperator,
cristy95f562a2012-01-01 20:49:11 +000077 CosineEvaluateOperator,
cristy351842f2010-03-07 15:27:38 +000078 DivideEvaluateOperator,
cristy95f562a2012-01-01 20:49:11 +000079 ExponentialEvaluateOperator,
cristy351842f2010-03-07 15:27:38 +000080 GaussianNoiseEvaluateOperator,
81 ImpulseNoiseEvaluateOperator,
82 LaplacianNoiseEvaluateOperator,
cristy95f562a2012-01-01 20:49:11 +000083 LeftShiftEvaluateOperator,
84 LogEvaluateOperator,
85 MaxEvaluateOperator,
cristy33aaed22010-08-11 18:10:50 +000086 MeanEvaluateOperator,
cristy95f562a2012-01-01 20:49:11 +000087 MedianEvaluateOperator,
88 MinEvaluateOperator,
89 MultiplicativeNoiseEvaluateOperator,
90 MultiplyEvaluateOperator,
91 OrEvaluateOperator,
92 PoissonNoiseEvaluateOperator,
93 PowEvaluateOperator,
94 RightShiftEvaluateOperator,
cristy7c4c78f2014-06-15 21:57:39 +000095 RootMeanSquareEvaluateOperator,
cristy95f562a2012-01-01 20:49:11 +000096 SetEvaluateOperator,
97 SineEvaluateOperator,
98 SubtractEvaluateOperator,
cristy12a3f8e2012-01-31 01:53:19 +000099 SumEvaluateOperator,
cristy95f562a2012-01-01 20:49:11 +0000100 ThresholdBlackEvaluateOperator,
101 ThresholdEvaluateOperator,
102 ThresholdWhiteEvaluateOperator,
103 UniformNoiseEvaluateOperator,
104 XorEvaluateOperator
cristy351842f2010-03-07 15:27:38 +0000105} MagickEvaluateOperator;
106
107typedef enum
108{
109 UndefinedFunction,
110 PolynomialFunction,
111 SinusoidFunction,
112 ArcsinFunction,
113 ArctanFunction
114} MagickFunction;
115
cristy99bd5232011-12-07 14:38:20 +0000116typedef enum
117{
118 UndefinedStatistic,
119 GradientStatistic,
120 MaximumStatistic,
121 MeanStatistic,
122 MedianStatistic,
123 MinimumStatistic,
124 ModeStatistic,
125 NonpeakStatistic,
cristy180908c2014-06-15 13:01:43 +0000126 RootMeanSquareStatistic,
cristy99bd5232011-12-07 14:38:20 +0000127 StandardDeviationStatistic
128} StatisticType;
129
cristy3ed852e2009-09-05 21:47:34 +0000130extern MagickExport ChannelStatistics
cristyd42d9952011-07-08 14:21:50 +0000131 *GetImageStatistics(const Image *,ExceptionInfo *);
cristy3ed852e2009-09-05 21:47:34 +0000132
cristybd4a3c22014-01-07 15:09:37 +0000133extern MagickExport ChannelMoments
134 *GetImageMoments(const Image *,ExceptionInfo *);
135
cristyf8f39d42014-02-22 21:44:38 +0000136extern MagickExport ChannelPerceptualHash
cristyb3538ec2014-02-22 23:13:34 +0000137 *GetImagePerceptualHash(const Image *,ExceptionInfo *);
cristyf8f39d42014-02-22 21:44:38 +0000138
cristy316d5172009-09-17 19:31:25 +0000139extern MagickExport Image
cristy99bd5232011-12-07 14:38:20 +0000140 *EvaluateImages(const Image *,const MagickEvaluateOperator,ExceptionInfo *),
cristyf56e6ad2012-11-11 19:29:38 +0000141 *PolynomialImage(const Image *,const size_t,const double *,ExceptionInfo *),
cristy99bd5232011-12-07 14:38:20 +0000142 *StatisticImage(const Image *,const StatisticType,const size_t,const size_t,
143 ExceptionInfo *);
cristy316d5172009-09-17 19:31:25 +0000144
cristy3ed852e2009-09-05 21:47:34 +0000145extern MagickExport MagickBooleanType
cristy351842f2010-03-07 15:27:38 +0000146 EvaluateImage(Image *,const MagickEvaluateOperator,const double,
147 ExceptionInfo *),
cristybb503372010-05-27 20:51:26 +0000148 FunctionImage(Image *,const MagickFunction,const size_t,const double *,
cristy351842f2010-03-07 15:27:38 +0000149 ExceptionInfo *),
cristy5ed838e2010-05-31 00:05:35 +0000150 GetImageExtrema(const Image *,size_t *,size_t *,ExceptionInfo *),
cristy3ed852e2009-09-05 21:47:34 +0000151 GetImageMean(const Image *,double *,double *,ExceptionInfo *),
cristyd42d9952011-07-08 14:21:50 +0000152 GetImageKurtosis(const Image *,double *,double *,ExceptionInfo *),
153 GetImageRange(const Image *,double *,double *,ExceptionInfo *);
cristy3ed852e2009-09-05 21:47:34 +0000154
155#if defined(__cplusplus) || defined(c_plusplus)
156}
157#endif
158
159#endif