1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
module dmagick.c.morphology;
import core.sys.posix.sys.types;
import dmagick.c.exception;
import dmagick.c.geometry;
import dmagick.c.image;
import dmagick.c.magickType;
extern(C)
{
enum KernelInfoType
{
UndefinedKernel, /* equivelent to UnityKernel */
UnityKernel, /* The no-op or 'original image' kernel */
GaussianKernel, /* Convolution Kernels, Gaussian Based */
DoGKernel,
LoGKernel,
BlurKernel,
CometKernel,
LaplacianKernel, /* Convolution Kernels, by Name */
SobelKernel,
FreiChenKernel,
RobertsKernel,
PrewittKernel,
CompassKernel,
KirschKernel,
DiamondKernel, /* Shape Kernels */
SquareKernel,
RectangleKernel,
OctagonKernel,
DiskKernel,
PlusKernel,
CrossKernel,
RingKernel,
PeaksKernel, /* Hit And Miss Kernels */
EdgesKernel,
CornersKernel,
ThinDiagonalsKernel,
LineEndsKernel,
LineJunctionsKernel,
RidgesKernel,
ConvexHullKernel,
SkeletonKernel,
ChebyshevKernel, /* Distance Measuring Kernels */
ManhattanKernel,
EuclideanKernel,
UserDefinedKernel /* User Specified Kernel Array */
}
enum MorphologyMethod
{
UndefinedMorphology,
/* Convolve / Correlate weighted sums */
ConvolveMorphology, /* Weighted Sum with reflected kernel */
CorrelateMorphology, /* Weighted Sum using a sliding window */
/* Low-level Morphology methods */
ErodeMorphology, /* Minimum Value in Neighbourhood */
DilateMorphology, /* Maximum Value in Neighbourhood */
ErodeIntensityMorphology, /* Pixel Pick using GreyScale Erode */
DilateIntensityMorphology, /* Pixel Pick using GreyScale Dialate */
DistanceMorphology, /* Add Kernel Value, take Minimum */
/* Second-level Morphology methods */
OpenMorphology, /* Dilate then Erode */
CloseMorphology, /* Erode then Dilate */
OpenIntensityMorphology, /* Pixel Pick using GreyScale Open */
CloseIntensityMorphology, /* Pixel Pick using GreyScale Close */
SmoothMorphology, /* Open then Close */
/* Difference Morphology methods */
EdgeInMorphology, /* Dilate difference from Original */
EdgeOutMorphology, /* Erode difference from Original */
EdgeMorphology, /* Dilate difference with Erode */
TopHatMorphology, /* Close difference from Original */
BottomHatMorphology, /* Open difference from Original */
/* Recursive Morphology methods */
HitAndMissMorphology, /* Foreground/Background pattern matching */
ThinningMorphology, /* Remove matching pixels from image */
ThickenMorphology, /* Add matching pixels from image */
/* Experimental Morphology methods */
VoronoiMorphology
}
struct KernelInfo
{
KernelInfoType
type;
size_t
width,
height;
ssize_t
x,
y;
double* values;
double
minimum,
maximum,
negative_range,
positive_range,
angle;
KernelInfo*
next;
size_t
signature;
}
KernelInfo* AcquireKernelInfo(const(char)*);
KernelInfo* AcquireKernelBuiltIn(const KernelInfoType, const(GeometryInfo)*);
KernelInfo* CloneKernelInfo(const(KernelInfo)*);
KernelInfo* DestroyKernelInfo(KernelInfo*);
Image* MorphologyImage(const(Image)*, const MorphologyMethod, const ssize_t, const(KernelInfo)*, ExceptionInfo*);
Image* MorphologyImageChannel(const(Image)*, const ChannelType, const MorphologyMethod, const ssize_t, const(KernelInfo)*, ExceptionInfo*);
void ScaleGeometryKernelInfo(KernelInfo*, const(char)*);
void ShowKernelInfo(const(KernelInfo)*);
}
|