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