#ifndef _MAGICKCORE_MORPHOLOGY_H
#define _MAGICKCORE_MORPHOLOGY_H
#include "magick/geometry.h"
#if defined(__cplusplus) || defined(c_plusplus)
extern "C" {
#endif
typedef enum
{
UndefinedKernel,
UnityKernel,
GaussianKernel,
DoGKernel,
LoGKernel,
BlurKernel,
CometKernel,
LaplacianKernel,
SobelKernel,
FreiChenKernel,
RobertsKernel,
PrewittKernel,
CompassKernel,
KirschKernel,
DiamondKernel,
SquareKernel,
RectangleKernel,
OctagonKernel,
DiskKernel,
PlusKernel,
CrossKernel,
RingKernel,
PeaksKernel,
EdgesKernel,
CornersKernel,
DiagonalsKernel,
LineEndsKernel,
LineJunctionsKernel,
RidgesKernel,
ConvexHullKernel,
ThinSEKernel,
SkeletonKernel,
ChebyshevKernel,
ManhattanKernel,
OctagonalKernel,
EuclideanKernel,
UserDefinedKernel,
BinomialKernel
} KernelInfoType;
typedef enum
{
UndefinedMorphology,
ConvolveMorphology,
CorrelateMorphology,
ErodeMorphology,
DilateMorphology,
ErodeIntensityMorphology,
DilateIntensityMorphology,
DistanceMorphology,
OpenMorphology,
CloseMorphology,
OpenIntensityMorphology,
CloseIntensityMorphology,
SmoothMorphology,
EdgeInMorphology,
EdgeOutMorphology,
EdgeMorphology,
TopHatMorphology,
BottomHatMorphology,
HitAndMissMorphology,
ThinningMorphology,
ThickenMorphology,
VoronoiMorphology,
IterativeDistanceMorphology
} MorphologyMethod;
typedef struct KernelInfo
{
KernelInfoType
type;
size_t
width,
height;
ssize_t
x,
y;
double
*values,
minimum,
maximum,
negative_range,
positive_range,
angle;
struct KernelInfo
*next;
size_t
signature;
} KernelInfo;
extern MagickExport KernelInfo
*AcquireKernelInfo(const char *),
*AcquireKernelBuiltIn(const KernelInfoType,const GeometryInfo *),
*CloneKernelInfo(const KernelInfo *),
*DestroyKernelInfo(KernelInfo *);
extern MagickExport Image
*MorphologyImage(const Image *,const MorphologyMethod,const ssize_t,
const KernelInfo *,ExceptionInfo *),
*MorphologyImageChannel(const Image *,const ChannelType,
const MorphologyMethod,const ssize_t,const KernelInfo *,ExceptionInfo *);
extern MagickExport void
ScaleGeometryKernelInfo(KernelInfo *,const char *),
ScaleKernelInfo(KernelInfo *,const double,const GeometryFlags),
ShowKernelInfo(const KernelInfo *),
UnityAddKernelInfo(KernelInfo *,const double);
#if defined(__cplusplus) || defined(c_plusplus)
}
#endif
#endif