-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathdip-ChainCode.html
356 lines (353 loc) · 24.8 KB
/
dip-ChainCode.html
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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>dip::ChainCode struct | DIPlib | a library for quantitative image analysis</title>
<link rel="stylesheet" href="m-dip+documentation.compiled.css" />
<link rel="icon" href="DIPlib_logo_32.png" type="image/png" />
<link rel="search" type="application/opensearchdescription+xml" href="opensearch.xml" title="Search DIPlib documentation" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="theme-color" content="#ffffff" />
</head>
<body>
<header><nav id="navigation">
<div class="m-container">
<div class="m-row">
<span id="m-navbar-brand" class="m-col-t-8 m-col-m-none m-left-m">
<a href="https://diplib.org"><img src="DIPlib_logo.svg" alt="" />DIPlib</a><span class="m-breadcrumb">┃</span><a href="index.html" class="m-thin">a library for quantitative image analysis</a><span class="m-breadcrumb">┃</span><a href="https://github.com/DIPlib/diplib/releases/tag/3.5.2" class="m-thin">version 3.5.2</a> </span>
<div class="m-col-t-4 m-hide-m m-text-right m-nopadr">
<a href="#search" class="m-doc-search-icon" title="Search" onclick="return showSearch()"><svg style="height: 0.9rem;" viewBox="0 0 16 16">
<path id="m-doc-search-icon-path" d="m6 0c-3.31 0-6 2.69-6 6 0 3.31 2.69 6 6 6 1.49 0 2.85-0.541 3.89-1.44-0.0164 0.338 0.147 0.759 0.5 1.15l3.22 3.79c0.552 0.614 1.45 0.665 2 0.115 0.55-0.55 0.499-1.45-0.115-2l-3.79-3.22c-0.392-0.353-0.812-0.515-1.15-0.5 0.895-1.05 1.44-2.41 1.44-3.89 0-3.31-2.69-6-6-6zm0 1.56a4.44 4.44 0 0 1 4.44 4.44 4.44 4.44 0 0 1-4.44 4.44 4.44 4.44 0 0 1-4.44-4.44 4.44 4.44 0 0 1 4.44-4.44z"/>
</svg></a>
<a id="m-navbar-show" href="#navigation" title="Show navigation"></a>
<a id="m-navbar-hide" href="#" title="Hide navigation"></a>
</div>
<div id="m-navbar-collapse" class="m-col-t-12 m-show-m m-col-m-none m-right-m">
<div class="m-row">
<ol class="m-col-t-6 m-col-m-none">
<li><a href="pages.html">Pages</a></li>
<li><a href="modules.html">Modules</a></li>
</ol>
<ol class="m-col-t-6 m-col-m-none" start="3">
<li><a href="classes.html">Classes</a></li>
<li><a href="files.html">Files</a></li>
<li class="m-show-m"><a href="#search" class="m-doc-search-icon" title="Search" onclick="return showSearch()"><svg style="height: 0.9rem;" viewBox="0 0 16 16">
<use href="#m-doc-search-icon-path" />
</svg></a></li>
</ol>
</div>
</div>
</div>
</div>
</nav></header>
<main><article>
<div class="m-container m-container-inflatable">
<div class="m-row">
<div class="m-col-l-10 m-push-l-1">
<h1>
<div class="m-doc-include m-thin m-right-m m-text-right">
<a href="measurement.html" class="m-doc">Measurement</a> module<br/><span class="m-code m-thin">#include <a href="file--diplib--chain_code-h.html">"diplib/chain_code.h"</a></span> </div>
<span class="m-breadcrumb"><a href="dip.html">dip</a>::<wbr/></span>ChainCode <span class="m-thin">struct</span> </h1>
<p>The contour of an object as a chain code sequence.</p>
<div class="m-block m-default">
<h3>Contents</h3>
<ul>
<li>
Reference
<ul>
<li><a href="#nested-classes">Classes</a></li>
<li><a href="#function-members">Functions</a></li>
<li><a href="#variable-members">Variables</a></li>
<li><a href="#related">Related</a></li>
</ul>
</li>
</ul>
</div>
<p>This class supports 4-connected and 8-connected chain codes, see the <code>Code</code> definition for a description of the
chain codes.</p>
<p>A default-initialized <code>ChainCode</code> represents no object (<code>Empty</code> returns true). Set the <code>start</code> value to
represent a 1-pixel object. Larger objects have at least two values in the chain code. A chain code with a
single value is illegal.</p>
<section id="nested-classes">
<h2>Classes</h2>
<dl class="m-doc">
<dt>
struct <a href="#dip-ChainCode-CodeTable" class="m-doc">CodeTable</a>
</dt>
<dd>Provides data that are helpful when processing chain codes. <a href="#dip-ChainCode-CodeTable">more...</a></dd>
<dt>
class <a href="dip-ChainCode-Code.html" class="m-doc">Code</a>
</dt>
<dd>Encodes a single chain code, as used by <a href="dip-ChainCode.html"><code>dip::ChainCode</code></a>.</dd>
</dl>
</section>
<section id="function-members">
<h2>Functions</h2>
<dl class="m-doc">
<dt id="dip-ChainCode-Push-Code-CL">
<span class="m-doc-wrap-bumper">void <a href="#dip-ChainCode-Push-Code-CL" class="m-doc-self">Push</a>(</span><span class="m-doc-wrap"><a href="dip-ChainCode-Code.html" class="m-doc">dip::ChainCode::Code</a> const& code)</span>
</dt>
<dd>Adds a code to the end of the chain.</dd>
<dt id="dip-ChainCode-PrepareCodeTable-IntegerArray-CL-C">
<span class="m-doc-wrap-bumper">auto <a href="#dip-ChainCode-PrepareCodeTable-IntegerArray-CL-C" class="m-doc-self">PrepareCodeTable</a>(</span><span class="m-doc-wrap"><a href="supporttypes.html#dip-IntegerArray" class="m-doc">dip::IntegerArray</a> const& strides) const -> <a href="dip-ChainCode.html#dip-ChainCode-CodeTable" class="m-doc">dip::ChainCode::CodeTable</a></span>
</dt>
<dd>Returns a table that is useful when processing the chain code</dd>
<dt id="dip-ChainCode-PrepareCodeTable-dip-uint--IntegerArray-CL">
<span class="m-doc-wrap-bumper">static auto <a href="#dip-ChainCode-PrepareCodeTable-dip-uint--IntegerArray-CL" class="m-doc-self">PrepareCodeTable</a>(</span><span class="m-doc-wrap"><a href="supporttypes.html#dip-uint" class="m-doc">dip::uint</a> connectivity,
<a href="supporttypes.html#dip-IntegerArray" class="m-doc">dip::IntegerArray</a> const& strides) -> <a href="dip-ChainCode.html#dip-ChainCode-CodeTable" class="m-doc">dip::ChainCode::CodeTable</a></span>
</dt>
<dd>Returns a table that is useful when processing the chain code</dd>
<dt id="dip-ChainCode-ConvertTo8Connected-C">
<span class="m-doc-wrap-bumper">auto <a href="#dip-ChainCode-ConvertTo8Connected-C" class="m-doc-self">ConvertTo8Connected</a>(</span><span class="m-doc-wrap">) const -> <a href="dip-ChainCode.html" class="m-doc">dip::ChainCode</a></span>
</dt>
<dd>Creates a new chain code object that is 8-connected and represents the same shape.</dd>
<dt id="dip-ChainCode-Empty-C">
<span class="m-doc-wrap-bumper">auto <a href="#dip-ChainCode-Empty-C" class="m-doc-self">Empty</a>(</span><span class="m-doc-wrap">) const -> bool</span>
</dt>
<dd>A chain code whose <code>start</code> value hasn’t been set is considered empty.</dd>
<dt>
<span class="m-doc-wrap-bumper">auto <a href="#dip-ChainCode-Length-String-CL-C" class="m-doc">Length</a>(</span><span class="m-doc-wrap"><a href="supporttypes.html#dip-String" class="m-doc">dip::String</a> const& boundaryPixels = S::EXCLUDE) const -> <a href="pixeltypes.html#dip-dfloat" class="m-doc">dip::dfloat</a></span>
</dt>
<dd>Returns the length of the chain code using the method by Vossepoel and Smeulders. <a href="#dip-ChainCode-Length-String-CL-C">more...</a></dd>
<dt id="dip-ChainCode-Feret-dfloat--C">
<span class="m-doc-wrap-bumper">auto <a href="#dip-ChainCode-Feret-dfloat--C" class="m-doc-self">Feret</a>(</span><span class="m-doc-wrap"><a href="pixeltypes.html#dip-dfloat" class="m-doc">dip::dfloat</a> angleStep = 5.0/180.0*pi) const -> <a href="measurement.html#dip-FeretValues" class="m-doc">dip::FeretValues</a></span>
</dt>
<dd>Returns the Feret diameters, using an angular step size in radian of <code>angleStep</code>.
It is better to use <a href="dip-ConvexHull.html#dip-ConvexHull-Feret-C"><code>dip::ConvexHull::Feret</code></a>.</dd>
<dt>
<span class="m-doc-wrap-bumper">auto <a href="#dip-ChainCode-BendingEnergy-C" class="m-doc">BendingEnergy</a>(</span><span class="m-doc-wrap">) const -> <a href="pixeltypes.html#dip-dfloat" class="m-doc">dip::dfloat</a></span>
</dt>
<dd>Computes the bending energy. <a href="#dip-ChainCode-BendingEnergy-C">more...</a></dd>
<dt id="dip-ChainCode-Area-C">
<span class="m-doc-wrap-bumper">auto <a href="#dip-ChainCode-Area-C" class="m-doc-self">Area</a>(</span><span class="m-doc-wrap">) const -> <a href="pixeltypes.html#dip-dfloat" class="m-doc">dip::dfloat</a></span>
</dt>
<dd>Computes the area of the solid object described by the chain code. Uses the result of
<a href="dip-ChainCode.html#dip-ChainCode-Polygon-C"><code>dip::ChainCode::Polygon</code></a>, so if you plan to do multiple similar measures, extract the polygon and
compute the measures on that.</dd>
<dt id="dip-ChainCode-Centroid-C">
<span class="m-doc-wrap-bumper">auto <a href="#dip-ChainCode-Centroid-C" class="m-doc-self">Centroid</a>(</span><span class="m-doc-wrap">) const -> <a href="dip-Vertex-T.html#dip-VertexFloat" class="m-doc">dip::VertexFloat</a></span>
</dt>
<dd>Computes the centroid of the solid object described by the chain code. Uses the result of
<a href="dip-ChainCode.html#dip-ChainCode-Polygon-C"><code>dip::ChainCode::Polygon</code></a>, so if you plan to do multiple similar measures, extract the polygon and
compute the measures on that.</dd>
<dt id="dip-ChainCode-BoundingBox-C">
<span class="m-doc-wrap-bumper">auto <a href="#dip-ChainCode-BoundingBox-C" class="m-doc-self">BoundingBox</a>(</span><span class="m-doc-wrap">) const -> <a href="dip-BoundingBox-T.html#dip-BoundingBoxInteger" class="m-doc">dip::BoundingBoxInteger</a></span>
</dt>
<dd>Finds the bounding box for the object described by the chain code.</dd>
<dt id="dip-ChainCode-LongestRun-C">
<span class="m-doc-wrap-bumper">auto <a href="#dip-ChainCode-LongestRun-C" class="m-doc-self">LongestRun</a>(</span><span class="m-doc-wrap">) const -> <a href="supporttypes.html#dip-uint" class="m-doc">dip::uint</a></span>
</dt>
<dd>Returns the length of the longest run of identical chain codes.</dd>
<dt>
<span class="m-doc-wrap-bumper">auto <a href="#dip-ChainCode-Polygon-C" class="m-doc">Polygon</a>(</span><span class="m-doc-wrap">) const -> <a href="dip-Polygon.html" class="m-doc">dip::Polygon</a></span>
</dt>
<dd>Returns a polygon representation of the object. <a href="#dip-ChainCode-Polygon-C">more...</a></dd>
<dt id="dip-ChainCode-ConvexHull-C">
<span class="m-doc-wrap-bumper">auto <a href="#dip-ChainCode-ConvexHull-C" class="m-doc-self">ConvexHull</a>(</span><span class="m-doc-wrap">) const -> <a href="dip-ConvexHull.html" class="m-doc">dip::ConvexHull</a></span>
</dt>
<dd>Returns the convex hull of the object, see <a href="dip-ChainCode.html#dip-ChainCode-Polygon-C"><code>dip::ChainCode::Polygon</code></a>.</dd>
<dt id="dip-ChainCode-Image-dip-Image-L-C">
<span class="m-doc-wrap-bumper">void <a href="#dip-ChainCode-Image-dip-Image-L-C" class="m-doc-self">Image</a>(</span><span class="m-doc-wrap"><a href="dip-Image.html" class="m-doc">dip::Image</a>& out) const</span>
</dt>
<dd>Paints the pixels traced by the chain code in a binary image. The image has the size of the
<a href="dip-ChainCode.html#dip-ChainCode-BoundingBox-C"><code>dip::ChainCode::BoundingBox</code></a>.</dd>
<dt>
<span class="m-doc-wrap-bumper">auto <a href="#dip-ChainCode-Coordinates-C" class="m-doc">Coordinates</a>(</span><span class="m-doc-wrap">) const -> <a href="supporttypes.html#dip-CoordinateArray" class="m-doc">dip::CoordinateArray</a></span>
</dt>
<dd>Returns the pixel coordinates for each of the pixels represented in the chain code. <a href="#dip-ChainCode-Coordinates-C">more...</a></dd>
<dt id="dip-ChainCode-Offset-C">
<span class="m-doc-wrap-bumper">auto <a href="#dip-ChainCode-Offset-C" class="m-doc-self">Offset</a>(</span><span class="m-doc-wrap">) const -> <a href="dip-ChainCode.html" class="m-doc">dip::ChainCode</a></span>
</dt>
<dd>Create a new chain code that goes around the object in the same direction, but traces the background
pixels that are 4-connected to the object. That is, it grows the object by one pixel. Only defined for
8-connected chain codes.</dd>
</dl>
</section>
<section id="variable-members">
<h2>Variables</h2>
<dl class="m-doc">
<dt id="dip-ChainCode-codes">
std::vector<Code> <a href="#dip-ChainCode-codes" class="m-doc-self">codes</a>
</dt>
<dd>The chain codes</dd>
<dt id="dip-ChainCode-start">
<a href="dip-Vertex-T.html#dip-VertexInteger" class="m-doc">dip::VertexInteger</a> <a href="#dip-ChainCode-start" class="m-doc-self">start</a>
= {-1,-1}
</dt>
<dd>The coordinates of the start pixel, the default value is outside the image to indicate there’s no chain code here</dd>
<dt id="dip-ChainCode-objectID">
<a href="pixeltypes.html#dip-LabelType" class="m-doc">dip::LabelType</a> <a href="#dip-ChainCode-objectID" class="m-doc-self">objectID</a>
= 0
</dt>
<dd>The label of the object from which this chain code is taken</dd>
<dt id="dip-ChainCode-is8connected">
bool <a href="#dip-ChainCode-is8connected" class="m-doc-self">is8connected</a>
= true
</dt>
<dd>Is false when connectivity = 1, true when connectivity = 2</dd>
</dl>
</section>
<section id="related">
<h2>Related</h2>
<dl class="m-doc">
<dt id="dip-ChainCodeArray">
using <a href="#dip-ChainCodeArray" class="m-doc-self">dip::<wbr />ChainCodeArray</a> = std::vector<ChainCode>
</dt>
<dd>A collection of object contours.</dd>
</dl>
</section>
<section>
<h2>Class documentation</h2>
<section class="m-doc-details" id="dip-ChainCode-CodeTable"><div>
<h3>
struct <a href="#dip-ChainCode-CodeTable" class="m-doc-self">CodeTable</a>
</h3>
<p>Provides data that are helpful when processing chain codes.</p>
<p>The table is prepared using the <a href="dip-ChainCode.html#dip-ChainCode-PrepareCodeTable-IntegerArray-CL-C"><code>dip::ChainCode::PrepareCodeTable</code></a> method. The method takes a stride array,
which is expected to have exactly two elements (as chain codes only work with 2D images). The returned
table contains a value <code>pos[code]</code> that says how the coordinates change when moving in the direction of the
<code>code</code>, and a value <code>offset[code]</code> that says how to modify the image data pointer to reach the new pixel.</p>
<p><code>pos[code]</code> is identical to <code>code.Delta8()</code> or <code>code.Delta4()</code> (depending on connectivity).</p>
<p>No checking is done when indexing. If the <code>CodeTable</code> is derived from a 4-connected chain code, only the
first four table elements can be used. Otherwise, eight table elements exist and are valid.</p>
<table class="m-table m-fullwidth m-first-tight m-flat m-doc">
<thead><tr><th>Variables</th><th></th></tr></thead>
<tbody>
<tr>
<td>
<a href="dip-Vertex-T.html#dip-VertexInteger" class="m-doc">dip::VertexInteger</a> const* <a href="#dip-ChainCode-CodeTable-pos" class="m-doc-self" id="dip-ChainCode-CodeTable-pos">pos</a> </td>
<td>
Array with position offsets for each chain code.
</td>
</tr>
<tr>
<td>
std::array<dip::sint, 8> <a href="#dip-ChainCode-CodeTable-offset" class="m-doc-self" id="dip-ChainCode-CodeTable-offset">offset</a> </td>
<td>
Array with pointer offsets for each chain code.
</td>
</tr>
</tbody>
</table>
</div></section>
</section>
<section>
<h2>Function documentation</h2>
<section class="m-doc-details" id="dip-ChainCode-Length-String-CL-C"><div>
<h3>
<span class="m-doc-wrap-bumper"><a href="pixeltypes.html#dip-dfloat" class="m-doc">dip::dfloat</a>
</span><span class="m-doc-wrap"><span class="m-doc-wrap-bumper"><a href="#dip-ChainCode-Length-String-CL-C" class="m-doc-self">Length</a>(</span><span class="m-doc-wrap"><a href="supporttypes.html#dip-String" class="m-doc">dip::String</a> const& boundaryPixels = S::EXCLUDE) const</span></span>
</h3>
<p>Returns the length of the chain code using the method by Vossepoel and Smeulders.</p>
<p>If the chain code represents the closed contour of an object, add π to the result to determine
the object’s perimeter.</p>
<p>Any portions of the chain code that run along the image edge are not measured by default. That is, for
an object that is only partially inside the image, the portion of the object’s perimeter that
is inside of the image is measured, the edge created by cutting the object is not. To include those
portions of the perimeter, set <code>boundaryPixels</code> to <code>"include"</code>.</p>
<aside class="m-note m-default">
<h4>Literature</h4>
<ul>
<li>A.M. Vossepoel and A.W.M. Smeulders, “Vector code probability and metrication error in the representation
of straight lines of finite length”, Computer Graphics and Image Processing 20(4):347-364, 1982.</li>
</ul>
</aside>
</div></section>
<section class="m-doc-details" id="dip-ChainCode-BendingEnergy-C"><div>
<h3>
<span class="m-doc-wrap-bumper"><a href="pixeltypes.html#dip-dfloat" class="m-doc">dip::dfloat</a>
</span><span class="m-doc-wrap"><span class="m-doc-wrap-bumper"><a href="#dip-ChainCode-BendingEnergy-C" class="m-doc-self">BendingEnergy</a>(</span><span class="m-doc-wrap">) const</span></span>
</h3>
<p>Computes the bending energy.</p>
<p>Computes the bending energy directly from the chain code. The algorithm is rather imprecise. It is better
to use <a href="dip-Polygon.html#dip-Polygon-BendingEnergy-C"><code>dip::Polygon::BendingEnergy</code></a>.</p>
<aside class="m-note m-default">
<h4>Literature</h4>
<ul>
<li>I.T. Young, J.E. Walker and J.E. Bowie, “An Analysis Technique for Biological Shape I”,
Information and Control 25(4):357-370, 1974.</li>
<li>J.E. Bowie and I.T. Young, “An Analysis Technique for Biological Shape - II”,
Acta Cytologica 21(5):455-464, 1977.</li>
</ul>
</aside>
</div></section>
<section class="m-doc-details" id="dip-ChainCode-Polygon-C"><div>
<h3>
<span class="m-doc-wrap-bumper"><a href="dip-Polygon.html" class="m-doc">dip::Polygon</a>
</span><span class="m-doc-wrap"><span class="m-doc-wrap-bumper"><a href="#dip-ChainCode-Polygon-C" class="m-doc-self">Polygon</a>(</span><span class="m-doc-wrap">) const</span></span>
</h3>
<p>Returns a polygon representation of the object.</p>
<p>Creates a polygon by joining the mid-points between an object pixel and a background pixel that are
edge-connected neighbors. The polygon follows the “crack” between pixels, but without the biases
one gets when joining pixel vertices into a polygon. The polygon always has an area exactly half a
pixel smaller than the solid binary object it represents.</p>
<aside class="m-note m-default">
<h4>Literature</h4>
<ul>
<li>K. Dunkelberger, and O. Mitchell, “Contour tracing for precision measurement”,
Proceedings of the IEEE International Conference on Robotics and Automation, vol 2, 1985,
doi:10.1109/ROBOT.1985.1087356.</li>
<li>S. Eddins, “Binary image convex hull – algorithm notes”, MathWorks Blog, 2006,
<a href="http://blogs.mathworks.com/steve/2011/10/04/binary-image-convex-hull-algorithm-notes/">http://blogs.mathworks.com/steve/2011/10/04/binary-image-convex-hull-algorithm-notes/</a>.</li>
</ul>
</aside>
</div></section>
<section class="m-doc-details" id="dip-ChainCode-Coordinates-C"><div>
<h3>
<span class="m-doc-wrap-bumper"><a href="supporttypes.html#dip-CoordinateArray" class="m-doc">dip::CoordinateArray</a>
</span><span class="m-doc-wrap"><span class="m-doc-wrap-bumper"><a href="#dip-ChainCode-Coordinates-C" class="m-doc-self">Coordinates</a>(</span><span class="m-doc-wrap">) const</span></span>
</h3>
<p>Returns the pixel coordinates for each of the pixels represented in the chain code.</p>
<p>Very large coordinate values will be returned if the chain code runs outside the image
on the left or top (i.e. if the pixels encoded by the chain code have negative coordinates)
because the output object uses unsigned integers.</p>
</div></section>
</section>
</div>
</div>
</div>
</article></main>
<div class="m-doc-search" id="search">
<a href="#!" onclick="return hideSearch()"></a>
<div class="m-container">
<div class="m-row">
<div class="m-col-m-8 m-push-m-2">
<div class="m-doc-search-header m-text m-small">
<div><span class="m-label m-default">Tab</span> / <span class="m-label m-default">T</span> to search, <span class="m-label m-default">Esc</span> to close</div>
<div id="search-symbolcount">…</div>
</div>
<div class="m-doc-search-content">
<form action="https://diplib.org/diplib-docs/#search">
<input type="search" name="q" id="search-input" placeholder="Loading …" disabled="disabled" autofocus="autofocus" autocomplete="off" spellcheck="false" />
</form>
<noscript class="m-text m-danger m-text-center">Unlike everything else in the docs, the search functionality <em>requires</em> JavaScript. Enable it or <a href="https://google.com/search?q=site:diplib.org+">use an external search engine</a>.</noscript>
<div id="search-help" class="m-text m-dim m-text-center">
<p class="m-noindent">Search for symbols, directories, files, pages or modules.
You can omit any prefix from the symbol or file path; adding a <code>:</code> or
<code>/</code> suffix lists all members of given symbol or directory.</p>
<p class="m-noindent">Use <span class="m-label m-dim">↓</span> / <span class="m-label m-dim">↑</span> to navigate through the list,
<span class="m-label m-dim">Enter</span> to go.
<span class="m-label m-dim">Tab</span> autocompletes common prefix.
You can copy a link to the result using <span class="m-label m-dim">⌘</span> <span class="m-label m-dim">L</span>,
or <span class="m-label m-dim">⌘</span> <span class="m-label m-dim">M</span> to copy a Markdown link.</p>
</div>
<div id="search-notfound" class="m-text m-warning m-text-center">Sorry, nothing was found.<br />Maybe try a full-text <a href="#" id="search-external" data-search-engine="https://google.com/search?q=site:diplib.org+{query}">search with external engine</a>?</div>
<ul id="search-results"></ul>
</div>
</div>
</div>
</div>
</div>
<script src="search-v1.js"></script>
<script src="searchdata-v1.js" async="async"></script>
<footer><nav>
<div class="m-container">
<div class="m-row">
<div class="m-col-l-10 m-push-l-1">
<p>DIPlib, a library for quantitative image analysis. Documentation compiled with <a href="https://crisluengo.github.io/doxpp/">dox++</a> and styled with <a href="https://mcss.mosra.cz/">m.css</a>.</p>
</div>
</div>
</div>
</nav></footer>
</body>
</html>