Mech-Eye API 2.6.0
API reference documentation for Mech-Eye Industrial 3D Camera
Loading...
Searching...
No Matches
PointCloudProcessing.h
1/*******************************************************************************
2 * BSD 3-Clause License
3 *
4 * Copyright (c) 2016-2025, Mech-Mind Robotics Technologies Co., Ltd.
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions are met:
9 *
10 * 1. Redistributions of source code must retain the above copyright notice, this
11 * list of conditions and the following disclaimer.
12 *
13 * 2. Redistributions in binary form must reproduce the above copyright notice,
14 * this list of conditions and the following disclaimer in the documentation
15 * and/or other materials provided with the distribution.
16 *
17 * 3. Neither the name of the copyright holder nor the names of its
18 * contributors may be used to endorse or promote products derived from
19 * this software without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
24 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
27 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
28 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
29 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 *
32 * Info: https://www.mech-mind.com/
33 *
34 ******************************************************************************/
35
36#pragma once
37#include "Parameter.h"
38
39namespace mmind {
40
41namespace eye {
42
43// Process the generated point cloud. Please perform image capturing again after adjusting the
44// parameters to see the result.
45namespace pointcloud_processing_setting {
46
47// Point Cloud Surface Smoothing
49{
50public:
51 static constexpr const char* name = "PointCloudSurfaceSmoothing";
52
53 static constexpr const char* description =
54 "Reduces the depth fluctuation in the point cloud and improves its resemblance to the "
55 "actual object surface. Surface smoothing causes loss of object surface details. The more "
56 "intense the smoothing, the more details are lost.";
57
58 static constexpr Parameter::Type type = Parameter::Type::_Enum;
59
60 enum struct Value {
61 Off,
62 Weak,
63 Normal,
64 Strong,
65 };
66};
67
68// Point Cloud Noise Removal
70{
71public:
72 static constexpr const char* name = "PointCloudNoiseRemoval";
73
74 static constexpr const char* description =
75 "Removes the noise in the point cloud, thus reducing the impact on the precision and "
76 "accuracy of subsequent calculation. Noise is the scattered points close to the object "
77 "surface. Noise removal might remove some sharp object features. The more intense the "
78 "noise removal, the more object features might be removed. If this function removes the "
79 "needed object features, please reduce the intensity. However, more noise will be "
80 "retained.";
81
82 static constexpr Parameter::Type type = Parameter::Type::_Enum;
83
84 enum struct Value {
85 Off,
86 Weak,
87 Normal,
88 Strong,
89 };
90};
91
92// Depth Smooth
94{
95public:
96 static constexpr const char* name = "DepthSmooth";
97
98 static constexpr const char* description =
99 "Reduces depth fluctuations in the point cloud and improves its resemblance to the actual "
100 "object surface.";
101
102 static constexpr Parameter::Type type = Parameter::Type::_Enum;
103
104 enum struct Value {
105 Off,
106 Weak,
107 Normal,
108 Strong,
109 };
110};
111
112// Depth Hole Filling
114{
115public:
116 static constexpr const char* name = "DepthHoleFilling";
117
118 static constexpr const char* description =
119 "Fills gaps in the point cloud to make the object surface features more complete.";
120
121 static constexpr Parameter::Type type = Parameter::Type::_Enum;
122
123 enum struct Value {
124 Off,
125 Weak,
126 Normal,
127 Strong,
128 };
129};
130
131// Depth Surface Noise Removal
133{
134public:
135 static constexpr const char* name = "DepthSurfaceNoiseRemoval";
136
137 static constexpr const char* description =
138 "Removes noise in the point cloud. Noise refers to scattered points located near the "
139 "object surface.";
140
141 static constexpr Parameter::Type type = Parameter::Type::_Enum;
142
143 enum struct Value {
144 Off,
145 Weak,
146 Normal,
147 Strong,
148 };
149};
150
151// Phase Cluster Outlier Removal
153{
154public:
155 static constexpr const char* name = "PhaseClusterOutlierRemoval";
156
157 static constexpr const char* description =
158 "Removes outliers in the point cloud. Outliers are clusters of points that are detached "
159 "from the main object point cloud.";
160
161 static constexpr Parameter::Type type = Parameter::Type::_Enum;
162
163 enum struct Value {
164 L0,
165 L1,
166 L2,
167 L3,
168 L4,
169 L5,
170 L6,
171 L7,
172 L8,
173 L9,
174 L10,
175 };
176};
177
178// Spurious Phase Removal
180{
181public:
182 static constexpr const char* name = "SpuriousPhaseRemoval";
183
184 static constexpr const char* description =
185 "Removes false points caused by occlusions and other factors in the point cloud.";
186
187 static constexpr Parameter::Type type = Parameter::Type::_Enum;
188
189 enum struct Value {
190 Off,
191 Weak,
192 Normal,
193 Strong,
194 };
195};
196
197// Large Gradient Noise Removal
199{
200public:
201 static constexpr const char* name = "LargeGradNoiseRemoval";
202
203 static constexpr const char* description =
204 "Removes abnormal points caused by depth discontinuities, such as large clusters of "
205 "outliers near the side walls of a bin.";
206
207 static constexpr Parameter::Type type = Parameter::Type::_Enum;
208
209 enum struct Value {
210 Off,
211 Weak,
212 Normal,
213 Strong,
214 };
215};
216
217// Point Cloud Outlier Removal
219{
220public:
221 static constexpr const char* name = "PointCloudOutlierRemoval";
222
223 static constexpr const char* description =
224 "Removes the outliers in the point cloud. Outliers are clustered points away from the "
225 "object point cloud. If the object point cloud contains clustered points that have depth "
226 "difference from other parts of the object, high intensities of outlier removal might "
227 "remove these points.";
228
229 static constexpr Parameter::Type type = Parameter::Type::_Enum;
230
231 enum struct Value {
232 Off,
233 Weak,
234 Normal,
235 Strong,
236 };
237};
238
239// Point Cloud Gap Filling
241{
242public:
243 static constexpr const char* name = "PointCloudGapFilling";
244
245 static constexpr const char* description =
246 "Fill in the gaps in the point cloud so that the object's surface features are more "
247 "complete.\n\nNote:\n* This parameter is only available when \"FringeCodingMode\" in the "
248 "\"mmind::eye::projector_setting\" namespace is set to \"Translucent\".\n* More intense "
249 "gap filling "
250 "fills more missing points but may also distort object edges.";
251
252 static constexpr Parameter::Type type = Parameter::Type::_Enum;
253
254 enum struct Value {
255 Off,
256 Weak,
257 Normal,
258 Strong,
259 };
260};
261
262// Point Cloud Edge Preservation
264{
265public:
266 static constexpr const char* name = "PointCloudEdgePreservation";
267
268 static constexpr const char* description =
269 "Preserves the sharpness of object edges during surface smoothing. Sharp: Preserves the "
270 "sharpness of object edges as much as possible. However, the effect of surface smoothing "
271 "will be reduced. Normal: Balances between edge preservation and surface smoothing. "
272 "Smooth: Does not preserve the edges.The object surface will be well smoothed, but the "
273 "object edges will be distorted.\n\nNote: For PRO S and PRO M models, "
274 "\"EdgePreservation\" is unavailable when "
275 "\"FringeCodingMode\" in the \"mmind::eye::projector_setting\" namespace is set to "
276 "\"Translucent\".";
277
278 static constexpr Parameter::Type type = Parameter::Type::_Enum;
279
280 enum struct Value {
281 Sharp,
282 Normal,
283 Smooth,
284 };
285};
286
288{
289public:
290 static constexpr const char* name = "EnableDistortionCorrection";
291
292 static constexpr const char* description =
293 "Set this parameter to true to enable distortion correction.\n\nNote:\n* Enabling "
294 "distortion correction lowers the "
295 "acquisition speed.\n* \"EnableDistortionCorrection\" is unavailable when "
296 "\"FringeCodingMode\" is set to \"Translucent\" or \"Reflective\".";
297
298 static constexpr Parameter::Type type = Parameter::Type::_Bool;
299};
300
302{
303public:
304 static constexpr const char* name = "DistortionCorrection";
305
306 static constexpr const char* description =
307 "Adjust the intensity of distortion correction.\n\nNote:\n* A \"DistortionCorrection\" too "
308 "large may result in adverse effects. Please acquire data again after adjusting the "
309 "parameter to check its influence on the depth map and point cloud.\n* "
310 "\"DistortionCorrection\" is unavailable when \"FringeCodingMode\" is set to "
311 "\"Translucent\" or \"Reflective\".";
312
313 static constexpr Parameter::Type type = Parameter::Type::_Int;
314
315 static constexpr Range<int> range() { return {1, 10}; }
316
317 static constexpr const char* unit = "";
318};
319
320// Stripe Contrast Threshold
322{
323public:
324 static constexpr const char* name = "FringeContrastThreshold";
325
326 static constexpr const char* description =
327 "If the level of noise is still high after adjusting Outlier Removal and Noise Removal, "
328 "please increase the value of this parameter. However, the points of dark objects might be "
329 "lost.";
330
331 static constexpr Parameter::Type type = Parameter::Type::_Int;
332
333 static constexpr Range<int> range() { return {1, 100}; }
334
335 static constexpr const char* unit = "";
336};
337
338// Minimum Fringe Intensity Threshold
340{
341public:
342 static constexpr const char* name = "FringeMinThreshold";
343
344 static constexpr const char* description =
345 "Set the signal minimum threshold for effective pixels. Pixels with intensity less than "
346 "this threshold will be ignored. A higher value will result in more image noise to be "
347 "filtered but may also cause the point cloud of dark objects to be removed.\n\nNote: "
348 "\"FringeMinThreshold\" is unavailable when \"FringeCodingMode\" is set to \"Reflective\".";
349
350 static constexpr Parameter::Type type = Parameter::Type::_Int;
351
352 static constexpr Range<int> range() { return {1, 100}; }
353
354 static constexpr const char* unit = "";
355};
356
358{
359public:
360 static constexpr const char* name = "EdgeArtifactRemoval";
361
362 static constexpr const char* description = "";
363
364 static constexpr Parameter::Type type = Parameter::Type::_Bool;
365};
366
368{
369public:
370 static constexpr const char* name = "EnableGapFilling";
371
372 static constexpr const char* description =
373 "Enable this parameter to fill the gaps in the point cloud.";
374
375 static constexpr Parameter::Type type = Parameter::Type::_Bool;
376};
377
379{
380public:
381 static constexpr const char* name = "GapSize";
382
383 static constexpr const char* description =
384 "Sets the size of the gaps to be filled. Gaps with missing pixels fewer than the specified."
385 "value will be filled";
386
387 static constexpr Parameter::Type type = Parameter::Type::_Int;
388
389 static constexpr Range<int> range() { return {10, 100}; }
390
391 static constexpr const char* unit = "pixel";
392};
393
394} // namespace pointcloud_processing_setting
395} // namespace eye
396} // namespace mmind
Type
Describes the device parameter data types.
Definition Parameter.h:30
@ _Int
Integer type.
Definition Parameter.h:31
@ _Enum
Enumeration type.
Definition Parameter.h:34
@ _Bool
Boolean type.
Definition Parameter.h:33
Describes a value range.
Definition CommonTypes.h:29