summaryrefslogtreecommitdiff
path: root/dmagick/c/morphology.d
blob: 247838731365f2bb89ee81c7cd0693519a2bbff5 (plain)
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
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,
		UnityKernel,
		GaussianKernel,
		DoGKernel,
		LoGKernel,
		BlurKernel,
		CometKernel,
		LaplacianKernel,
		SobelKernel,
		FreiChenKernel,
		RobertsKernel,
		PrewittKernel,
		CompassKernel,
		KirschKernel,
		DiamondKernel,
		SquareKernel,
		RectangleKernel,
		DiskKernel,
		PlusKernel,
		CrossKernel,
		RingKernel,
		PeaksKernel,
		EdgesKernel,
		CornersKernel,
		ThinDiagonalsKernel,
		LineEndsKernel,
		LineJunctionsKernel,
		RidgesKernel,
		ConvexHullKernel,
		SkeletonKernel,
		ChebyshevKernel,
		ManhattanKernel,
		EuclideanKernel,
		UserDefinedKernel
	}

	enum MorphologyMethod
	{
		UndefinedMorphology,

		ConvolveMorphology,
		CorrelateMorphology,

		ErodeMorphology,
		DilateMorphology,
		ErodeIntensityMorphology,
		DilateIntensityMorphology,
		DistanceMorphology,

		OpenMorphology,
		CloseMorphology,
		OpenIntensityMorphology,
		CloseIntensityMorphology,
		SmoothMorphology,

		EdgeInMorphology,
		EdgeOutMorphology,
		EdgeMorphology,
		TopHatMorphology,
		BottomHatMorphology,

		HitAndMissMorphology,
		ThinningMorphology,
		ThickenMorphology
	}

	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(KernelInfo*);
}