-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathdip-Histogram-Configuration.html
348 lines (346 loc) · 24.6 KB
/
dip-Histogram-Configuration.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
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>dip::Histogram::Configuration 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">
<span class="m-code m-thin">#include <a href="file--diplib--histogram-h.html">"diplib/histogram.h"</a></span> </div>
<span class="m-breadcrumb"><a href="dip.html">dip</a>::<wbr/></span><span class="m-breadcrumb"><a href="dip-Histogram.html">Histogram</a>::<wbr/></span>Configuration <span class="m-thin">struct</span> </h1>
<p>Configuration information for how the histogram is computed.</p>
<div class="m-block m-default">
<h3>Contents</h3>
<ul>
<li>
Reference
<ul>
<li><a href="#typeless-methods">Constructors, destructors, assignment and conversion operators</a></li>
<li><a href="#enum-members">Enums</a></li>
<li><a href="#function-members">Functions</a></li>
<li><a href="#variable-members">Variables</a></li>
</ul>
</li>
</ul>
</div>
<p>Constructors exist to set different subsets of the configuration; write upper bound and bin size
as a floating point number so the right constructor can be selected (they differ in the location
of the integer value). For example, note the difference between the following constructor calls,
where <code>10</code> indicates 10 bins, <code>100.0</code> indicates the upper bound, and <code>1.0</code> indicates the bin size:</p>
<div class="m-code"><pre><span></span><span class="n">dip</span><span class="o">::</span><span class="n">Histogram</span><span class="o">::</span><span class="n">Configuration</span><span class="w"> </span><span class="nf">conf1</span><span class="p">(</span><span class="w"> </span><span class="mf">0.0</span><span class="p">,</span><span class="w"> </span><span class="mf">100.0</span><span class="p">,</span><span class="w"> </span><span class="mf">1.0</span><span class="w"> </span><span class="p">);</span>
<span class="n">dip</span><span class="o">::</span><span class="n">Histogram</span><span class="o">::</span><span class="n">Configuration</span><span class="w"> </span><span class="nf">conf1</span><span class="p">(</span><span class="w"> </span><span class="mf">0.0</span><span class="p">,</span><span class="w"> </span><span class="mf">100.0</span><span class="p">,</span><span class="w"> </span><span class="mi">10</span><span class="w"> </span><span class="p">);</span>
<span class="n">dip</span><span class="o">::</span><span class="n">Histogram</span><span class="o">::</span><span class="n">Configuration</span><span class="w"> </span><span class="nf">conf2</span><span class="p">(</span><span class="w"> </span><span class="mf">0.0</span><span class="p">,</span><span class="w"> </span><span class="mi">10</span><span class="p">,</span><span class="w"> </span><span class="mf">1.0</span><span class="w"> </span><span class="p">);</span>
</pre></div>
<p>An additional constructor takes a <a href="dip-DataType.html"><code>dip::DataType</code></a>, and selects appropriate values for an image of the
given data type; see <a href="dip-Histogram-Configuration.html#dip-Histogram-Configuration-Configuration-DataType-"><code>dip::Histogram::Configuration::Configuration</code></a>.</p>
<p>The functions <a href="dip-Histogram.html#dip-Histogram-OptimalConfiguration"><code>dip::Histogram::OptimalConfiguration</code></a> and <a href="dip-Histogram.html#dip-Histogram-OptimalConfigurationWithFullRange"><code>dip::Histogram::OptimalConfigurationWithFullRange</code></a> create configurations
that are expected to be robust for arbitrary data. They choose the bin size based on the Freedman–Diaconis
rule. The former chooses histogram bounds to exclude only extreme outliers, the latter always includes the
full range. Note that including the full range can potentially lead to an extremely large histogram.</p>
<p>Here are the rules followed to complete the configuration given:</p>
<ul>
<li>
<p>Any illegal values in the configuration will silently be replaced with the default values.</p>
</li>
<li>
<p>For integer images, the bin size and bounds will be forced to integer values.</p>
</li>
<li>
<p>For integer images, if <code>mode == Mode::COMPUTE_BINSIZE</code>, the upper bound will be adjusted so that a whole
number of integer-sized bins fit within the bounds.</p>
</li>
<li>
<p>If <code>mode == Mode::COMPUTE_BINS</code>, the bin size is adjusted to that a whole number of bins fit within
the given bounds. Except for integer images, where the bin size must be an integer as well. In this case,
the upper bound is adjusted instead.</p>
</li>
<li>
<p>If <code>mode == Mode::COMPUTE_BINS</code>, <code>binSize</code> was set to zero or a negative value, and the input image is of
an integer type, then <code>binSize</code> will be computed to be an integer power of two, and such that there
are no more than 256 bins in the histogram.</p>
</li>
<li>
<p>For integer images, if the bin centers are not whole numbers, the bounds are shifted down by half
to make the bin centers whole numbers. This should not affect the computed histogram, but make the display
prettier.</p>
</li>
</ul>
<section id="typeless-methods">
<h2>Constructors, destructors, assignment and conversion operators</h2>
<dl class="m-doc">
<dt id="dip-Histogram-Configuration-Configuration">
<span class="m-doc-wrap-bumper"><a href="#dip-Histogram-Configuration-Configuration" class="m-doc-self">Configuration</a>(</span><span class="m-doc-wrap">) <span class="m-label m-flat m-info">defaulted</span> <span class="m-label m-flat m-success">noexcept</span></span>
</dt>
<dd>Default-constructed configuration defines 256 bins in the range [0,256].</dd>
<dt id="dip-Histogram-Configuration-Configuration-dfloat--dfloat--dfloat-">
<span class="m-doc-wrap-bumper"><a href="#dip-Histogram-Configuration-Configuration-dfloat--dfloat--dfloat-" class="m-doc-self">Configuration</a>(</span><span class="m-doc-wrap"><a href="pixeltypes.html#dip-dfloat" class="m-doc">dip::dfloat</a> lowerBound,
<a href="pixeltypes.html#dip-dfloat" class="m-doc">dip::dfloat</a> upperBound,
<a href="pixeltypes.html#dip-dfloat" class="m-doc">dip::dfloat</a> binSize)</span>
</dt>
<dd>A constructor takes a lower and upper bounds, and the bin size. The number of bins are computed.</dd>
<dt id="dip-Histogram-Configuration-Configuration-dfloat--dfloat--dip-uint-">
<span class="m-doc-wrap-bumper"><a href="#dip-Histogram-Configuration-Configuration-dfloat--dfloat--dip-uint-" class="m-doc-self">Configuration</a>(</span><span class="m-doc-wrap"><a href="pixeltypes.html#dip-dfloat" class="m-doc">dip::dfloat</a> lowerBound,
<a href="pixeltypes.html#dip-dfloat" class="m-doc">dip::dfloat</a> upperBound,
<a href="supporttypes.html#dip-uint" class="m-doc">dip::uint</a> nBins = 256)</span>
</dt>
<dd>A constructor takes a lower and upper bounds, and the number of bins. The bin size is computed.</dd>
<dt id="dip-Histogram-Configuration-Configuration-dfloat--dfloat--int-">
<span class="m-doc-wrap-bumper"><a href="#dip-Histogram-Configuration-Configuration-dfloat--dfloat--int-" class="m-doc-self">Configuration</a>(</span><span class="m-doc-wrap"><a href="pixeltypes.html#dip-dfloat" class="m-doc">dip::dfloat</a> lowerBound,
<a href="pixeltypes.html#dip-dfloat" class="m-doc">dip::dfloat</a> upperBound,
int nBins)</span>
</dt>
<dd>A constructor takes a lower and upper bounds, and the number of bins. The bin size is computed.</dd>
<dt id="dip-Histogram-Configuration-Configuration-dfloat--dip-uint--dfloat-">
<span class="m-doc-wrap-bumper"><a href="#dip-Histogram-Configuration-Configuration-dfloat--dip-uint--dfloat-" class="m-doc-self">Configuration</a>(</span><span class="m-doc-wrap"><a href="pixeltypes.html#dip-dfloat" class="m-doc">dip::dfloat</a> lowerBound,
<a href="supporttypes.html#dip-uint" class="m-doc">dip::uint</a> nBins,
<a href="pixeltypes.html#dip-dfloat" class="m-doc">dip::dfloat</a> binSize)</span>
</dt>
<dd>A constructor takes a lower bound, the number of bins and the bin size. The upper bound is computed.</dd>
<dt id="dip-Histogram-Configuration-Configuration-dfloat--int--dfloat-">
<span class="m-doc-wrap-bumper"><a href="#dip-Histogram-Configuration-Configuration-dfloat--int--dfloat-" class="m-doc-self">Configuration</a>(</span><span class="m-doc-wrap"><a href="pixeltypes.html#dip-dfloat" class="m-doc">dip::dfloat</a> lowerBound,
int nBins,
<a href="pixeltypes.html#dip-dfloat" class="m-doc">dip::dfloat</a> binSize)</span>
</dt>
<dd>A constructor takes a lower bound, the number of bins and the bin size. The upper bound is computed.</dd>
<dt>
<span class="m-doc-wrap-bumper"><a href="#dip-Histogram-Configuration-Configuration-DataType-" class="m-doc">Configuration</a>(</span><span class="m-doc-wrap"><a href="dip-DataType.html" class="m-doc">dip::DataType</a> dataType) <span class="m-label m-flat m-info">explicit</span> </span>
</dt>
<dd>A constructor takes an image data type, yielding a default histogram configuration for that data type. <a href="#dip-Histogram-Configuration-Configuration-DataType-">more...</a></dd>
</dl>
</section>
<section id="enum-members">
<h2>Enums</h2>
<dl class="m-doc">
<dt>
<span class="m-doc-wrap-bumper">enum class <a href="#dip-Histogram-Configuration-Mode" class="m-doc">Mode</a>: uint8{ </span><span class="m-doc-wrap"><a href="#dip-Histogram-Configuration-Mode-COMPUTE_BINSIZE" class="m-doc">COMPUTE_BINSIZE</a>,
<a href="#dip-Histogram-Configuration-Mode-COMPUTE_BINS" class="m-doc">COMPUTE_BINS</a>,
<a href="#dip-Histogram-Configuration-Mode-COMPUTE_LOWER" class="m-doc">COMPUTE_LOWER</a>,
<a href="#dip-Histogram-Configuration-Mode-COMPUTE_UPPER" class="m-doc">COMPUTE_UPPER</a>,
<a href="#dip-Histogram-Configuration-Mode-ESTIMATE_BINSIZE" class="m-doc">ESTIMATE_BINSIZE</a>,
<a href="#dip-Histogram-Configuration-Mode-ESTIMATE_BINSIZE_AND_LIMITS" class="m-doc">ESTIMATE_BINSIZE_AND_LIMITS</a>,
<a href="#dip-Histogram-Configuration-Mode-IS_COMPLETE" class="m-doc">IS_COMPLETE</a> }</span>
</dt>
<dd>How to complete the configuration <a href="#dip-Histogram-Configuration-Mode">more...</a></dd>
</dl>
</section>
<section id="function-members">
<h2>Functions</h2>
<dl class="m-doc">
<dt id="dip-Histogram-Configuration-IsOutOfRange-dfloat--C">
<span class="m-doc-wrap-bumper">auto <a href="#dip-Histogram-Configuration-IsOutOfRange-dfloat--C" class="m-doc-self">IsOutOfRange</a>(</span><span class="m-doc-wrap"><a href="pixeltypes.html#dip-dfloat" class="m-doc">dip::dfloat</a> value) const -> bool</span>
</dt>
<dd>Returns true if the value should not be included in the histogram.</dd>
<dt id="dip-Histogram-Configuration-FindBin-dfloat--C">
<span class="m-doc-wrap-bumper">auto <a href="#dip-Histogram-Configuration-FindBin-dfloat--C" class="m-doc-self">FindBin</a>(</span><span class="m-doc-wrap"><a href="pixeltypes.html#dip-dfloat" class="m-doc">dip::dfloat</a> value) const -> <a href="supporttypes.html#dip-sint" class="m-doc">dip::sint</a></span>
</dt>
<dd>Returns the bin that the value belongs in, assuming <code>!IsOutOfRange(value)</code>.</dd>
</dl>
</section>
<section id="variable-members">
<h2>Variables</h2>
<dl class="m-doc">
<dt id="dip-Histogram-Configuration-lowerBound">
<a href="pixeltypes.html#dip-dfloat" class="m-doc">dip::dfloat</a> <a href="#dip-Histogram-Configuration-lowerBound" class="m-doc-self">lowerBound</a>
= 0.0
</dt>
<dd>Lower bound for this dimension, corresponds to the lower bound of the first bin.</dd>
<dt id="dip-Histogram-Configuration-upperBound">
<a href="pixeltypes.html#dip-dfloat" class="m-doc">dip::dfloat</a> <a href="#dip-Histogram-Configuration-upperBound" class="m-doc-self">upperBound</a>
= 256.0
</dt>
<dd>Upper bound for this dimension, corresponds to the upper bound of the last bin.</dd>
<dt id="dip-Histogram-Configuration-nBins">
<a href="supporttypes.html#dip-uint" class="m-doc">dip::uint</a> <a href="#dip-Histogram-Configuration-nBins" class="m-doc-self">nBins</a>
= 256
</dt>
<dd>Number of bins for this dimension.</dd>
<dt id="dip-Histogram-Configuration-binSize">
<a href="pixeltypes.html#dip-dfloat" class="m-doc">dip::dfloat</a> <a href="#dip-Histogram-Configuration-binSize" class="m-doc-self">binSize</a>
= 1.0
</dt>
<dd>Size of each bin for this dimension.</dd>
<dt id="dip-Histogram-Configuration-mode">
<a href="dip-Histogram-Configuration.html#dip-Histogram-Configuration-Mode" class="m-doc">dip::Histogram::Configuration::Mode</a> <a href="#dip-Histogram-Configuration-mode" class="m-doc-self">mode</a>
= Mode::COMPUTE_BINSIZE
</dt>
<dd>The given value is ignored and replaced by the computed value.</dd>
<dt id="dip-Histogram-Configuration-lowerIsPercentile">
bool <a href="#dip-Histogram-Configuration-lowerIsPercentile" class="m-doc-self">lowerIsPercentile</a>
= false
</dt>
<dd>If set, <code>lowerBound</code> is replaced by the given percentile pixel value.</dd>
<dt id="dip-Histogram-Configuration-upperIsPercentile">
bool <a href="#dip-Histogram-Configuration-upperIsPercentile" class="m-doc-self">upperIsPercentile</a>
= false
</dt>
<dd>If set, <code>upperBound</code> is replaced by the given percentile pixel value.</dd>
<dt id="dip-Histogram-Configuration-excludeOutOfBoundValues">
bool <a href="#dip-Histogram-Configuration-excludeOutOfBoundValues" class="m-doc-self">excludeOutOfBoundValues</a>
= false
</dt>
<dd>If set, pixels outside of the histogram bounds are not counted.</dd>
</dl>
</section>
<section>
<h2>Enum documentation</h2>
<section class="m-doc-details" id="dip-Histogram-Configuration-Mode"><div>
<h3>
enum class <a href="#dip-Histogram-Configuration-Mode" class="m-doc-self">Mode</a>: uint8
</h3>
<p>How to complete the configuration</p>
<table class="m-table m-fullwidth m-first-tight m-flat m-doc">
<thead><tr><th>Enumerators</th><th></th></tr></thead>
<tbody>
<tr>
<td><a href="#dip-Histogram-Configuration-Mode-COMPUTE_BINSIZE" class="m-doc-self" id="dip-Histogram-Configuration-Mode-COMPUTE_BINSIZE">COMPUTE_BINSIZE</a> = 0</td>
<td>
Compute <code>binSize</code> from the other three values
</td>
</tr>
<tr>
<td><a href="#dip-Histogram-Configuration-Mode-COMPUTE_BINS" class="m-doc-self" id="dip-Histogram-Configuration-Mode-COMPUTE_BINS">COMPUTE_BINS</a> = 1</td>
<td>
Compute <code>nBins</code> from the other three values
</td>
</tr>
<tr>
<td><a href="#dip-Histogram-Configuration-Mode-COMPUTE_LOWER" class="m-doc-self" id="dip-Histogram-Configuration-Mode-COMPUTE_LOWER">COMPUTE_LOWER</a> = 2</td>
<td>
Compute <code>lowerBound</code> from the other three values
</td>
</tr>
<tr>
<td><a href="#dip-Histogram-Configuration-Mode-COMPUTE_UPPER" class="m-doc-self" id="dip-Histogram-Configuration-Mode-COMPUTE_UPPER">COMPUTE_UPPER</a> = 3</td>
<td>
Compute <code>upperBound</code> from the other three values
</td>
</tr>
<tr>
<td><a href="#dip-Histogram-Configuration-Mode-ESTIMATE_BINSIZE" class="m-doc-self" id="dip-Histogram-Configuration-Mode-ESTIMATE_BINSIZE">ESTIMATE_BINSIZE</a> = 4</td>
<td>
Choose <code>binSize</code> using the Freedman–Diaconis rule, then compute <code>nBins</code>.
</td>
</tr>
<tr>
<td><a href="#dip-Histogram-Configuration-Mode-ESTIMATE_BINSIZE_AND_LIMITS" class="m-doc-self" id="dip-Histogram-Configuration-Mode-ESTIMATE_BINSIZE_AND_LIMITS">ESTIMATE_BINSIZE_AND_LIMITS</a> = 5</td>
<td>
Like <code>ESTIMATE_BINSIZE</code>, but also determines the lower and upper limits
</td>
</tr>
<tr>
<td><a href="#dip-Histogram-Configuration-Mode-IS_COMPLETE" class="m-doc-self" id="dip-Histogram-Configuration-Mode-IS_COMPLETE">IS_COMPLETE</a> = 6</td>
<td>
The configuration values will be taken as-is. <code>lowerIsPercentile</code> and
</td>
</tr>
</tbody>
</table>
</div></section>
</section>
<section>
<h2>Function documentation</h2>
<section class="m-doc-details" id="dip-Histogram-Configuration-Configuration-DataType-"><div>
<h3>
<span class="m-doc-wrap-bumper">
</span><span class="m-doc-wrap"><span class="m-doc-wrap-bumper"><a href="#dip-Histogram-Configuration-Configuration-DataType-" class="m-doc-self">Configuration</a>(</span><span class="m-doc-wrap"><a href="dip-DataType.html" class="m-doc">dip::DataType</a> dataType) <span class="m-label m-info">explicit</span></span></span>
</h3>
<p>A constructor takes an image data type, yielding a default histogram configuration for that data type.</p>
<ul>
<li>For 8-bit images, the histogram has 256 bins, one for each possible input value.</li>
<li>For other integer-valued images, the histogram has up to 256 bins, stretching from the lowest value
in the image to the highest, and with bin size a power of two. This is the simplest way of correctly
handling data from 10-bit, 12-bit and 16-bit sensors that can put data in the lower or the upper bits
of the 16-bit words, and will handle other integer data correctly as well.</li>
<li>For floating-point images, the histogram always has 256 bins, stretching from the lowest value in the
image to the highest.</li>
</ul>
</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>