MagickCore 6.9.11-60
Convert, Edit, Or Compose Bitmap Images
morphology.h
Go to the documentation of this file.
1/*
2 Copyright 1999-2021 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 morphology methods.
17*/
18#ifndef MAGICKCORE_MORPHOLOGY_H
19#define MAGICKCORE_MORPHOLOGY_H
20
21#include "magick/geometry.h"
22
23#if defined(__cplusplus) || defined(c_plusplus)
24extern "C" {
25#endif
26
27typedef enum
28{
29 UndefinedKernel, /* equivalent to UnityKernel */
30 UnityKernel, /* The no-op or 'original image' kernel */
31 GaussianKernel, /* Convolution Kernels, Gaussian Based */
36 LaplacianKernel, /* Convolution Kernels, by Name */
43 DiamondKernel, /* Shape Kernels */
51 PeaksKernel, /* Hit And Miss Kernels */
61 ChebyshevKernel, /* Distance Measuring Kernels */
65 UserDefinedKernel, /* User Specified Kernel Array */
68
69typedef enum
70{
72/* Convolve / Correlate weighted sums */
73 ConvolveMorphology, /* Weighted Sum with reflected kernel */
74 CorrelateMorphology, /* Weighted Sum using a sliding window */
75/* Low-level Morphology methods */
76 ErodeMorphology, /* Minimum Value in Neighbourhood */
77 DilateMorphology, /* Maximum Value in Neighbourhood */
78 ErodeIntensityMorphology, /* Pixel Pick using GreyScale Erode */
79 DilateIntensityMorphology, /* Pixel Pick using GreyScale Dialate */
80 DistanceMorphology, /* Add Kernel Value, take Minimum */
81/* Second-level Morphology methods */
82 OpenMorphology, /* Dilate then Erode */
83 CloseMorphology, /* Erode then Dilate */
84 OpenIntensityMorphology, /* Pixel Pick using GreyScale Open */
85 CloseIntensityMorphology, /* Pixel Pick using GreyScale Close */
86 SmoothMorphology, /* Open then Close */
87/* Difference Morphology methods */
88 EdgeInMorphology, /* Dilate difference from Original */
89 EdgeOutMorphology, /* Erode difference from Original */
90 EdgeMorphology, /* Dilate difference with Erode */
91 TopHatMorphology, /* Close difference from Original */
92 BottomHatMorphology, /* Open difference from Original */
93/* Recursive Morphology methods */
94 HitAndMissMorphology, /* Foreground/Background pattern matching */
95 ThinningMorphology, /* Remove matching pixels from image */
96 ThickenMorphology, /* Add matching pixels from image */
97/* Experimental Morphology methods */
98 VoronoiMorphology, /* distance matte channel copy nearest color */
99 IterativeDistanceMorphology /* Add Kernel Value, take Minimum */
101
102typedef struct KernelInfo
103{
106
107 size_t
110
111 ssize_t
114
115 double
122
123 struct KernelInfo
125
126 size_t
129
131 *AcquireKernelInfo(const char *),
135
136extern MagickExport Image
137 *MorphologyImage(const Image *,const MorphologyMethod,const ssize_t,
138 const KernelInfo *,ExceptionInfo *),
140 const MorphologyMethod,const ssize_t,const KernelInfo *,ExceptionInfo *);
141
142extern MagickExport void
146 UnityAddKernelInfo(KernelInfo *,const double);
147
148#if defined(__cplusplus) || defined(c_plusplus)
149}
150#endif
151
152#endif
GeometryFlags
Definition geometry.h:26
ChannelType
Definition magick-type.h:169
#define MagickExport
Definition method-attribute.h:80
MagickExport KernelInfo * DestroyKernelInfo(KernelInfo *)
Definition morphology.c:2252
MagickExport void UnityAddKernelInfo(KernelInfo *, const double)
Definition morphology.c:4948
MagickExport KernelInfo * AcquireKernelBuiltIn(const KernelInfoType, const GeometryInfo *)
MagickExport KernelInfo * AcquireKernelInfo(const char *)
MorphologyMethod
Definition morphology.h:70
@ UndefinedMorphology
Definition morphology.h:71
@ ErodeMorphology
Definition morphology.h:76
@ DistanceMorphology
Definition morphology.h:80
@ DilateIntensityMorphology
Definition morphology.h:79
@ TopHatMorphology
Definition morphology.h:91
@ HitAndMissMorphology
Definition morphology.h:94
@ EdgeInMorphology
Definition morphology.h:88
@ CloseIntensityMorphology
Definition morphology.h:85
@ ConvolveMorphology
Definition morphology.h:73
@ BottomHatMorphology
Definition morphology.h:92
@ ErodeIntensityMorphology
Definition morphology.h:78
@ EdgeMorphology
Definition morphology.h:90
@ OpenMorphology
Definition morphology.h:82
@ ThickenMorphology
Definition morphology.h:96
@ DilateMorphology
Definition morphology.h:77
@ CloseMorphology
Definition morphology.h:83
@ ThinningMorphology
Definition morphology.h:95
@ VoronoiMorphology
Definition morphology.h:98
@ EdgeOutMorphology
Definition morphology.h:89
@ OpenIntensityMorphology
Definition morphology.h:84
@ IterativeDistanceMorphology
Definition morphology.h:99
@ CorrelateMorphology
Definition morphology.h:74
@ SmoothMorphology
Definition morphology.h:86
MagickExport void ScaleKernelInfo(KernelInfo *, const double, const GeometryFlags)
MagickExport void ShowKernelInfo(const KernelInfo *)
MagickExport Image * MorphologyImageChannel(const Image *, const ChannelType, const MorphologyMethod, const ssize_t, const KernelInfo *, ExceptionInfo *)
Definition morphology.c:4368
MagickExport KernelInfo * CloneKernelInfo(const KernelInfo *)
MagickExport void ScaleGeometryKernelInfo(KernelInfo *, const char *)
MagickExport Image * MorphologyImage(const Image *, const MorphologyMethod, const ssize_t, const KernelInfo *, ExceptionInfo *)
KernelInfoType
Definition morphology.h:28
@ DiamondKernel
Definition morphology.h:43
@ RidgesKernel
Definition morphology.h:57
@ SkeletonKernel
Definition morphology.h:60
@ DiagonalsKernel
Definition morphology.h:54
@ LineJunctionsKernel
Definition morphology.h:56
@ LaplacianKernel
Definition morphology.h:36
@ DiskKernel
Definition morphology.h:47
@ FreiChenKernel
Definition morphology.h:38
@ EuclideanKernel
Definition morphology.h:64
@ GaussianKernel
Definition morphology.h:31
@ DoGKernel
Definition morphology.h:32
@ OctagonKernel
Definition morphology.h:46
@ ThinSEKernel
Definition morphology.h:59
@ PeaksKernel
Definition morphology.h:51
@ OctagonalKernel
Definition morphology.h:63
@ SobelKernel
Definition morphology.h:37
@ CornersKernel
Definition morphology.h:53
@ LineEndsKernel
Definition morphology.h:55
@ RectangleKernel
Definition morphology.h:45
@ BlurKernel
Definition morphology.h:34
@ ManhattanKernel
Definition morphology.h:62
@ LoGKernel
Definition morphology.h:33
@ CometKernel
Definition morphology.h:35
@ PlusKernel
Definition morphology.h:48
@ EdgesKernel
Definition morphology.h:52
@ UserDefinedKernel
Definition morphology.h:65
@ PrewittKernel
Definition morphology.h:40
@ CompassKernel
Definition morphology.h:41
@ SquareKernel
Definition morphology.h:44
@ RingKernel
Definition morphology.h:50
@ RobertsKernel
Definition morphology.h:39
@ UndefinedKernel
Definition morphology.h:29
@ CrossKernel
Definition morphology.h:49
@ BinomialKernel
Definition morphology.h:66
@ ConvexHullKernel
Definition morphology.h:58
@ UnityKernel
Definition morphology.h:30
@ KirschKernel
Definition morphology.h:42
@ ChebyshevKernel
Definition morphology.h:61
Definition morphology.h:103
KernelInfoType type
Definition morphology.h:105
double positive_range
Definition morphology.h:120
struct KernelInfo * next
Definition morphology.h:123
size_t signature
Definition morphology.h:127
size_t height
Definition morphology.h:109
size_t width
Definition morphology.h:108
double angle
Definition morphology.h:121
double minimum
Definition morphology.h:117
double negative_range
Definition morphology.h:119
double maximum
Definition morphology.h:118
double * values
Definition morphology.h:116
ssize_t x
Definition morphology.h:112
ssize_t y
Definition morphology.h:113
Definition exception.h:103
Definition geometry.h:107
Definition image.h:153