morphology.h

Go to the documentation of this file.
00001 /*
00002   Copyright 1999-2020 ImageMagick Studio LLC, a non-profit organization
00003   dedicated to making software imaging solutions freely available.
00004   
00005   You may not use this file except in compliance with the License.  You may
00006   obtain a copy of the License at
00007   
00008     https://imagemagick.org/script/license.php
00009   
00010   Unless required by applicable law or agreed to in writing, software
00011   distributed under the License is distributed on an "AS IS" BASIS,
00012   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00013   See the License for the specific language governing permissions and
00014   limitations under the License.
00015 
00016   MagickCore morphology methods.
00017 */
00018 #ifndef MAGICKCORE_MORPHOLOGY_H
00019 #define MAGICKCORE_MORPHOLOGY_H
00020 
00021 #include "MagickCore/geometry.h"
00022 
00023 #if defined(__cplusplus) || defined(c_plusplus)
00024 extern "C" {
00025 #endif
00026 
00027 typedef enum
00028 {
00029   UndefinedKernel,    /* equivalent to UnityKernel */
00030   UnityKernel,        /* The no-op or 'original image' kernel */
00031   GaussianKernel,     /* Convolution Kernels, Gaussian Based */
00032   DoGKernel,
00033   LoGKernel,
00034   BlurKernel,
00035   CometKernel,
00036   BinomialKernel,
00037   LaplacianKernel,    /* Convolution Kernels, by Name */
00038   SobelKernel,
00039   FreiChenKernel,
00040   RobertsKernel,
00041   PrewittKernel,
00042   CompassKernel,
00043   KirschKernel,
00044   DiamondKernel,      /* Shape Kernels */
00045   SquareKernel,
00046   RectangleKernel,
00047   OctagonKernel,
00048   DiskKernel,
00049   PlusKernel,
00050   CrossKernel,
00051   RingKernel,
00052   PeaksKernel,         /* Hit And Miss Kernels */
00053   EdgesKernel,
00054   CornersKernel,
00055   DiagonalsKernel,
00056   LineEndsKernel,
00057   LineJunctionsKernel,
00058   RidgesKernel,
00059   ConvexHullKernel,
00060   ThinSEKernel,
00061   SkeletonKernel,
00062   ChebyshevKernel,    /* Distance Measuring Kernels */
00063   ManhattanKernel,
00064   OctagonalKernel,
00065   EuclideanKernel,
00066   UserDefinedKernel   /* User Specified Kernel Array */
00067 } KernelInfoType;
00068 
00069 typedef enum
00070 {
00071   UndefinedMorphology,
00072 /* Convolve / Correlate weighted sums */
00073   ConvolveMorphology,           /* Weighted Sum with reflected kernel */
00074   CorrelateMorphology,          /* Weighted Sum using a sliding window */
00075 /* Low-level Morphology methods */
00076   ErodeMorphology,              /* Minimum Value in Neighbourhood */
00077   DilateMorphology,             /* Maximum Value in Neighbourhood */
00078   ErodeIntensityMorphology,     /* Pixel Pick using GreyScale Erode */
00079   DilateIntensityMorphology,    /* Pixel Pick using GreyScale Dialate */
00080   IterativeDistanceMorphology,  /* Add Kernel Value, take Minimum */
00081 /* Second-level Morphology methods */
00082   OpenMorphology,               /* Dilate then Erode */
00083   CloseMorphology,              /* Erode then Dilate */
00084   OpenIntensityMorphology,      /* Pixel Pick using GreyScale Open */
00085   CloseIntensityMorphology,     /* Pixel Pick using GreyScale Close */
00086   SmoothMorphology,             /* Open then Close */
00087 /* Difference Morphology methods */
00088   EdgeInMorphology,             /* Dilate difference from Original */
00089   EdgeOutMorphology,            /* Erode difference from Original */
00090   EdgeMorphology,               /* Dilate difference with Erode */
00091   TopHatMorphology,             /* Close difference from Original */
00092   BottomHatMorphology,          /* Open difference from Original */
00093 /* Recursive Morphology methods */
00094   HitAndMissMorphology,         /* Foreground/Background pattern matching */
00095   ThinningMorphology,           /* Remove matching pixels from image */
00096   ThickenMorphology,            /* Add matching pixels from image */
00097 /* Directly Applied Morphology methods */
00098   DistanceMorphology,           /* Add Kernel Value, take Minimum */
00099   VoronoiMorphology             /* Distance matte channel copy nearest color */
00100 } MorphologyMethod;
00101 
00102 typedef struct _KernelInfo
00103 {
00104   KernelInfoType
00105     type;
00106 
00107   size_t
00108     width,
00109     height;
00110 
00111   ssize_t
00112     x,
00113     y;
00114 
00115   MagickRealType
00116     *values;
00117 
00118   double
00119     minimum,
00120     maximum,
00121     negative_range,
00122     positive_range,
00123     angle;
00124 
00125   struct _KernelInfo
00126     *next;
00127 
00128   size_t
00129     signature;
00130 } KernelInfo;
00131 
00132 extern MagickExport KernelInfo
00133   *AcquireKernelInfo(const char *,ExceptionInfo *),
00134   *AcquireKernelBuiltIn(const KernelInfoType,const GeometryInfo *,
00135     ExceptionInfo *),
00136   *CloneKernelInfo(const KernelInfo *),
00137   *DestroyKernelInfo(KernelInfo *);
00138 
00139 extern MagickExport Image
00140   *MorphologyImage(const Image *,const MorphologyMethod,const ssize_t,
00141     const KernelInfo *,ExceptionInfo *);
00142 
00143 extern MagickExport void
00144   ScaleGeometryKernelInfo(KernelInfo *,const char *),
00145   ScaleKernelInfo(KernelInfo *,const double,const GeometryFlags),
00146   UnityAddKernelInfo(KernelInfo *,const double);
00147 
00148 #if defined(__cplusplus) || defined(c_plusplus)
00149 }
00150 #endif
00151 
00152 #endif

Generated on 18 May 2020 for MagickCore by  doxygen 1.6.1