1 /*
2 * Copyright (C) 2017 Alberto Irurueta Carro (alberto@irurueta.com)
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
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 package com.irurueta.ar.sfm;
17
18 import com.irurueta.ar.epipolar.CorrectorType;
19 import com.irurueta.ar.epipolar.estimators.FundamentalMatrixEstimatorMethod;
20 import com.irurueta.ar.epipolar.estimators.FundamentalMatrixRobustEstimator;
21 import com.irurueta.ar.epipolar.estimators.PROSACFundamentalMatrixRobustEstimator;
22 import com.irurueta.geometry.InhomogeneousPoint2D;
23 import com.irurueta.geometry.PinholeCameraIntrinsicParameters;
24 import com.irurueta.geometry.estimators.EPnPPointCorrespondencePinholeCameraEstimator;
25 import com.irurueta.geometry.estimators.PROSACEPnPPointCorrespondencePinholeCameraRobustEstimator;
26 import com.irurueta.geometry.estimators.PinholeCameraRobustEstimator;
27 import com.irurueta.geometry.estimators.ProjectiveTransformation2DRobustEstimator;
28 import com.irurueta.numerical.robust.RobustEstimatorMethod;
29
30 import java.io.Serializable;
31
32 /**
33 * Base class containing configuration for a sparse re-constructor supporting multiple views.
34 *
35 * @param <T> an actual implementation of a configuration class.
36 */
37 public abstract class BaseSparseReconstructorConfiguration<T extends BaseSparseReconstructorConfiguration<T>>
38 implements Serializable {
39
40 /**
41 * Default robust fundamental matrix estimator method.
42 * This is only used when general scenes are allowed.
43 */
44 public static final RobustEstimatorMethod DEFAULT_ROBUST_FUNDAMENTAL_MATRIX_ESTIMATOR_METHOD =
45 RobustEstimatorMethod.PROSAC;
46
47 /**
48 * Default non-robust fundamental matrix estimator method used internally within a robust estimator.
49 * This is only used when general scenes are allowed.
50 */
51 public static final FundamentalMatrixEstimatorMethod DEFAULT_NON_ROBUST_FUNDAMENTAL_MATRIX_ESTIMATOR_METHOD =
52 FundamentalMatrixEstimatorMethod.SEVEN_POINTS_ALGORITHM;
53
54 /**
55 * Indicates that estimated fundamental matrix is refined by default using all found inliers.
56 * This is only used when general scenes are allowed.
57 */
58 public static final boolean DEFAULT_REFINE_FUNDAMENTAL_MATRIX = true;
59
60 /**
61 * Indicates that fundamental matrix covariance is kept by default after the estimation.
62 * This is only used when general scenes are allowed.
63 */
64 public static final boolean DEFAULT_KEEP_FUNDAMENTAL_MATRIX_COVARIANCE = false;
65
66 /**
67 * Default confidence of robustly estimated fundamental matrix. By default, this is 99%.
68 * This is only used when general scenes are allowed.
69 */
70 public static final double DEFAULT_FUNDAMENTAL_MATRIX_CONFIDENCE =
71 FundamentalMatrixRobustEstimator.DEFAULT_CONFIDENCE;
72
73 /**
74 * Default maximum number of iterations to make while robustly estimating fundamental matrix.
75 * By default, this is 5000 iterations. This is only used when general scenes are allowed.
76 */
77 public static final int DEFAULT_FUNDAMENTAL_MATRIX_MAX_ITERATIONS =
78 FundamentalMatrixRobustEstimator.DEFAULT_MAX_ITERATIONS;
79
80 /**
81 * Default threshold to determine whether samples for robust fundamental matrix estimation are
82 * inliers or not.
83 * This is only used when general scenes are allowed.
84 */
85 public static final double DEFAULT_FUNDAMENTAL_MATRIX_THRESHOLD =
86 PROSACFundamentalMatrixRobustEstimator.DEFAULT_THRESHOLD;
87
88 /**
89 * Default value indicating that inlier data is kept after robust fundamental matrix estimation.
90 * This is only used when general scenes are allowed.
91 */
92 public static final boolean DEFAULT_FUNDAMENTAL_MATRIX_COMPUTE_AND_KEEP_INLIERS = true;
93
94 /**
95 * Default value indicating that residual data is kept after robust fundamental matrix estimation.
96 * This is only used when general scenes are allowed.
97 */
98 public static final boolean DEFAULT_FUNDAMENTAL_MATRIX_COMPUTE_AND_KEEP_RESIDUALS = true;
99
100 /**
101 * Default method to use for initial cameras' estimation.
102 */
103 public static final InitialCamerasEstimatorMethod DEFAULT_INITIAL_CAMERAS_ESTIMATOR_METHOD =
104 InitialCamerasEstimatorMethod.DUAL_ABSOLUTE_QUADRIC_AND_ESSENTIAL_MATRIX;
105
106 /**
107 * Indicates whether an homogeneous point triangulator is used for point triangulation when Dual
108 * Absolute Quadric (DAQ) camera initialization is used.
109 */
110 public static final boolean DEFAULT_DAQ_USE_HOMOGENEOUS_POINT_TRIANGULATOR = true;
111
112 /**
113 * Default aspect ratio for initial cameras.
114 */
115 public static final double DEFAULT_INITIAL_CAMERAS_ASPECT_RATIO = 1.0;
116
117 /**
118 * Default horizontal principal point value to use for initial cameras estimation using
119 * Dual Image of Absolute Conic (DIAC) or Dual Absolute Quadric (DAQ) methods.
120 */
121 public static final double DEFAULT_INITIAL_CAMERAS_PRINCIPAL_POINT_X = 0.0;
122
123 /**
124 * Default vertical principal point value to use for initial cameras estimation using
125 * Dual Image of Absolute Conic (DIAC) or Dual Absolute Quadric (DAQ) methods.
126 */
127 public static final double DEFAULT_INITIAL_CAMERAS_PRINCIPAL_POINT_Y = 0.0;
128
129 /**
130 * Default corrector type to use for point triangulation when initial cameras are
131 * being estimated using either Dual Image of Absolute Conic (DIAC), Dual Absolute Quadric
132 * (DAQ) or essential matrix methods.
133 */
134 public static final CorrectorType DEFAULT_INITIAL_CAMERAS_CORRECTOR_TYPE = CorrectorType.SAMPSON_CORRECTOR;
135
136 /**
137 * Default value indicating whether valid triangulated points are marked during initial
138 * cameras estimation using either Dual Image of Absolute Conic (DIAC) or essential matrix
139 * methods.
140 */
141 public static final boolean DEFAULT_INITIAL_CAMERAS_MARK_VALID_TRIANGULATED_POINTS = true;
142
143 /**
144 * Indicates whether a general (points are laying in a general 3D position) scene is
145 * allowed.
146 * When true, an initial geometry estimation is attempted for general points.
147 */
148 public static final boolean DEFAULT_ALLOW_GENERAL_SCENE = true;
149
150 /**
151 * Indicates whether a planar (points laying in a 3D plane) scene is allowed.
152 * When true, an initial geometry estimation is attempted for planar points.
153 */
154 public static final boolean DEFAULT_ALLOW_PLANAR_SCENE = true;
155
156 /**
157 * Default robust planar homography estimator method.
158 * This is only used when planar scenes are allowed.
159 */
160 public static final RobustEstimatorMethod DEFAULT_ROBUST_PLANAR_HOMOGRAPHY_ESTIMATOR_METHOD =
161 RobustEstimatorMethod.PROMEDS;
162
163 /**
164 * Indicates that planar homography is refined by default using all found inliers.
165 * This is only used when planar scenes are allowed.
166 */
167 public static final boolean DEFAULT_REFINE_PLANAR_HOMOGRAPHY = true;
168
169 /**
170 * Indicates that planar homography covariance is kept by default after estimation.
171 * This is only used when planar scenes are allowed.
172 */
173 public static final boolean DEFAULT_KEEP_PLANAR_HOMOGRAPHY_COVARIANCE = false;
174
175 /**
176 * Default confidence of robustly estimated planar homography. By default, this is 99%.
177 * This is only used when planar scenes are allowed.
178 */
179 public static final double DEFAULT_PLANAR_HOMOGRAPHY_CONFIDENCE =
180 ProjectiveTransformation2DRobustEstimator.DEFAULT_CONFIDENCE;
181
182 /**
183 * Default maximum number of iterations to make while robustly estimating planar
184 * homography. By default, this is 5000 iterations.
185 * This is only used when planar scenes are allowed.
186 */
187 public static final int DEFAULT_PLANAR_HOMOGRAPHY_MAX_ITERATIONS =
188 ProjectiveTransformation2DRobustEstimator.DEFAULT_MAX_ITERATIONS;
189
190 /**
191 * Default threshold to determine whether samples for robust projective 2D transformation
192 * estimation are inliers or not.
193 * This is only used when planar scenes are allowed.
194 */
195 public static final double DEFAULT_PLANAR_HOMOGRAPHY_THRESHOLD = 1e-3;
196
197 /**
198 * Default value indicating that inlier data is kept after robust planar homography estimation.
199 * This is only used when planar scenes are allowed.
200 */
201 public static final boolean DEFAULT_PLANAR_HOMOGRAPHY_COMPUTE_AND_KEEP_INLIERS = true;
202
203 /**
204 * Default value indicating that residual data is kept after robust planar homography
205 * estimation.
206 * This is only used when planar scenes are allowed.
207 */
208 public static final boolean DEFAULT_PLANAR_HOMOGRAPHY_COMPUTE_AND_KEEP_RESIDUALS = true;
209
210 /**
211 * Default value indicating that additional cameras intrinsics are estimated using the
212 * Dual Absolute Quadric (DAQ).
213 */
214 public static final boolean DEFAULT_USE_DAQ_FOR_ADDITIONAL_CAMERAS_INTRINSICS = true;
215
216 /**
217 * Default value indicating that additional cameras intrinsics are estimated using
218 * the Dual Image of Absolute Conic (DIAC).
219 */
220 public static final boolean DEFAULT_USE_DIAC_FOR_ADDITIONAL_CAMERAS_INTRINSICS = false;
221
222 /**
223 * Default skewness for additional cameras when UPnP (Uncalibrated Perspective-n-Point)
224 * method is used for additional cameras estimation and neither Dual Image of Absolute
225 * Conic (DIAC) or Dual Absolute Quadric (DAQ) are estimated to find intrinsic
226 * parameters when adding new cameras.
227 */
228 public static final double DEFAULT_ADDITIONAL_CAMERAS_SKEWNESS = 0.0;
229
230 /**
231 * Default horizontal coordinate of principal point for additional cameras when
232 * UPnP (Uncalibrated Perspective-n-Point) method is used for additional cameras
233 * estimation and neither Dual Image of Absolute Conic (DIAC) or Dual Absolute
234 * Quadric (DAQ) are estimated to find intrinsic parameters when adding new
235 * cameras.
236 */
237 public static final double DEFAULT_ADDITIONAL_CAMERAS_HORIZONTAL_PRINCIPAL_POINT = 0.0;
238
239 /**
240 * Default vertical coordinate of principal point for additional cameras when
241 * UPnP (Uncalibrated Perspective-n-Point) method is used for additional cameras
242 * estimation and neither Dual Image of Absolute Conic (DIAC) or Dual Absolute
243 * Quadric (DAQ) are estimated to find intrinsic parameters when adding new
244 * cameras.
245 */
246 public static final double DEFAULT_ADDITIONAL_CAMERAS_VERTICAL_PRINCIPAL_POINT = 0.0;
247
248 /**
249 * Default aspect ratio for additional cameras.
250 */
251 public static final double DEFAULT_ADDITIONAL_CAMERAS_ASPECT_RATIO = 1.0;
252
253
254 /**
255 * Indicates that by default EPnP (Efficient Perspective-n-Point) method is NOT
256 * used for additional cameras' estimation.
257 */
258 public static final boolean DEFAULT_USE_EPNP_FOR_ADDITIONAL_CAMERAS_ESTIMATION = false;
259
260 /**
261 * Indicates that by default UPnP (Uncalibrated Perspective-n-Point) method is
262 * used for additional cameras' estimation.
263 */
264 public static final boolean DEFAULT_USE_UPNP_FOR_ADDITIONAL_CAMERAS_ESTIMATION = true;
265
266 /**
267 * Default robust method to estimate additional cameras.
268 */
269 public static final RobustEstimatorMethod DEFAULT_ADDITIONAL_CAMERAS_ROBUST_ESTIMATION_METHOD =
270 RobustEstimatorMethod.PROSAC;
271
272 /**
273 * Default value indicating that planar configuration is allowed for additional
274 * cameras estimation using either EPnP or UPnP.
275 */
276 public static final boolean DEFAULT_ADDITIONAL_CAMERAS_ALLOW_PLANAR_CONFIGURATION =
277 EPnPPointCorrespondencePinholeCameraEstimator.DEFAULT_PLANAR_CONFIGURATION_ALLOWED;
278
279 /**
280 * Default value indicating that dimension 2 null-space is allowed while estimating
281 * additional cameras using either EPnP or UPnP.
282 */
283 public static final boolean DEFAULT_ADDITIONAL_CAMERAS_ALLOW_NULLSPACE_DIMENSION2 =
284 EPnPPointCorrespondencePinholeCameraEstimator.DEFAULT_NULLSPACE_DIMENSION2_ALLOWED;
285
286 /**
287 * Default value indicating that dimension 3 null-space is allowed while estimating
288 * additional cameras using EPnP.
289 */
290 public static final boolean DEFAULT_ADDITIONAL_CAMERAS_ALLOW_NULLSPACE_DIMENSION3 =
291 EPnPPointCorrespondencePinholeCameraEstimator.DEFAULT_NULLSPACE_DIMENSION3_ALLOWED;
292
293 /**
294 * Default threshold to determine whether 3D matched points to estimate additional
295 * cameras are in a planar configuration.
296 */
297 public static final double DEFAULT_ADDITIONAL_CAMERAS_PLANAR_THRESHOLD =
298 EPnPPointCorrespondencePinholeCameraEstimator.DEFAULT_PLANAR_THRESHOLD;
299
300 /**
301 * Default value indicating that additional cameras are refined to minimize overall
302 * projection error among all found inliers.
303 */
304 public static final boolean DEFAULT_REFINE_ADDITIONAL_CAMERAS = PinholeCameraRobustEstimator.DEFAULT_REFINE_RESULT;
305
306 /**
307 * Default value indicating that covariance is kept after refining results of
308 * additional cameras estimation.
309 */
310 public static final boolean DEFAULT_KEEP_COVARIANCE_ADDITIONAL_CAMERAS = true;
311
312 /**
313 * Default value indicating that fast refinement is used for additional cameras'
314 * estimation.
315 */
316 public static final boolean DEFAULT_ADDITIONAL_CAMERAS_USE_FAST_REFINEMENT = true;
317
318 /**
319 * Default confidence of estimated additional cameras, which is 99%. This means
320 * that with a probability of 99% estimation will be accurate because chosen
321 * sub-samples will be inliers.
322 */
323 public static final double DEFAULT_ADDITIONAL_CAMERAS_CONFIDENCE = PinholeCameraRobustEstimator.DEFAULT_CONFIDENCE;
324
325 /**
326 * Default maximum allowed number of iterations for additional cameras estimation.
327 */
328 public static final int DEFAULT_ADDITIONAL_CAMERAS_MAX_ITERATIONS =
329 PinholeCameraRobustEstimator.DEFAULT_MAX_ITERATIONS;
330
331 /**
332 * Default threshold to determine whether samples for robust pinhole camera estimation are
333 * inliers or not.
334 */
335 public static final double DEFAULT_ADDITIONAL_CAMERAS_THRESHOLD =
336 PROSACEPnPPointCorrespondencePinholeCameraRobustEstimator.DEFAULT_THRESHOLD;
337
338 /**
339 * Default value indicating that inlier data is kept after additional camera estimation.
340 */
341 public static final boolean DEFAULT_ADDITIONAL_CAMERAS_COMPUTE_AND_KEEP_INLIERS = true;
342
343 /**
344 * Default value indicating that residual data is kept after additional camera estimation.
345 */
346 public static final boolean DEFAULT_ADDITIONAL_CAMERAS_COMPUTE_AND_KEEP_RESIDUALS = true;
347
348 /**
349 * Default value indicating that skewness is not suggested during additional cameras'
350 * estimation.
351 */
352 public static final boolean DEFAULT_ADDITIONAL_CAMERAS_SUGGEST_SKEWNESS_VALUE_ENABLED =
353 PinholeCameraRobustEstimator.DEFAULT_SUGGEST_SKEWNESS_VALUE_ENABLED;
354
355 /**
356 * Default value of skewness to be suggested when suggestion is enabled during
357 * additional cameras' estimation.
358 * By default, suggested skewness is zero.
359 */
360 public static final double DEFAULT_ADDITIONAL_CAMERAS_SUGGESTED_SKEWNESS_VALUE =
361 PinholeCameraRobustEstimator.DEFAULT_SUGGESTED_SKEWNESS_VALUE;
362
363 /**
364 * Default value indicating whether horizontal focal length value is suggested or not
365 * during additional cameras' estimation. By default, this is disabled.
366 */
367 public static final boolean DEFAULT_ADDITIONAL_CAMERAS_SUGGEST_HORIZONTAL_FOCAL_LENGTH_ENABLED =
368 PinholeCameraRobustEstimator.DEFAULT_SUGGEST_HORIZONTAL_FOCAL_LENGTH_ENABLED;
369
370 /**
371 * Default value indicating whether vertical focal length value is suggested or not
372 * during additional cameras' estimation. By default, this is disabled.
373 */
374 public static final boolean DEFAULT_ADDITIONAL_CAMERAS_SUGGEST_VERTICAL_FOCAL_LENGTH_ENABLED =
375 PinholeCameraRobustEstimator.DEFAULT_SUGGEST_VERTICAL_FOCAL_LENGTH_ENABLED;
376
377 /**
378 * Default value indicating whether aspect ratio is suggested or not. By default, this is
379 * disabled.
380 */
381 public static final boolean DEFAULT_ADDITIONAL_CAMERAS_SUGGEST_ASPECT_RATIO_ENABLED =
382 PinholeCameraRobustEstimator.DEFAULT_SUGGEST_ASPECT_RATIO_ENABLED;
383
384 /**
385 * Default value of aspect ratio to be suggested when suggestion is enabled.
386 * By default, suggested aspect ratio is 1.0, although also -1.0 is a typical value
387 * when vertical coordinates increase downwards.
388 */
389 public static final double DEFAULT_ADDITIONAL_CAMERAS_SUGGESTED_ASPECT_RATIO_VALUE =
390 PinholeCameraRobustEstimator.DEFAULT_SUGGESTED_ASPECT_RATIO_VALUE;
391
392 /**
393 * Default value indicating whether principal point is suggested or not. By default,
394 * this is disabled.
395 */
396 public static final boolean DEFAULT_ADDITIONAL_CAMERAS_SUGGEST_PRINCIPAL_POINT_ENABLED =
397 PinholeCameraRobustEstimator.DEFAULT_SUGGEST_PRINCIPAL_POINT_ENABLED;
398
399 /**
400 * Indicates that an homogeneous point triangulator will be used by default.
401 */
402 public static final boolean DEFAULT_USE_HOMOGENEOUS_POINT_TRIANGULATOR =
403 RobustSinglePoint3DTriangulator.DEFAULT_USE_HOMOGENEOUS_SOLUTION;
404
405 /**
406 * Default robust point triangulator method.
407 */
408 public static final RobustEstimatorMethod DEFAULT_ROBUST_POINT_TRIANGULATOR_METHOD =
409 RobustSinglePoint3DTriangulator.DEFAULT_ROBUST_METHOD;
410
411 /**
412 * Default confidence of robustly triangulated points. By default, this is 99%.
413 */
414 public static final double DEFAULT_POINT_TRIANGULATOR_CONFIDENCE =
415 RobustSinglePoint3DTriangulator.DEFAULT_CONFIDENCE;
416
417 /**
418 * Default maximum number of iterations to make while robustly estimating
419 * triangulated points. By default, this is 5000 iterations.
420 */
421 public static final int DEFAULT_POINT_TRIANGULATOR_MAX_ITERATIONS =
422 RobustSinglePoint3DTriangulator.DEFAULT_MAX_ITERATIONS;
423
424 /**
425 * Default threshold to determine whether samples for robust point triangulator are
426 * inliers or not.
427 */
428 public static final double DEFAULT_POINT_TRIANGULATOR_THRESHOLD =
429 PROSACRobustSinglePoint3DTriangulator.DEFAULT_THRESHOLD;
430
431 /**
432 * Method to use for non-robust fundamental matrix estimation.
433 * This is only used when general scenes are allowed.
434 */
435 private FundamentalMatrixEstimatorMethod mNonRobustFundamentalMatrixEstimatorMethod =
436 DEFAULT_NON_ROBUST_FUNDAMENTAL_MATRIX_ESTIMATOR_METHOD;
437
438 /**
439 * Method to use for robust fundamental matrix estimation.
440 * This is only used when general scenes are allowed.
441 */
442 private RobustEstimatorMethod mRobustFundamentalMatrixEstimatorMethod =
443 DEFAULT_ROBUST_FUNDAMENTAL_MATRIX_ESTIMATOR_METHOD;
444
445 /**
446 * Indicates whether estimated fundamental matrix is refined among all found inliers.
447 * This is only used when general scenes are allowed.
448 */
449 private boolean refineFundamentalMatrix = DEFAULT_REFINE_FUNDAMENTAL_MATRIX;
450
451 /**
452 * Indicates whether covariance of estimated fundamental matrix is kept after the
453 * estimation.
454 * This is only used when general scenes are allowed.
455 */
456 private boolean keepFundamentalMatrixCovariance = DEFAULT_KEEP_FUNDAMENTAL_MATRIX_COVARIANCE;
457
458 /**
459 * Confidence of robustly estimated fundamental matrix.
460 * This is only used when general scenes are allowed.
461 */
462 private double fundamentalMatrixConfidence = DEFAULT_FUNDAMENTAL_MATRIX_CONFIDENCE;
463
464 /**
465 * Maximum number of iterations to robustly estimate fundamental matrix.
466 * This is only used when general scenes are allowed.
467 */
468 private int fundamentalMatrixMaxIterations = DEFAULT_FUNDAMENTAL_MATRIX_MAX_ITERATIONS;
469
470 /**
471 * Threshold to determine whether samples for robust fundamental matrix estimation are
472 * inliers or not.
473 * This is only used when general scenes are allowed.
474 */
475 private double fundamentalMatrixThreshold = DEFAULT_FUNDAMENTAL_MATRIX_THRESHOLD;
476
477 /**
478 * Indicates whether inliers must be kept during robust fundamental matrix estimation.
479 * This is only used when general scenes are allowed.
480 */
481 private boolean fundamentalMatrixComputeAndKeepInliers = DEFAULT_FUNDAMENTAL_MATRIX_COMPUTE_AND_KEEP_INLIERS;
482
483 /**
484 * Indicates whether residuals must be computed and kept during robust fundamental matrix
485 * estimation.
486 * This is only used when general scenes are allowed.
487 */
488 private boolean fundamentalMatrixComputeAndKeepResiduals = DEFAULT_FUNDAMENTAL_MATRIX_COMPUTE_AND_KEEP_RESIDUALS;
489
490 /**
491 * Method to use for initial cameras' estimation.
492 */
493 private InitialCamerasEstimatorMethod initialCamerasEstimatorMethod = DEFAULT_INITIAL_CAMERAS_ESTIMATOR_METHOD;
494
495 /**
496 * Indicates whether an homogeneous point triangulator is used for point triangulation
497 * when Dual Absolute Quadric (DAQ) camera initialization is used.
498 */
499 private boolean daqUseHomogeneousPointTriangulator = DEFAULT_DAQ_USE_HOMOGENEOUS_POINT_TRIANGULATOR;
500
501 /**
502 * Aspect ratio for initial cameras.
503 */
504 private double initialCamerasAspectRatio = DEFAULT_INITIAL_CAMERAS_ASPECT_RATIO;
505
506 /**
507 * Horizontal principal point value to use for initial cameras estimation using
508 * Dual Image of Absolute Conic (DIAC) or Dual Absolute Quadric (DAQ) methods.
509 */
510 private double principalPointX = DEFAULT_INITIAL_CAMERAS_PRINCIPAL_POINT_X;
511
512 /**
513 * Vertical principal point value to use for initial cameras estimation using
514 * Dual Image of Absolute Conic (DIAC) or Dual Absolute Quadric (DAC) methods.
515 */
516 private double principalPointY = DEFAULT_INITIAL_CAMERAS_PRINCIPAL_POINT_Y;
517
518 /**
519 * Corrector type to use for point triangulation when initial cameras are being estimated
520 * using either Dual Image of Absolute Conic (DIAC) or essential matrix methods or null
521 * if no corrector is used.
522 */
523 private CorrectorType initialCamerasCorrectorType = DEFAULT_INITIAL_CAMERAS_CORRECTOR_TYPE;
524
525 /**
526 * Value indicating whether valid triangulated points are marked during initial
527 * cameras estimation using either Dual Image of Absolute Conic (DIAC) or essential
528 * matrix methods.
529 */
530 private boolean initialCamerasMarkValidTriangulatedPoints = DEFAULT_INITIAL_CAMERAS_MARK_VALID_TRIANGULATED_POINTS;
531
532 /**
533 * Intrinsic parameters of first camera estimated using the essential matrix
534 * method.
535 */
536 private PinholeCameraIntrinsicParameters initialIntrinsic1;
537
538 /**
539 * Intrinsic parameters of second camera estimated using the essential matrix
540 * method.
541 */
542 private PinholeCameraIntrinsicParameters initialIntrinsic2;
543
544 /**
545 * Indicates whether a general scene (points laying in a general 3D position) is
546 * allowed.
547 * When true, an initial geometry estimation is attempted for general points.
548 */
549 private boolean allowGeneralScene = DEFAULT_ALLOW_GENERAL_SCENE;
550
551 /**
552 * Indicates whether a planar scene (points laying in a 3D plane) is allowed.
553 * When true, an initial geometry estimation is attempted for planar points.
554 */
555 private boolean allowPlanarScene = DEFAULT_ALLOW_PLANAR_SCENE;
556
557 /**
558 * Robust method to use for planar homography estimation.
559 * This is only used when planar scenes are allowed.
560 */
561 private RobustEstimatorMethod robustPlanarHomographyEstimatorMethod =
562 DEFAULT_ROBUST_PLANAR_HOMOGRAPHY_ESTIMATOR_METHOD;
563
564 /**
565 * Indicates whether planar homography is refined using all found inliers or not.
566 * This is only used when planar scenes are allowed.
567 */
568 private boolean refinePlanarHomography = DEFAULT_REFINE_PLANAR_HOMOGRAPHY;
569
570 /**
571 * Indicates whether planar homography covariance is kept after estimation.
572 * This is only used when planar scenes are allowed.
573 */
574 private boolean keepPlanarHomographyCovariance = DEFAULT_KEEP_PLANAR_HOMOGRAPHY_COVARIANCE;
575
576 /**
577 * Confidence of robustly estimated planar homography. By default, this is 99%.
578 * This is only used when planar scenes are allowed.
579 */
580 private double planarHomographyConfidence = DEFAULT_PLANAR_HOMOGRAPHY_CONFIDENCE;
581
582 /**
583 * Maximum number of iterations to make while robustly estimating planar homography.
584 * By default, this is 5000.
585 * This is only used when planar scenes are allowed.
586 */
587 private int planarHomographyMaxIterations = DEFAULT_PLANAR_HOMOGRAPHY_MAX_ITERATIONS;
588
589 /**
590 * Threshold to determine whether samples for robust projective 2D transformation estimation
591 * are inliers or not.
592 */
593 private double planarHomographyThreshold = DEFAULT_PLANAR_HOMOGRAPHY_THRESHOLD;
594
595 /**
596 * Value indicating that inlier data is kept after robust planar homography estimation.
597 * This is only used when planar scenes are allowed.
598 */
599 private boolean planarHomographyComputeAndKeepInliers = DEFAULT_PLANAR_HOMOGRAPHY_COMPUTE_AND_KEEP_INLIERS;
600
601 /**
602 * Value indicating that residual data is kept after robust planar homography estimation.
603 * This is only used when planar scenes are allowed.
604 */
605 private boolean planarHomographyComputeAndKeepResiduals = DEFAULT_PLANAR_HOMOGRAPHY_COMPUTE_AND_KEEP_RESIDUALS;
606
607 /**
608 * Indicates that additional cameras intrinsics are estimated using the Dual Absolute
609 * Quadric (DAQ).
610 */
611 private boolean useDAQForAdditionalCamerasIntrinsics = DEFAULT_USE_DAQ_FOR_ADDITIONAL_CAMERAS_INTRINSICS;
612
613 /**
614 * Indicates that additional cameras intrinsics are estimated using the Dual Image of Absolute
615 * Conic (DIAC).
616 */
617 private boolean useDIACForAdditionalCamerasIntrinsics = DEFAULT_USE_DIAC_FOR_ADDITIONAL_CAMERAS_INTRINSICS;
618
619 /**
620 * Intrinsic parameters to use for additional cameras estimation when neither
621 * Dual Image of Absolute Conic (DIAC) nor Dual Absolute Quadric (DAQ) are used
622 * for intrinsic parameters' estimation.
623 */
624 private PinholeCameraIntrinsicParameters additionalCamerasIntrinsics;
625
626 /**
627 * Skewness for additional cameras when UPnP (Uncalibrated Perspective-n-Point) method
628 * is used for additional cameras' estimation.
629 */
630 private double additionalCamerasSkewness = DEFAULT_ADDITIONAL_CAMERAS_SKEWNESS;
631
632 /**
633 * Horizontal coordinate of principal point for additional cameras when UPnP
634 * (Uncalibrated Perspective-n-Point) method is used for additional cameras estimation
635 * and neither Dual Image of Absolute Conic (DIAC) or Dual Absolute Quadric (DAQ) are
636 * estimated to find intrinsic parameters when adding new cameras.
637 */
638 private double additionalCamerasHorizontalPrincipalPoint = DEFAULT_ADDITIONAL_CAMERAS_HORIZONTAL_PRINCIPAL_POINT;
639
640 /**
641 * Vertical coordinate of principal point for additional cameras when UPnP (Uncalibrated
642 * Perspective-n-Point) method is used for additional cameras estimation and neither Dual
643 * Image of Absolute Conic (DIAC) nor Dual Absolute Quadric (DAQ) are estimated to find
644 * intrinsic parameters when adding new cameras.
645 */
646 private double additionalCamerasVerticalPrincipalPoint = DEFAULT_ADDITIONAL_CAMERAS_VERTICAL_PRINCIPAL_POINT;
647
648 /**
649 * Aspect ratio for additional cameras.
650 */
651 private double additionalCamerasAspectRatio = DEFAULT_ADDITIONAL_CAMERAS_ASPECT_RATIO;
652
653 /**
654 * Indicates whether EPnP (Efficient Perspective-n-Point) method is used for additional
655 * cameras' estimation. Either EPnP or UPnP must be used for additional cameras'
656 * estimation.
657 */
658 private boolean useEPnPForAdditionalCamerasEstimation = DEFAULT_USE_EPNP_FOR_ADDITIONAL_CAMERAS_ESTIMATION;
659
660 /**
661 * Indicates whether UPnP (Uncalibrated Perspective-n-Point) method is used for
662 * additional cameras' estimation. Either EPnP or UPnP must be used for additional
663 * cameras' estimation.
664 */
665 private boolean useUPnPForAdditionalCamerasEstimation = DEFAULT_USE_UPNP_FOR_ADDITIONAL_CAMERAS_ESTIMATION;
666
667 /**
668 * Robust method to estimate additional cameras.
669 */
670 private RobustEstimatorMethod additionalCamerasRobustEstimationMethod =
671 DEFAULT_ADDITIONAL_CAMERAS_ROBUST_ESTIMATION_METHOD;
672
673 /**
674 * Indicates whether planar configuration is allowed for additional cameras
675 * estimation using either EPnP or UPnP.
676 */
677 private boolean additionalCamerasAllowPlanarConfiguration = DEFAULT_ADDITIONAL_CAMERAS_ALLOW_PLANAR_CONFIGURATION;
678
679 /**
680 * Indicates whether dimension 2 null-space is allowed while estimating additional
681 * cameras using either EPnP or UPnP.
682 */
683 private boolean additionalCamerasAllowNullspaceDimension2 = DEFAULT_ADDITIONAL_CAMERAS_ALLOW_NULLSPACE_DIMENSION2;
684
685 /**
686 * Indicates whether dimension 3 null-space is allowed while estimating additional
687 * cameras using EPnP.
688 */
689 private boolean additionalCamerasAllowNullspaceDimension3 = DEFAULT_ADDITIONAL_CAMERAS_ALLOW_NULLSPACE_DIMENSION3;
690
691 /**
692 * Threshold to determine whether 3D matched points to estimate additional cameras
693 * are in a planar configuration.
694 */
695 private double additionalCamerasPlanarThreshold = DEFAULT_ADDITIONAL_CAMERAS_PLANAR_THRESHOLD;
696
697 /**
698 * Indicates whether additional cameras are refined to minimize overall projection
699 * error among all found inliers.
700 */
701 private boolean refineAdditionalCameras = DEFAULT_REFINE_ADDITIONAL_CAMERAS;
702
703 /**
704 * Indicates whether covariance is kept after refining result of additional
705 * cameras' estimation.
706 */
707 private boolean keepCovarianceAdditionalCameras = DEFAULT_KEEP_COVARIANCE_ADDITIONAL_CAMERAS;
708
709 /**
710 * Value indicating whether fast refinement is used for additional cameras' estimation.
711 */
712 private boolean additionalCamerasUseFastRefinement = DEFAULT_ADDITIONAL_CAMERAS_USE_FAST_REFINEMENT;
713
714 /**
715 * Confidence of estimated additional cameras.
716 */
717 private double additionalCamerasConfidence = DEFAULT_ADDITIONAL_CAMERAS_CONFIDENCE;
718
719 /**
720 * Maximum allowed number of iterations for additional cameras estimation.
721 */
722 private int additionalCamerasMaxIterations = DEFAULT_ADDITIONAL_CAMERAS_MAX_ITERATIONS;
723
724 /**
725 * Threshold to determine whether samples for robust pinhole camera estimation are inliers or not.
726 */
727 private double additionalCamerasThreshold = DEFAULT_ADDITIONAL_CAMERAS_THRESHOLD;
728
729 /**
730 * Indicates whether inliers must be kept during additional camera estimation.
731 */
732 private boolean additionalCamerasComputeAndKeepInliers = DEFAULT_ADDITIONAL_CAMERAS_COMPUTE_AND_KEEP_INLIERS;
733
734 /**
735 * Indicates whether residuals must be computed and kept during additional camera estimation.
736 */
737 private boolean additionalCamerasComputeAndKeepResiduals = DEFAULT_ADDITIONAL_CAMERAS_COMPUTE_AND_KEEP_RESIDUALS;
738
739 /**
740 * Value indicating whether skewness is not suggested during additional cameras'
741 * estimation.
742 */
743 private boolean additionalCamerasSuggestSkewnessValueEnabled =
744 DEFAULT_ADDITIONAL_CAMERAS_SUGGEST_SKEWNESS_VALUE_ENABLED;
745
746 /**
747 * Value of skewness to be suggested when suggestion is enabled during additional
748 * cameras' estimation.
749 */
750 private double additionalCamerasSuggestedSkewnessValue = DEFAULT_ADDITIONAL_CAMERAS_SUGGESTED_SKEWNESS_VALUE;
751
752 /**
753 * Value indicating whether horizontal focal length value is suggested or not
754 * during additional cameras' estimation.
755 */
756 private boolean additionalCamerasSuggestHorizontalFocalLengthEnabled =
757 DEFAULT_ADDITIONAL_CAMERAS_SUGGEST_HORIZONTAL_FOCAL_LENGTH_ENABLED;
758
759 /**
760 * Value of suggested horizontal focal length during additional cameras' estimation.
761 */
762 private double additionalCamerasSuggestedHorizontalFocalLengthValue;
763
764 /**
765 * Value indicating whether vertical focal length value is suggested or not
766 * during additional cameras' estimation.
767 */
768 private boolean additionalCamerasSuggestVerticalFocalLengthEnabled =
769 DEFAULT_ADDITIONAL_CAMERAS_SUGGEST_VERTICAL_FOCAL_LENGTH_ENABLED;
770
771 /**
772 * Value of suggested vertical focal length during additional cameras' estimation.
773 */
774 private double additionalCamerasSuggestedVerticalFocalLengthValue;
775
776 /**
777 * Value indicating whether aspect ratio is suggested or not during
778 * additional cameras' estimation.
779 */
780 private boolean additionalCamerasSuggestAspectRatioEnabled =
781 DEFAULT_ADDITIONAL_CAMERAS_SUGGEST_ASPECT_RATIO_ENABLED;
782
783 /**
784 * Value of aspect ratio to be suggested when suggestion is enabled during
785 * additional cameras' estimation.
786 */
787 private double additionalCamerasSuggestedAspectRatioValue =
788 DEFAULT_ADDITIONAL_CAMERAS_SUGGESTED_ASPECT_RATIO_VALUE;
789
790 /**
791 * Value indicating whether principal point is suggested or not during
792 * additional cameras' estimation.
793 */
794 private boolean additionalCamerasSuggestPrincipalPointEnabled =
795 DEFAULT_ADDITIONAL_CAMERAS_SUGGEST_PRINCIPAL_POINT_ENABLED;
796
797 /**
798 * Value of principal point to be suggested when suggestion is enabled
799 * during additional cameras' estimation.
800 */
801 private InhomogeneousPoint2D additionalCamerasSuggestedPrincipalPointValue;
802
803 /**
804 * Indicates whether homogeneous point triangulator must be used or not to
805 * estimate 3D points when only two matches are available.
806 */
807 private boolean useHomogeneousPointTriangulator = DEFAULT_USE_HOMOGENEOUS_POINT_TRIANGULATOR;
808
809 /**
810 * Robust method for point triangulation when points are matched in more
811 * than two views.
812 */
813 private RobustEstimatorMethod robustPointTriangulatorMethod = DEFAULT_ROBUST_POINT_TRIANGULATOR_METHOD;
814
815 /**
816 * Confidence of robustly triangulated points. By default, this is 99%.
817 */
818 private double pointTriangulatorConfidence = DEFAULT_POINT_TRIANGULATOR_CONFIDENCE;
819
820 /**
821 * Maximum number of iterations to make while robustly estimating
822 * triangulated points. By default, this is 5000 iterations.
823 */
824 private int pointTriangulatorMaxIterations = DEFAULT_POINT_TRIANGULATOR_MAX_ITERATIONS;
825
826 /**
827 * Threshold to determine whether samples for robust point triangulator are
828 * inliers or not.
829 */
830 private double pointTriangulatorThreshold = DEFAULT_POINT_TRIANGULATOR_THRESHOLD;
831
832 /**
833 * Constructor.
834 */
835 protected BaseSparseReconstructorConfiguration() {
836 }
837
838 /**
839 * Gets method to use for non-robust fundamental matrix estimation.
840 * This is only used when general scenes are allowed.
841 *
842 * @return method to use for non-robust fundamental matrix estimation.
843 */
844 public FundamentalMatrixEstimatorMethod getNonRobustFundamentalMatrixEstimatorMethod() {
845 return mNonRobustFundamentalMatrixEstimatorMethod;
846 }
847
848 /**
849 * Sets method to use for non-robust fundamental matrix estimation.
850 * This is only used when general scenes are allowed.
851 *
852 * @param method method to use for non-robust fundamental matrix estimation.
853 * @return this instance so that method can be easily chained.
854 */
855 public T setNonRobustFundamentalMatrixEstimatorMethod(final FundamentalMatrixEstimatorMethod method) {
856 mNonRobustFundamentalMatrixEstimatorMethod = method;
857 //noinspection unchecked
858 return (T) this;
859 }
860
861 /**
862 * Gets method to use for robust fundamental matrix estimation.
863 * This is only used when general scenes are allowed.
864 *
865 * @return method to use for robust fundamental matrix estimation.
866 */
867 public RobustEstimatorMethod getRobustFundamentalMatrixEstimatorMethod() {
868 return mRobustFundamentalMatrixEstimatorMethod;
869 }
870
871 /**
872 * Sets method to use for robust fundamental matrix estimation.
873 * This is only used when general scenes are allowed.
874 *
875 * @param method method to use for robust fundamental matrix estimation.
876 * @return this instance so that method can be easily chained.
877 */
878 public T setRobustFundamentalMatrixEstimatorMethod(final RobustEstimatorMethod method) {
879 mRobustFundamentalMatrixEstimatorMethod = method;
880 //noinspection unchecked
881 return (T) this;
882 }
883
884 /**
885 * Indicates whether estimated fundamental matrix is refined among all found inliers.
886 * This is only used when general scenes are allowed.
887 *
888 * @return true if fundamental matrix is refined, false otherwise.
889 */
890 public boolean isFundamentalMatrixRefined() {
891 return refineFundamentalMatrix;
892 }
893
894 /**
895 * Specifies whether estimated fundamental matrix is refined among all found inliers.
896 * This is only used when general scenes are allowed.
897 *
898 * @param refineFundamentalMatrix true if fundamental matrix is refined, false otherwise.
899 * @return this instance so that method can be easily chained.
900 */
901 public T setFundamentalMatrixRefined(final boolean refineFundamentalMatrix) {
902 this.refineFundamentalMatrix = refineFundamentalMatrix;
903 //noinspection unchecked
904 return (T) this;
905 }
906
907 /**
908 * Indicates whether covariance of estimated fundamental matrix is kept after the estimation.
909 * This is only used when general scenes are allowed.
910 *
911 * @return true if covariance is kept, false otherwise.
912 */
913 public boolean isFundamentalMatrixCovarianceKept() {
914 return keepFundamentalMatrixCovariance;
915 }
916
917 /**
918 * Specifies whether covariance of estimated fundamental matrix is kept after the
919 * estimation.
920 * This is only used when general scenes are allowed.
921 *
922 * @param keepFundamentalMatrixCovariance true if covariance is kept, false otherwise.
923 * @return this instance so that method can be easily chained.
924 */
925 public T setFundamentalMatrixCovarianceKept(final boolean keepFundamentalMatrixCovariance) {
926 this.keepFundamentalMatrixCovariance = keepFundamentalMatrixCovariance;
927 //noinspection unchecked
928 return (T) this;
929 }
930
931 /**
932 * Gets confidence of robustly estimated fundamental matrix.
933 * This is only used when general scenes are allowed.
934 *
935 * @return confidence of robustly estimated fundamental matrix.
936 */
937 public double getFundamentalMatrixConfidence() {
938 return fundamentalMatrixConfidence;
939 }
940
941 /**
942 * Sets confidence of robustly estimated fundamental matrix.
943 * This is only used when general scenes are allowed.
944 *
945 * @param fundamentalMatrixConfidence confidence of robustly estimated fundamental matrix.
946 * @return this instance so that method can be easily chained.
947 */
948 public T setFundamentalMatrixConfidence(final double fundamentalMatrixConfidence) {
949 this.fundamentalMatrixConfidence = fundamentalMatrixConfidence;
950 //noinspection unchecked
951 return (T) this;
952 }
953
954 /**
955 * Gets maximum number of iterations to robustly estimate fundamental matrix.
956 * This is only used when general scenes are allowed.
957 *
958 * @return maximum number of iterations to robustly estimate fundamental matrix.
959 */
960 public int getFundamentalMatrixMaxIterations() {
961 return fundamentalMatrixMaxIterations;
962 }
963
964 /**
965 * Sets maximum number of iterations to robustly estimate fundamental matrix.
966 * This is only used when general scenes are allowed.
967 *
968 * @param fundamentalMatrixMaxIterations maximum number of iterations to robustly estimate
969 * fundamental matrix.
970 * @return this instance so that method can be easily chained.
971 */
972 public T setFundamentalMatrixMaxIterations(final int fundamentalMatrixMaxIterations) {
973 this.fundamentalMatrixMaxIterations = fundamentalMatrixMaxIterations;
974 //noinspection unchecked
975 return (T) this;
976 }
977
978 /**
979 * Gets threshold to determine whether samples for robust fundamental matrix estimation
980 * are inliers or not.
981 * This is only used when general scenes are allowed.
982 *
983 * @return threshold to determine whether samples for robust fundamental matrix
984 * estimation are inliers or not.
985 */
986 public double getFundamentalMatrixThreshold() {
987 return fundamentalMatrixThreshold;
988 }
989
990 /**
991 * Sets threshold to determine whether samples for robust fundamental matrix
992 * estimation are inliers or not.
993 * This is only used when general scenes are allowed.
994 *
995 * @param fundamentalMatrixThreshold threshold to determine whether samples for
996 * robust fundamental matrix estimation are inliers
997 * or not.
998 * @return this instance so that method can be easily chained.
999 */
1000 public T setFundamentalMatrixThreshold(final double fundamentalMatrixThreshold) {
1001 this.fundamentalMatrixThreshold = fundamentalMatrixThreshold;
1002 //noinspection unchecked
1003 return (T) this;
1004 }
1005
1006 /**
1007 * Indicates whether inliers must be kept during robust fundamental matrix estimation.
1008 * This is only used when general scenes are allowed.
1009 *
1010 * @return true if inliers must be kept during robust fundamental matrix estimation,
1011 * false otherwise.
1012 */
1013 public boolean getFundamentalMatrixComputeAndKeepInliers() {
1014 return fundamentalMatrixComputeAndKeepInliers;
1015 }
1016
1017 /**
1018 * Specifies whether inliers must be kept during robust fundamental matrix estimation.
1019 * This is only used when general scenes are allowed.
1020 *
1021 * @param fundamentalMatrixComputeAndKeepInliers true if inliers must be kept during
1022 * robust fundamental matrix estimation, false
1023 * otherwise.
1024 * @return this instance so that method can be easily chained.
1025 */
1026 public T setFundamentalMatrixComputeAndKeepInliers(final boolean fundamentalMatrixComputeAndKeepInliers) {
1027 this.fundamentalMatrixComputeAndKeepInliers = fundamentalMatrixComputeAndKeepInliers;
1028 //noinspection unchecked
1029 return (T) this;
1030 }
1031
1032 /**
1033 * Indicates whether residuals must be computed and kept during robust fundamental
1034 * matrix estimation.
1035 * This is only used when general scenes are allowed.
1036 *
1037 * @return true if residuals must be computed and kept, false otherwise.
1038 */
1039 public boolean getFundamentalMatrixComputeAndKeepResiduals() {
1040 return fundamentalMatrixComputeAndKeepResiduals;
1041 }
1042
1043 /**
1044 * Specifies whether residuals must be computed and kept during robust fundamental
1045 * matrix estimation.
1046 * This is only used when general scenes are allowed.
1047 *
1048 * @param fundamentalMatrixComputeAndKeepResiduals true if residuals must be
1049 * computed and kept, false otherwise.
1050 * @return this instance so that method can be easily chained.
1051 */
1052 public T setFundamentalMatrixComputeAndKeepResiduals(final boolean fundamentalMatrixComputeAndKeepResiduals) {
1053 this.fundamentalMatrixComputeAndKeepResiduals = fundamentalMatrixComputeAndKeepResiduals;
1054 //noinspection unchecked
1055 return (T) this;
1056 }
1057
1058 /**
1059 * Gets method to use for initial cameras' estimation.
1060 *
1061 * @return method to use for initial cameras' estimation.
1062 */
1063 public InitialCamerasEstimatorMethod getInitialCamerasEstimatorMethod() {
1064 return initialCamerasEstimatorMethod;
1065 }
1066
1067 /**
1068 * Sets method to use for initial cameras' estimation.
1069 *
1070 * @param method method to use for initial cameras' estimation.
1071 * @return this instance so that method can be easily chained.
1072 */
1073 public T setInitialCamerasEstimatorMethod(final InitialCamerasEstimatorMethod method) {
1074 initialCamerasEstimatorMethod = method;
1075 //noinspection unchecked
1076 return (T) this;
1077 }
1078
1079 /**
1080 * Indicates whether an homogeneous point triangulator is used for point triangulation
1081 * when Dual Absolute Quadric (DAQ) camera initialization is used.
1082 *
1083 * @return true if homogeneous point triangulator is used, false if an inhomogeneous
1084 * point triangulator is used instead.
1085 */
1086 public boolean getDaqUseHomogeneousPointTriangulator() {
1087 return daqUseHomogeneousPointTriangulator;
1088 }
1089
1090 /**
1091 * Specifies whether an homogeneous point triangulator is used for point
1092 * triangulation when Dual Absolute Quadric (DAQ) camera initialization is used.
1093 *
1094 * @param daqUseHomogeneousPointTriangulator true if homogeneous point triangulator
1095 * is used, false if inhomogeneous point
1096 * triangulator is used instead.
1097 * @return this instance so that method can be easily chained.
1098 */
1099 public T setDaqUseHomogeneousPointTriangulator(final boolean daqUseHomogeneousPointTriangulator) {
1100 this.daqUseHomogeneousPointTriangulator = daqUseHomogeneousPointTriangulator;
1101 //noinspection unchecked
1102 return (T) this;
1103 }
1104
1105 /**
1106 * Gets aspect ratio for initial cameras estimation using DAQ or DIAC methods.
1107 *
1108 * @return aspect ratio for initial cameras using DAQ or DIAC methods.
1109 */
1110 public double getInitialCamerasAspectRatio() {
1111 return initialCamerasAspectRatio;
1112 }
1113
1114 /**
1115 * Sets aspect ratio for initial cameras using DAQ or DIAC methods.
1116 *
1117 * @param initialCamerasAspectRatio aspect ratio for initial cameras using DAQ or DIAC
1118 * methods.
1119 * @return this instance so that method can be easily chained.
1120 */
1121 public T setInitialCamerasAspectRatio(final double initialCamerasAspectRatio) {
1122 this.initialCamerasAspectRatio = initialCamerasAspectRatio;
1123 //noinspection unchecked
1124 return (T) this;
1125 }
1126
1127 /**
1128 * Gets horizontal principal point value to use for initial cameras estimation
1129 * using DIAC or DAQ methods.
1130 *
1131 * @return horizontal principal point value to use for initial cameras estimation
1132 * using DIAC or DAQ methods.
1133 */
1134 public double getPrincipalPointX() {
1135 return principalPointX;
1136 }
1137
1138 /**
1139 * Sets horizontal principal point value to use for initial cameras estimation
1140 * using DIAC or DAQ methods.
1141 *
1142 * @param principalPointX horizontal principal point value to use for initial
1143 * cameras estimation using DIAC or DAQ methods.
1144 * @return this instance so that method can be easily chained.
1145 */
1146 public T setPrincipalPointX(final double principalPointX) {
1147 this.principalPointX = principalPointX;
1148 //noinspection unchecked
1149 return (T) this;
1150 }
1151
1152 /**
1153 * Gets vertical principal point value to use for initial cameras estimation
1154 * using DIAC or DAQ methods.
1155 *
1156 * @return vertical principal point value to use for initial cameras
1157 * estimation using DIAC or DAQ methods.
1158 */
1159 public double getPrincipalPointY() {
1160 return principalPointY;
1161 }
1162
1163 /**
1164 * Sets vertical principal point value to use for initial cameras estimation using
1165 * DIAC or DAQ methods.
1166 *
1167 * @param principalPointY vertical principal point value to use for initial cameras
1168 * estimation using DIAC or DAQ methods.
1169 * @return this instance so that method can be easily chained.
1170 */
1171 public T setPrincipalPointY(final double principalPointY) {
1172 this.principalPointY = principalPointY;
1173 //noinspection unchecked
1174 return (T) this;
1175 }
1176
1177 /**
1178 * Gets corrector type to use for point triangulation when initial cameras are being
1179 * estimated using either DIAC or essential matrix methods or null if no corrector is
1180 * used.
1181 *
1182 * @return corrector type to use for point triangulation when initial cameras are
1183 * being estimated using either DIAC or essential matrix methods or null if no
1184 * corrector is used.
1185 */
1186 public CorrectorType getInitialCamerasCorrectorType() {
1187 return initialCamerasCorrectorType;
1188 }
1189
1190 /**
1191 * Sets corrector type to use for point triangulation when initial cameras are being
1192 * estimated using either DIAC or essential matrix methods or null if no corrector
1193 * is used.
1194 *
1195 * @param type corrector type to use for point triangulation when initial cameras
1196 * are being estimated using either DIAC or essential matrix methods
1197 * or null if no corrector is used.
1198 * @return this instance so that method can be easily chained.
1199 */
1200 public T setInitialCamerasCorrectorType(final CorrectorType type) {
1201 initialCamerasCorrectorType = type;
1202 //noinspection unchecked
1203 return (T) this;
1204 }
1205
1206 /**
1207 * Gets value indicating whether valid triangulated points are marked during initial
1208 * cameras estimation using either DIAC or essential matrix methods.
1209 *
1210 * @return value indicating whether valid triangulated points are marked during
1211 * initial cameras estimation using either DIAC or essential matrix methods.
1212 */
1213 public boolean getInitialCamerasMarkValidTriangulatedPoints() {
1214 return initialCamerasMarkValidTriangulatedPoints;
1215 }
1216
1217 /**
1218 * Sets value indicating whether valid triangulated points are marked during initial
1219 * cameras estimation using either DIAC or essential matrix methods.
1220 *
1221 * @param initialCamerasMarkValidTriangulatedPoints value indicating whether valid
1222 * triangulated points are marked during
1223 * initial cameras estimation using
1224 * either DIAC or essential matrix
1225 * methods.
1226 * @return this instance so that method can be easily chained.
1227 */
1228 public T setInitialCamerasMarkValidTriangulatedPoints(final boolean initialCamerasMarkValidTriangulatedPoints) {
1229 this.initialCamerasMarkValidTriangulatedPoints = initialCamerasMarkValidTriangulatedPoints;
1230 //noinspection unchecked
1231 return (T) this;
1232 }
1233
1234 /**
1235 * Intrinsic parameters of first camera estimated using the essential matrix method.
1236 *
1237 * @return parameters of first camera estimated using the essential matrix method.
1238 */
1239 public PinholeCameraIntrinsicParameters getInitialIntrinsic1() {
1240 return initialIntrinsic1;
1241 }
1242
1243 /**
1244 * Sets intrinsic parameters of first camera estimated using the essential matrix
1245 * method.
1246 *
1247 * @param initialIntrinsic1 parameters of first camera estimated using the essential
1248 * matrix method.
1249 * @return this instance so that method can be easily chained.
1250 */
1251 public T setInitialIntrinsic1(final PinholeCameraIntrinsicParameters initialIntrinsic1) {
1252 this.initialIntrinsic1 = initialIntrinsic1;
1253 //noinspection unchecked
1254 return (T) this;
1255 }
1256
1257 /**
1258 * Intrinsic parameters of second camera estimated using the essential matrix method.
1259 *
1260 * @return parameters of second camera estimated using the essential matrix method.
1261 */
1262 public PinholeCameraIntrinsicParameters getInitialIntrinsic2() {
1263 return initialIntrinsic2;
1264 }
1265
1266 /**
1267 * Sets intrinsic parameters of second camera estimated using the essential matrix
1268 * method.
1269 *
1270 * @param initialIntrinsic2 parameters of second camera estimated using the essential
1271 * matrix method.
1272 * @return this instance so that method can be easily chained.
1273 */
1274 public T setInitialIntrinsic2(final PinholeCameraIntrinsicParameters initialIntrinsic2) {
1275 this.initialIntrinsic2 = initialIntrinsic2;
1276 //noinspection unchecked
1277 return (T) this;
1278 }
1279
1280 /**
1281 * Indicates whether a general scene (points laying in a general 3D position) is
1282 * allowed.
1283 * When true, an initial geometry estimation is attempted for general points.
1284 *
1285 * @return true if general scene is allowed, false otherwise.
1286 */
1287 public boolean isGeneralSceneAllowed() {
1288 return allowGeneralScene;
1289 }
1290
1291 /**
1292 * Specifies whether a general scene (points laying in a general 3D position) is
1293 * allowed.
1294 * When true, an initial geometry estimation is attempted for general points.
1295 *
1296 * @param allowGeneralScene true if general scene is allowed, false otherwise.
1297 * @return this instance so that method can be easily chained.
1298 */
1299 public T setGeneralSceneAllowed(final boolean allowGeneralScene) {
1300 this.allowGeneralScene = allowGeneralScene;
1301 //noinspection unchecked
1302 return (T) this;
1303 }
1304
1305 /**
1306 * Indicates whether a planar scene (points laying in a 3D plane) is allowed or not.
1307 * When true, an initial geometry estimation is attempted for planar points.
1308 *
1309 * @return true if planar scene is allowed, false otherwise.
1310 */
1311 public boolean isPlanarSceneAllowed() {
1312 return allowPlanarScene;
1313 }
1314
1315 /**
1316 * Specifies whether a planar scene (points laying in a 3D plane) is allowed or not.
1317 * When true, an initial geometry estimation is attempted for planar points.
1318 *
1319 * @param allowPlanarScene true if planar scene is allowed, false otherwise.
1320 * @return this instance so that method can be easily chained.
1321 */
1322 public T setPlanarSceneAllowed(final boolean allowPlanarScene) {
1323 this.allowPlanarScene = allowPlanarScene;
1324 //noinspection unchecked
1325 return (T) this;
1326 }
1327
1328 /**
1329 * Gets robust method to use for planar homography estimation.
1330 * This is only used when planar scenes are allowed.
1331 *
1332 * @return robust method to use for planar homography estimation.
1333 */
1334 public RobustEstimatorMethod getRobustPlanarHomographyEstimatorMethod() {
1335 return robustPlanarHomographyEstimatorMethod;
1336 }
1337
1338 /**
1339 * Sets robust method to use for planar homography estimation.
1340 * This is only used when planar scenes are allowed.
1341 *
1342 * @param robustPlanarHomographyEstimatorMethod robust method to use for planar
1343 * homography estimation.
1344 * @return this instance so that method can be easily chained.
1345 */
1346 public T setRobustPlanarHomographyEstimatorMethod(
1347 final RobustEstimatorMethod robustPlanarHomographyEstimatorMethod) {
1348 this.robustPlanarHomographyEstimatorMethod = robustPlanarHomographyEstimatorMethod;
1349 //noinspection unchecked
1350 return (T) this;
1351 }
1352
1353 /**
1354 * Indicates whether planar homography is refined using all found inliers or not.
1355 * This is only used when planar scenes are allowed.
1356 *
1357 * @return true if planar homography is refined, false otherwise.
1358 */
1359 public boolean isPlanarHomographyRefined() {
1360 return refinePlanarHomography;
1361 }
1362
1363 /**
1364 * Specifies whether planar homography is refined using all found inliers or not.
1365 * This is only used when planar scenes are allowed.
1366 *
1367 * @param refinePlanarHomography true if planar homography must be refined, false
1368 * otherwise.
1369 * @return this instance so that method can be easily chained.
1370 */
1371 public T setPlanarHomographyRefined(final boolean refinePlanarHomography) {
1372 this.refinePlanarHomography = refinePlanarHomography;
1373 //noinspection unchecked
1374 return (T) this;
1375 }
1376
1377 /**
1378 * Indicates whether planar homography covariance is kept after estimation.
1379 * This is only used when planar scenes are allowed.
1380 *
1381 * @return true if planar homography covariance is kept, false otherwise.
1382 */
1383 public boolean isPlanarHomographyCovarianceKept() {
1384 return keepPlanarHomographyCovariance;
1385 }
1386
1387 /**
1388 * Specifies whether planar homography covariance is kept after estimation.
1389 * This is only used when planar scenes are allowed.
1390 *
1391 * @param keepPlanarHomographyCovariance true if planar homography covariance is
1392 * kept, false otherwise.
1393 * @return this instance so that method can be easily chained.
1394 */
1395 public T setPlanarHomographyCovarianceKept(final boolean keepPlanarHomographyCovariance) {
1396 this.keepPlanarHomographyCovariance = keepPlanarHomographyCovariance;
1397 //noinspection unchecked
1398 return (T) this;
1399 }
1400
1401 /**
1402 * Gets confidence of robustly estimated planar homography. By default, this is 99%.
1403 * This is only used when planar scenes are allowed.
1404 *
1405 * @return confidence of robustly estimated planar homography.
1406 */
1407 public double getPlanarHomographyConfidence() {
1408 return planarHomographyConfidence;
1409 }
1410
1411 /**
1412 * Sets confidence of robustly estimated planar homography. By default, this is 99%.
1413 * This is only used when planar scenes are allowed.
1414 *
1415 * @param planarHomographyConfidence confidence of robustly estimated planar
1416 * homography.
1417 * @return this instance so that method can be easily chained.
1418 */
1419 public T setPlanarHomographyConfidence(final double planarHomographyConfidence) {
1420 this.planarHomographyConfidence = planarHomographyConfidence;
1421 //noinspection unchecked
1422 return (T) this;
1423 }
1424
1425 /**
1426 * Gets maximum number of iterations to make while robustly estimating planar
1427 * homography. By default, this is 5000.
1428 * This is only used when planar scenes are allowed.
1429 *
1430 * @return maximum number of iterations to make while robustly estimating planar
1431 * homography.
1432 */
1433 public int getPlanarHomographyMaxIterations() {
1434 return planarHomographyMaxIterations;
1435 }
1436
1437 /**
1438 * Sets maximum number of iterations to make while robustly estimating planar
1439 * homography. By default, this is 5000.
1440 * This is only used when planar scenes are allowed.
1441 *
1442 * @param planarHomographyMaxIterations maximum number of iterations to make while
1443 * robustly estimating planar homography.
1444 * @return this instance so that method can be easily chained.
1445 */
1446 public T setPlanarHomographyMaxIterations(final int planarHomographyMaxIterations) {
1447 this.planarHomographyMaxIterations = planarHomographyMaxIterations;
1448 //noinspection unchecked
1449 return (T) this;
1450 }
1451
1452 /**
1453 * Gets threshold to determine whether samples for robust projective 2D
1454 * transformation estimation are inliers or not.
1455 * This is only used when planar scenes are allowed.
1456 *
1457 * @return threshold to robustly estimate projective 2D transformation.
1458 */
1459 public double getPlanarHomographyThreshold() {
1460 return planarHomographyThreshold;
1461 }
1462
1463 /**
1464 * Sets threshold to determine whether samples for robust projective 2D
1465 * transformation estimation are inliers or not.
1466 * This is only used when planar scenes are allowed.
1467 *
1468 * @param planarHomographyThreshold threshold to robustly estimate projective 2D
1469 * transformation.
1470 * @return this instance so that method can be easily chained.
1471 */
1472 public T setPlanarHomographyThreshold(final double planarHomographyThreshold) {
1473 this.planarHomographyThreshold = planarHomographyThreshold;
1474 //noinspection unchecked
1475 return (T) this;
1476 }
1477
1478 /**
1479 * Gets value indicating that inlier data is kept after robust planar homography
1480 * estimation.
1481 * This is only used when planar scenes are allowed.
1482 *
1483 * @return true if inlier data is kept, false otherwise.
1484 */
1485 public boolean getPlanarHomographyComputeAndKeepInliers() {
1486 return planarHomographyComputeAndKeepInliers;
1487 }
1488
1489 /**
1490 * Specifies whether inlier data is kept after robust planar homography estimation.
1491 * This is only used when planar scenes are allowed.
1492 *
1493 * @param planarHomographyComputeAndKeepInliers true if inlier data is kept, false
1494 * otherwise.
1495 * @return this instance so that method can be easily chained.
1496 */
1497 public T setPlanarHomographyComputeAndKeepInliers(final boolean planarHomographyComputeAndKeepInliers) {
1498 this.planarHomographyComputeAndKeepInliers = planarHomographyComputeAndKeepInliers;
1499 //noinspection unchecked
1500 return (T) this;
1501 }
1502
1503 /**
1504 * Gets value indicating that residual data is kept after robust planar homography
1505 * estimation.
1506 * This is only used when planar scenes are allowed.
1507 *
1508 * @return true if residual data is kept, false otherwise.
1509 */
1510 public boolean getPlanarHomographyComputeAndKeepResiduals() {
1511 return planarHomographyComputeAndKeepResiduals;
1512 }
1513
1514 /**
1515 * Sets value indicating that residual data is kept after robust planar homography
1516 * estimation.
1517 * This is only used when planar scenes are allowed.
1518 *
1519 * @param planarHomographyComputeAndKeepResiduals true if residual data is kept,
1520 * false otherwise.
1521 * @return this instance so that method can be easily chained.
1522 */
1523 public T setPlanarHomographyComputeAndKeepResiduals(final boolean planarHomographyComputeAndKeepResiduals) {
1524 this.planarHomographyComputeAndKeepResiduals = planarHomographyComputeAndKeepResiduals;
1525 //noinspection unchecked
1526 return (T) this;
1527 }
1528
1529 /**
1530 * Indicates that additional cameras intrinsics are estimated using the Dual Absolute
1531 * Quadric (DAQ).
1532 *
1533 * @return true if additional cameras intrinsics are estimated using the Dual Absolute
1534 * Quadric (DAQ), false otherwise.
1535 */
1536 public boolean getUseDAQForAdditionalCamerasIntrinsics() {
1537 return useDAQForAdditionalCamerasIntrinsics;
1538 }
1539
1540 /**
1541 * Specifies whether additional cameras intrinsics are estimated using the Dual Absolute
1542 * Quadric (DAQ).
1543 *
1544 * @param useDAQForAdditionalCamerasIntrinics true if additional cameras intrinsics
1545 * are estimated using the Dual Absolute
1546 * Quadric (DAQ), false otherwise.
1547 * @return this instance so that method can be easily chained.
1548 */
1549 public T setUseDAQForAdditionalCamerasIntrinics(final boolean useDAQForAdditionalCamerasIntrinics) {
1550 useDAQForAdditionalCamerasIntrinsics = useDAQForAdditionalCamerasIntrinics;
1551 //noinspection unchecked
1552 return (T) this;
1553 }
1554
1555 /**
1556 * Indicates that additional cameras intrinsics are estimated using the Dual Image of Absolute
1557 * Conic (DIAC).
1558 *
1559 * @return true if additional cameras intrinsics are estimated using the Dual Image of Absolute Conic
1560 * (DIAC), false otherwise.
1561 */
1562 public boolean getUseDIACForAdditionalCamerasIntrinsics() {
1563 return useDIACForAdditionalCamerasIntrinsics;
1564 }
1565
1566 /**
1567 * Specifies whether additional cameras intrinsics are estimated using the Dual Image of
1568 * Absolute Conic (DIAC).
1569 * It is not recommended to enable this setting as it has low accuracy.
1570 *
1571 * @param useDIACForAdditionalCamerasIntrinsics true if additional cameras intrinsics are
1572 * estimated using the Dual Image of Absolute
1573 * Conic (DIAC), false otherwise.
1574 * @return this instance so that method can be easily chained.
1575 */
1576 public T setUseDIACForAdditionalCamerasIntrinsics(final boolean useDIACForAdditionalCamerasIntrinsics) {
1577 this.useDIACForAdditionalCamerasIntrinsics = useDIACForAdditionalCamerasIntrinsics;
1578 //noinspection unchecked
1579 return (T) this;
1580 }
1581
1582 /**
1583 * Gets intrinsic parameters to use for additional cameras estimation when neither
1584 * Dual Image of Absolute Conic (DIAC) nor Dual Absolute Quadric (DAQ) are used for
1585 * estimation of intrinsic parameters.
1586 *
1587 * @return intrinsic parameters to use for additional estimation of cameras.
1588 */
1589 public PinholeCameraIntrinsicParameters getAdditionalCamerasIntrinsics() {
1590 return additionalCamerasIntrinsics;
1591 }
1592
1593 /**
1594 * Sets intrinsic parameters to use for additional cameras estimation when neither
1595 * Dual Image of Absolute Conic (DIAC) nor Dual Absolute Quadric (DAQ) are used for
1596 * estimation of intrinsic parameters.
1597 *
1598 * @param additionalCamerasIntrinsics intrinsic parameters to use for additional
1599 * estimation of cameras.
1600 * @return this instance so that method can be easily chained.
1601 */
1602 public T setAdditionalCamerasIntrinsics(final PinholeCameraIntrinsicParameters additionalCamerasIntrinsics) {
1603 this.additionalCamerasIntrinsics = additionalCamerasIntrinsics;
1604 //noinspection unchecked
1605 return (T) this;
1606 }
1607
1608 /**
1609 * Gets skewness for additional cameras when UPnP (Uncalibrated Perspective-n-Point)
1610 * method is used for additional estimation of cameras.
1611 *
1612 * @return skewness for additional cameras when UPnP method is used for additional
1613 * estimation of cameras.
1614 */
1615 public double getAdditionalCamerasSkewness() {
1616 return additionalCamerasSkewness;
1617 }
1618
1619 /**
1620 * Sets skewness for additional cameras when UPnP (Uncalibrated Perspective-n-Point)
1621 * method is used for additional estimation of cameras.
1622 *
1623 * @param additionalCamerasSkewness skewness for additional cameras when UPnP method is
1624 * used for additional estimation of cameras.
1625 * @return this instance so that method can be easily chained.
1626 */
1627 public T setAdditionalCamerasSkewness(final double additionalCamerasSkewness) {
1628 this.additionalCamerasSkewness = additionalCamerasSkewness;
1629 //noinspection unchecked
1630 return (T) this;
1631 }
1632
1633 /**
1634 * Gets horizontal coordinate of principal point for additional cameras when UPnP
1635 * (Uncalibrated Perspective-n-Point) method is used for additional cameras
1636 * estimation and neither Dual Image of Absolute Conic (DIAC) or Dual Absolute
1637 * Quadric (DAQ) are estimated to find intrinsic parameters when adding new cameras.
1638 *
1639 * @return horizontal coordinate of principal point for additional cameras when
1640 * UPnP method is used for additional cameras estimation and neither DIAC nor DAQ
1641 * are estimated to find intrinsic parameters when adding new cameras.
1642 */
1643 public double getAdditionalCamerasHorizontalPrincipalPoint() {
1644 return additionalCamerasHorizontalPrincipalPoint;
1645 }
1646
1647 /**
1648 * Sets horizontal coordinate of principal point for additional cameras when UPnP
1649 * (Uncalibrated Perspective-n-Point) method is used for additional cameras estimation
1650 * and neither Dual Image of Absolute Conic (DIAC) or Dual Absolute Quadric (DAQ) are
1651 * estimated to find intrinsic parameters when adding new cameras.
1652 *
1653 * @param additionalCamerasHorizontalPrincipalPoint horizontal coordinate of principal point
1654 * for additional cameras when UPnP method is
1655 * used for additional cameras estimation and
1656 * neither DIAC nor DAQ are estimated to find
1657 * intrinsic parameters when adding new cameras.
1658 * @return this instance so that method can be easily chained.
1659 */
1660 public T setAdditionalCamerasHorizontalPrincipalPoint(final double additionalCamerasHorizontalPrincipalPoint) {
1661 this.additionalCamerasHorizontalPrincipalPoint = additionalCamerasHorizontalPrincipalPoint;
1662 //noinspection unchecked
1663 return (T) this;
1664 }
1665
1666 /**
1667 * Gets vertical coordinate of principal point for additional cameras when UPnP
1668 * (Uncalibrated Perspective-n-Point) method is used for additional cameras estimation
1669 * and neither Dual Image of Absolute Conic (DIAC) or Dual Absolute Quadric (DAQ) are
1670 * estimated to find intrinsic parameters when adding new cameras.
1671 *
1672 * @return vertical coordinate of principal point for additional cameras when UPnP
1673 * method is used for additional cameras estimation and neither DIAC nor DAQ are
1674 * estimated to find intrinsic parameters when adding new cameras.
1675 */
1676 public double getAdditionalCamerasVerticalPrincipalPoint() {
1677 return additionalCamerasVerticalPrincipalPoint;
1678 }
1679
1680 /**
1681 * Sets vertical coordinate of principal point for additional cameras when UPnP
1682 * (Uncalibrated Perspective-n-Point) method is used for additional cameras
1683 * estimation and neither Dual Image of Absolute Conic (DIAC) or Dual Absolute Quadric
1684 * (DAQ) are estimated to find intrinsic parameters when adding new cameras.
1685 *
1686 * @param additionalCamerasVerticalPrincipalPoint vertical coordinate of principal
1687 * point for additional cameras when UPnP
1688 * method is used for additional cameras
1689 * estimation and neither DIAC nor DAQ
1690 * are estimated to find intrinsic
1691 * parameters when adding new cameras.
1692 * @return this instance so that method can be easily chained.
1693 */
1694 public T setAdditionalCamerasVerticalPrincipalPoint(final double additionalCamerasVerticalPrincipalPoint) {
1695 this.additionalCamerasVerticalPrincipalPoint = additionalCamerasVerticalPrincipalPoint;
1696 //noinspection unchecked
1697 return (T) this;
1698 }
1699
1700 /**
1701 * Gets aspect ratio for additional cameras estimation using DAQ or DIAC methods.
1702 *
1703 * @return aspect ratio for additional cameras using DAQ or DIAC methods.
1704 */
1705 public double getAdditionalCamerasAspectRatio() {
1706 return additionalCamerasAspectRatio;
1707 }
1708
1709 /**
1710 * Sets aspect ratio for additional cameras using DAQ or DIAC methods.
1711 *
1712 * @param additionalCamerasAspectRatio aspect ratio for additional cameras using DAQ or DIAC
1713 * methods.
1714 * @return this instance so that method can be easily chained.
1715 */
1716 public T setAdditionalCamerasAspectRatio(final double additionalCamerasAspectRatio) {
1717 this.additionalCamerasAspectRatio = additionalCamerasAspectRatio;
1718 //noinspection unchecked
1719 return (T) this;
1720 }
1721
1722 /**
1723 * Indicates whether EPnP (Efficient Perspective-n-Point) method is used for additional
1724 * estimation of cameras. Either EPnP or UPnP must be used for additional estimation
1725 * of cameras.
1726 *
1727 * @return true if EPnP method is used for additional cameras estimation, false
1728 * otherwise.
1729 */
1730 public boolean getUseEPnPForAdditionalCamerasEstimation() {
1731 return useEPnPForAdditionalCamerasEstimation;
1732 }
1733
1734 /**
1735 * Specifies whether EPnP (Efficient Perspective-n-Point) method is used for additional
1736 * estimation of cameras. Either EPnP or UPnP must be used for additional estimation of cameras.
1737 *
1738 * @param useEPnPForAdditionalCamerasEstimation true if EPnP method is used for additional
1739 * cameras estimation, false otherwise.
1740 * @return this instance so that method can be easily chained.
1741 */
1742 public T setUseEPnPForAdditionalCamerasEstimation(final boolean useEPnPForAdditionalCamerasEstimation) {
1743 this.useEPnPForAdditionalCamerasEstimation = useEPnPForAdditionalCamerasEstimation;
1744 //noinspection unchecked
1745 return (T) this;
1746 }
1747
1748 /**
1749 * Indicates whether UPnP (Uncalibrated Perspective-n-Point) method is used for
1750 * additional estimation of cameras. Either EPnP or UPnP must be used for additional
1751 * estimation of cameras.
1752 *
1753 * @return true if UPnP method is used for additional cameras estimation, false
1754 * otherwise.
1755 */
1756 public boolean getUseUPnPForAdditionalCamerasEstimation() {
1757 return useUPnPForAdditionalCamerasEstimation;
1758 }
1759
1760 /**
1761 * Specifies whether UPnP (Uncalibrated Perspective-n-Point) method is used for
1762 * additional estimation of cameras. Either EPnP or UPnP must be used for additional
1763 * estimation of cameras.
1764 *
1765 * @param useUPnPForAdditionalCamerasEstimation true if UPnP method is used for
1766 * additional cameras estimation, false
1767 * otherwise.
1768 * @return this instance so that method can be easily chained.
1769 */
1770 public T setUseUPnPForAdditionalCamerasEstimation(final boolean useUPnPForAdditionalCamerasEstimation) {
1771 this.useUPnPForAdditionalCamerasEstimation = useUPnPForAdditionalCamerasEstimation;
1772 //noinspection unchecked
1773 return (T) this;
1774 }
1775
1776 /**
1777 * Gets robust method to estimate additional cameras.
1778 *
1779 * @return robust method to estimate additional cameras.
1780 */
1781 public RobustEstimatorMethod getAdditionalCamerasRobustEstimationMethod() {
1782 return additionalCamerasRobustEstimationMethod;
1783 }
1784
1785 /**
1786 * Sets robust method to estimate additional cameras.
1787 *
1788 * @param method robust method to estimate additional cameras.
1789 * @return this instance so that method can be easily chained.
1790 */
1791 public T setAdditionalCamerasRobustEstimationMethod(final RobustEstimatorMethod method) {
1792 additionalCamerasRobustEstimationMethod = method;
1793 //noinspection unchecked
1794 return (T) this;
1795 }
1796
1797 /**
1798 * Indicates whether planar configuration is allowed for additional cameras
1799 * estimation using either EPnP or UPnP.
1800 *
1801 * @return true if planar configuration is allowed, false otherwise.
1802 */
1803 public boolean getAdditionalCamerasAllowPlanarConfiguration() {
1804 return additionalCamerasAllowPlanarConfiguration;
1805 }
1806
1807 /**
1808 * Specifies whether planar configuration is allowed for additional cameras
1809 * estimation using either EPnP or UPnP.
1810 *
1811 * @param allowPlanarConfiguration true if planar configuration is allowed, false
1812 * otherwise.
1813 * @return this instance so that method can be easily chained.
1814 */
1815 public T setAdditionalCamerasAllowPlanarConfiguration(final boolean allowPlanarConfiguration) {
1816 additionalCamerasAllowPlanarConfiguration = allowPlanarConfiguration;
1817 //noinspection unchecked
1818 return (T) this;
1819 }
1820
1821 /**
1822 * Indicates whether dimension 2 null-space is allowed while estimating additional
1823 * cameras using either EPnP or UPnP.
1824 *
1825 * @return true if dimension 2 null-space is allowed while estimating additional
1826 * cameras, false otherwise.
1827 */
1828 public boolean getAdditionalCamerasAllowNullspaceDimension2() {
1829 return additionalCamerasAllowNullspaceDimension2;
1830 }
1831
1832 /**
1833 * Specifies whether dimension 2 null-space is allowed while estimating additional
1834 * cameras using either EPnP or UPnP.
1835 *
1836 * @param allowNullspaceDimension2 true if dimension 2 null-space is allowed while
1837 * estimating additional cameras, false otherwise.
1838 * @return this instance so that method can be easily chained.
1839 */
1840 public T setAdditionalCamerasAllowNullspaceDimension2(final boolean allowNullspaceDimension2) {
1841 additionalCamerasAllowNullspaceDimension2 = allowNullspaceDimension2;
1842 //noinspection unchecked
1843 return (T) this;
1844 }
1845
1846 /**
1847 * Indicates whether dimension 3 null-space is allowed while estimating additional
1848 * cameras using EPnP.
1849 *
1850 * @return true if dimension 3 null-space is allowed while estimating additional
1851 * cameras, false otherwise.
1852 */
1853 public boolean getAdditionalCamerasAllowNullspaceDimension3() {
1854 return additionalCamerasAllowNullspaceDimension3;
1855 }
1856
1857 /**
1858 * Specifies whether dimension 3 null-space is allowed while estimating additional
1859 * cameras using either EPnP or UPnP.
1860 *
1861 * @param allowNullspaceDimension3 true if dimension 3 null-space is allowed while
1862 * estimating additional cameras, false otherwise.
1863 * @return this instance so that method can be easily chained.
1864 */
1865 public T setAdditionalCamerasAllowNullspaceDimension3(final boolean allowNullspaceDimension3) {
1866 additionalCamerasAllowNullspaceDimension3 = allowNullspaceDimension3;
1867 //noinspection unchecked
1868 return (T) this;
1869 }
1870
1871 /**
1872 * Gets threshold to determine whether 3D matched points to estimate additional
1873 * cameras are in a planar configuration.
1874 *
1875 * @return threshold to determine whether 3D matched points to estimate additional
1876 * cameras are in a planar configuration.
1877 */
1878 public double getAdditionalCamerasPlanarThreshold() {
1879 return additionalCamerasPlanarThreshold;
1880 }
1881
1882 /**
1883 * Specifies threshold to determine whether 3D matched points to estimate additional
1884 * cameras are in a planar configuration.
1885 *
1886 * @param additionalCamerasPlanarThreshold threshold to determine whether 3D matched
1887 * points to estimate additional cameras are
1888 * in a planar configuration.
1889 * @return this instance so that method can be easily chained.
1890 */
1891 public T setAdditionalCamerasPlanarThreshold(final double additionalCamerasPlanarThreshold) {
1892 this.additionalCamerasPlanarThreshold = additionalCamerasPlanarThreshold;
1893 //noinspection unchecked
1894 return (T) this;
1895 }
1896
1897 /**
1898 * Indicates whether additional cameras are refined to minimize overall projection
1899 * error among all found inliers.
1900 *
1901 * @return true if additional cameras are refined, false otherwise.
1902 */
1903 public boolean areAdditionalCamerasRefined() {
1904 return refineAdditionalCameras;
1905 }
1906
1907 /**
1908 * Specifies whether additional cameras are refined to minimize overall projection
1909 * error among all found inliers.
1910 *
1911 * @param refineAdditionalCameras true if additional cameras are refined, false
1912 * otherwise.
1913 * @return this instance so that method can be easily chained.
1914 */
1915 public T setAdditionalCamerasRefined(final boolean refineAdditionalCameras) {
1916 this.refineAdditionalCameras = refineAdditionalCameras;
1917 //noinspection unchecked
1918 return (T) this;
1919 }
1920
1921 /**
1922 * Indicates whether covariance is kept after refining result of additional
1923 * estimation of cameras.
1924 *
1925 * @return true if covariance is kept, false otherwise.
1926 */
1927 public boolean isAdditionalCamerasCovarianceKept() {
1928 return keepCovarianceAdditionalCameras;
1929 }
1930
1931 /**
1932 * Specifies whether covariance is kept after refining result of additional estimation
1933 * of cameras.
1934 *
1935 * @param keepCovarianceAdditionalCameras true if covariance is kept, false otherwise.
1936 * @return this instance so that method can be easily chained.
1937 */
1938 public T setAdditionalCamerasCovarianceKept(final boolean keepCovarianceAdditionalCameras) {
1939 this.keepCovarianceAdditionalCameras = keepCovarianceAdditionalCameras;
1940 //noinspection unchecked
1941 return (T) this;
1942 }
1943
1944 /**
1945 * Gets value indicating whether fast refinement is used for additional estimation
1946 * of cameras.
1947 *
1948 * @return true if fast refinement is used for additional cameras estimation,
1949 * false otherwise.
1950 */
1951 public boolean getAdditionalCamerasUseFastRefinement() {
1952 return additionalCamerasUseFastRefinement;
1953 }
1954
1955 /**
1956 * Sets value indicating whether fast refinement is used for additional estimation
1957 * of cameras.
1958 *
1959 * @param additionalCamerasUseFastRefinement true if fast refinement is used for
1960 * additional cameras estimation, false
1961 * otherwise.
1962 * @return this instance so that method can be easily chained.
1963 */
1964 public T setAdditionalCamerasUseFastRefinement(final boolean additionalCamerasUseFastRefinement) {
1965 this.additionalCamerasUseFastRefinement = additionalCamerasUseFastRefinement;
1966 //noinspection unchecked
1967 return (T) this;
1968 }
1969
1970 /**
1971 * Gets confidence of estimated additional cameras.
1972 *
1973 * @return confidence of estimated additional cameras.
1974 */
1975 public double getAdditionalCamerasConfidence() {
1976 return additionalCamerasConfidence;
1977 }
1978
1979 /**
1980 * Sets confidence of estimated additional cameras.
1981 *
1982 * @param additionalCamerasConfidence confidence of estimated additional cameras.
1983 * @return this instance so that method can be easily chained.
1984 */
1985 public T setAdditionalCamerasConfidence(final double additionalCamerasConfidence) {
1986 this.additionalCamerasConfidence = additionalCamerasConfidence;
1987 //noinspection unchecked
1988 return (T) this;
1989 }
1990
1991 /**
1992 * Gets maximum allowed number of iterations for additional cameras estimation.
1993 *
1994 * @return maximum allowed number of iterations for additional cameras estimation.
1995 */
1996 public int getAdditionalCamerasMaxIterations() {
1997 return additionalCamerasMaxIterations;
1998 }
1999
2000 /**
2001 * Sets maximum allowed number of iterations for additional cameras estimation.
2002 *
2003 * @param additionalCamerasMaxIterations maximum allowed number of iterations for
2004 * additional cameras estimation.
2005 * @return this instance so that method can be easily chained.
2006 */
2007 public T setAdditionalCamerasMaxIterations(final int additionalCamerasMaxIterations) {
2008 this.additionalCamerasMaxIterations = additionalCamerasMaxIterations;
2009 //noinspection unchecked
2010 return (T) this;
2011 }
2012
2013 /**
2014 * Gets threshold to determine whether samples for robust pinhole camera estimation are inliers or not.
2015 *
2016 * @return threshold to determine whether samples for robust pinhole camera estimation are inliers or
2017 * not.
2018 */
2019 public double getAdditionalCamerasThreshold() {
2020 return additionalCamerasThreshold;
2021 }
2022
2023 /**
2024 * Sets threshold to determine whether samples for robust pinhole camera estimation are inliers or not.
2025 *
2026 * @param additionalCamerasThreshold threshold to determine whether samples for robust pinhole camera
2027 * estimation are inliers or not.
2028 * @return this instance so that method can be easily chained.
2029 */
2030 public T setAdditionalCamerasThreshold(final double additionalCamerasThreshold) {
2031 this.additionalCamerasThreshold = additionalCamerasThreshold;
2032 //noinspection unchecked
2033 return (T) this;
2034 }
2035
2036 /**
2037 * Indicates whether inliers must be kept during additional camera estimation.
2038 *
2039 * @return true if inliers must be kept during additional camera estimation, false
2040 * otherwise.
2041 */
2042 public boolean getAdditionalCamerasComputeAndKeepInliers() {
2043 return additionalCamerasComputeAndKeepInliers;
2044 }
2045
2046 /**
2047 * Specifies whether inliers must be kept during additional camera estimation.
2048 *
2049 * @param additionalCamerasComputeAndKeepInliers true if inliers must be kept during additional camera
2050 * estimation, false otherwise.
2051 * @return this instance so that method can be easily chained.
2052 */
2053 public T setAdditionalCamerasComputeAndKeepInliers(final boolean additionalCamerasComputeAndKeepInliers) {
2054 this.additionalCamerasComputeAndKeepInliers = additionalCamerasComputeAndKeepInliers;
2055 //noinspection unchecked
2056 return (T) this;
2057 }
2058
2059 /**
2060 * Indicates whether residuals must be computed and kept during additional camera estimation.
2061 *
2062 * @return true if residuals must be computed and kept, false otherwise.
2063 */
2064 public boolean getAdditionalCamerasComputeAndKeepResiduals() {
2065 return additionalCamerasComputeAndKeepResiduals;
2066 }
2067
2068 /**
2069 * Specifies whether residuals must be computed and kept during additional camera estimation.
2070 *
2071 * @param additionalCamerasComputeAndKeepResiduals true if residuals must be computed and kept, false
2072 * otherwise.
2073 * @return this instance so that method can be easily chained.
2074 */
2075 public T setAdditionalCamerasComputeAndKeepResiduals(final boolean additionalCamerasComputeAndKeepResiduals) {
2076 this.additionalCamerasComputeAndKeepResiduals = additionalCamerasComputeAndKeepResiduals;
2077 //noinspection unchecked
2078 return (T) this;
2079 }
2080
2081 /**
2082 * Gets value indicating whether skewness is not suggested during additional
2083 * estimation of cameras.
2084 *
2085 * @return true if skewness is suggested, false otherwise.
2086 */
2087 public boolean isAdditionalCamerasSuggestSkewnessValueEnabled() {
2088 return additionalCamerasSuggestSkewnessValueEnabled;
2089 }
2090
2091 /**
2092 * Sets value indicating whether skewness is not suggested during additional
2093 * estimation of cameras.
2094 *
2095 * @param additionalCamerasSuggestSkewnessValueEnabled true if skewness is suggested,
2096 * false otherwise.
2097 * @return this instance so that method can be easily chained.
2098 */
2099 public T setAdditionalCamerasSuggestSkewnessValueEnabled(
2100 final boolean additionalCamerasSuggestSkewnessValueEnabled) {
2101 this.additionalCamerasSuggestSkewnessValueEnabled = additionalCamerasSuggestSkewnessValueEnabled;
2102 //noinspection unchecked
2103 return (T) this;
2104 }
2105
2106 /**
2107 * Gets value of skewness to be suggested when suggestion is enabled during
2108 * additional estimation of cameras.
2109 *
2110 * @return value of skewness to be suggested when suggestion is enabled during
2111 * additional estimation of cameras.
2112 */
2113 public double getAdditionalCamerasSuggestedSkewnessValue() {
2114 return additionalCamerasSuggestedSkewnessValue;
2115 }
2116
2117 /**
2118 * Sets value of skewness to be suggested when suggestion is enabled during additional
2119 * estimation of cameras.
2120 *
2121 * @param additionalCamerasSuggestedSkewnessValue value of skewness to be suggested
2122 * when suggestion is enabled during
2123 * additional estimation of cameras.
2124 * @return this instance so that method can be easily chained.
2125 */
2126 public T setAdditionalCamerasSuggestedSkewnessValue(final double additionalCamerasSuggestedSkewnessValue) {
2127 this.additionalCamerasSuggestedSkewnessValue = additionalCamerasSuggestedSkewnessValue;
2128 //noinspection unchecked
2129 return (T) this;
2130 }
2131
2132 /**
2133 * Indicates whether horizontal focal length value is suggested or not during
2134 * additional estimation of cameras.
2135 *
2136 * @return true if horizontal focal length value is suggested, false otherwise.
2137 */
2138 public boolean isAdditionalCamerasSuggestHorizontalFocalLengthEnabled() {
2139 return additionalCamerasSuggestHorizontalFocalLengthEnabled;
2140 }
2141
2142 /**
2143 * Specifies whether horizontal focal length value is suggested or not during additional
2144 * estimation of cameras.
2145 *
2146 * @param additionalCamerasSuggestHorizontalFocalLengthEnabled true if horizontal focal
2147 * length value is suggested, false
2148 * otherwise.
2149 * @return this instance so that method can be easily chained.
2150 */
2151 public T setAdditionalCamerasSuggestHorizontalFocalLengthEnabled(
2152 final boolean additionalCamerasSuggestHorizontalFocalLengthEnabled) {
2153 this.additionalCamerasSuggestHorizontalFocalLengthEnabled =
2154 additionalCamerasSuggestHorizontalFocalLengthEnabled;
2155 //noinspection unchecked
2156 return (T) this;
2157 }
2158
2159 /**
2160 * Gets value of suggested horizontal focal length during additional estimation
2161 * of cameras.
2162 *
2163 * @return value of suggested horizontal focal length during additional estimation
2164 * of cameras.
2165 */
2166 public double getAdditionalCamerasSuggestedHorizontalFocalLengthValue() {
2167 return additionalCamerasSuggestedHorizontalFocalLengthValue;
2168 }
2169
2170 /**
2171 * Sets value of suggested horizontal focal length during additional estimation
2172 * of cameras.
2173 *
2174 * @param additionalCamerasSuggestedHorizontalFocalLengthValue value of suggested
2175 * horizontal focal length during
2176 * additional estimation of cameras.
2177 * @return this instance so that method can be easily chained.
2178 */
2179 public T setAdditionalCamerasSuggestedHorizontalFocalLengthValue(
2180 final double additionalCamerasSuggestedHorizontalFocalLengthValue) {
2181 this.additionalCamerasSuggestedHorizontalFocalLengthValue =
2182 additionalCamerasSuggestedHorizontalFocalLengthValue;
2183 //noinspection unchecked
2184 return (T) this;
2185 }
2186
2187 /**
2188 * Gets value indicating whether vertical focal length value is suggested or not
2189 * during additional estimation of cameras.
2190 *
2191 * @return true if vertical focal length value is suggested, false otherwise.
2192 */
2193 public boolean isAdditionalCamerasSuggestVerticalFocalLengthEnabled() {
2194 return additionalCamerasSuggestVerticalFocalLengthEnabled;
2195 }
2196
2197 /**
2198 * Sets value indicating whether vertical focal length value is suggested or not
2199 * during additional estimation of cameras.
2200 *
2201 * @param additionalCamerasSuggestVerticalFocalLengthEnabled true if vertical focal
2202 * length is suggested, false
2203 * otherwise.
2204 * @return this instance so that method can be easily chained.
2205 */
2206 public T setAdditionalCamerasSuggestVerticalFocalLengthEnabled(
2207 final boolean additionalCamerasSuggestVerticalFocalLengthEnabled) {
2208 this.additionalCamerasSuggestVerticalFocalLengthEnabled = additionalCamerasSuggestVerticalFocalLengthEnabled;
2209 //noinspection unchecked
2210 return (T) this;
2211 }
2212
2213 /**
2214 * Gets value of suggested vertical focal length during additional estimation of cameras.
2215 *
2216 * @return value of suggested vertical focal length during additional estimation of cameras.
2217 */
2218 public double getAdditionalCamerasSuggestedVerticalFocalLengthValue() {
2219 return additionalCamerasSuggestedVerticalFocalLengthValue;
2220 }
2221
2222 /**
2223 * Sets value of suggested vertical focal length during additional estimation of cameras.
2224 *
2225 * @param additionalCamerasSuggestedVerticalFocalLengthValue value of suggested vertical
2226 * focal length during additional
2227 * estimation of cameras.
2228 * @return this instance so that method can be easily chained.
2229 */
2230 public T setAdditionalCamerasSuggestedVerticalFocalLengthValue(
2231 final double additionalCamerasSuggestedVerticalFocalLengthValue) {
2232 this.additionalCamerasSuggestedVerticalFocalLengthValue = additionalCamerasSuggestedVerticalFocalLengthValue;
2233 //noinspection unchecked
2234 return (T) this;
2235 }
2236
2237 /**
2238 * Gets value indicating whether aspect ratio is suggested or not during additional
2239 * estimation of cameras.
2240 *
2241 * @return true if aspect ratio is suggested, false otherwise.
2242 */
2243 public boolean isAdditionalCamerasSuggestAspectRatioEnabled() {
2244 return additionalCamerasSuggestAspectRatioEnabled;
2245 }
2246
2247 /**
2248 * Sets value indicating whether aspect ratio is suggested or not during additional
2249 * estimation of cameras.
2250 *
2251 * @param additionalCamerasSuggestAspectRatioEnabled true if aspect ratio is suggested,
2252 * false otherwise.
2253 * @return this instance so that method can be easily chained.
2254 */
2255 public T setAdditionalCamerasSuggestAspectRatioEnabled(final boolean additionalCamerasSuggestAspectRatioEnabled) {
2256 this.additionalCamerasSuggestAspectRatioEnabled = additionalCamerasSuggestAspectRatioEnabled;
2257 //noinspection unchecked
2258 return (T) this;
2259 }
2260
2261 /**
2262 * Gets value of aspect ratio to be suggested when suggestion is enabled during
2263 * additional estimation of cameras.
2264 *
2265 * @return value of aspect ratio to be suggested.
2266 */
2267 public double getAdditionalCamerasSuggestedAspectRatioValue() {
2268 return additionalCamerasSuggestedAspectRatioValue;
2269 }
2270
2271 /**
2272 * Sets value of aspect ratio to be suggested when suggestion is enabled during
2273 * additional estimation of cameras.
2274 *
2275 * @param additionalCamerasSuggestedAspectRatioValue value of aspect ratio to be
2276 * suggested.
2277 * @return this instance so that method can be easily chained.
2278 */
2279 public T setAdditionalCamerasSuggestedAspectRatioValue(final double additionalCamerasSuggestedAspectRatioValue) {
2280 this.additionalCamerasSuggestedAspectRatioValue = additionalCamerasSuggestedAspectRatioValue;
2281 //noinspection unchecked
2282 return (T) this;
2283 }
2284
2285 /**
2286 * Gets value indicating whether principal point is suggested or not during
2287 * additional estimation of cameras.
2288 *
2289 * @return true if principal point is suggested, false otherwise.
2290 */
2291 public boolean isAdditionalCamerasSuggestPrincipalPointEnabled() {
2292 return additionalCamerasSuggestPrincipalPointEnabled;
2293 }
2294
2295 /**
2296 * Sets value indicating whether principal point is suggested or not during additional
2297 * estimation of cameras.
2298 *
2299 * @param additionalCamerasSuggestPrincipalPointEnabled true if principal point is
2300 * suggested, false otherwise.
2301 * @return this instance so that method can be easily chained.
2302 */
2303 public T setAdditionalCamerasSuggestPrincipalPointEnabled(
2304 final boolean additionalCamerasSuggestPrincipalPointEnabled) {
2305 this.additionalCamerasSuggestPrincipalPointEnabled = additionalCamerasSuggestPrincipalPointEnabled;
2306 //noinspection unchecked
2307 return (T) this;
2308 }
2309
2310 /**
2311 * Gets value of principal point to be suggested when suggestion is enabled during
2312 * additional estimation of cameras.
2313 *
2314 * @return principal point to be suggested.
2315 */
2316 public InhomogeneousPoint2D getAdditionalCamerasSuggestedPrincipalPointValue() {
2317 return additionalCamerasSuggestedPrincipalPointValue;
2318 }
2319
2320 /**
2321 * Sets value of principal point to be suggested when suggestion is enabled during
2322 * additional estimation of cameras.
2323 *
2324 * @param additionalCamerasSuggestedPrincipalPointValue principal point to be
2325 * suggested.
2326 * @return this instance so that method can be easily chained.
2327 */
2328 public T setAdditionalCamerasSuggestedPrincipalPointValue(
2329 final InhomogeneousPoint2D additionalCamerasSuggestedPrincipalPointValue) {
2330 this.additionalCamerasSuggestedPrincipalPointValue = additionalCamerasSuggestedPrincipalPointValue;
2331 //noinspection unchecked
2332 return (T) this;
2333 }
2334
2335 /**
2336 * Indicates whether homogeneous point triangulator must be used or not to estimate
2337 * 3D points when only two matches are available.
2338 *
2339 * @return true if homogeneous point triangulator must be used, false otherwise.
2340 */
2341 public boolean isHomogeneousPointTriangulatorUsed() {
2342 return useHomogeneousPointTriangulator;
2343 }
2344
2345 /**
2346 * Specifies whether homogeneous point triangulator must be used or not to estimate
2347 * 3D points when only two matches are available.
2348 *
2349 * @param useHomogeneousPointTriangulator true if homogeneous point triangulator must
2350 * be used, false otherwise.
2351 * @return this instance so that method can be easily chained.
2352 */
2353 public T setHomogeneousPointTriangulatorUsed(final boolean useHomogeneousPointTriangulator) {
2354 this.useHomogeneousPointTriangulator = useHomogeneousPointTriangulator;
2355 //noinspection unchecked
2356 return (T) this;
2357 }
2358
2359 /**
2360 * Gets robust method for point triangulation when points are matched in more
2361 * than two views.
2362 *
2363 * @return robust method for point triangulation.
2364 */
2365 public RobustEstimatorMethod getRobustPointTriangulatorMethod() {
2366 return robustPointTriangulatorMethod;
2367 }
2368
2369 /**
2370 * Sets robust method for point triangulation when points are matched in more
2371 * than two views.
2372 *
2373 * @param robustPointTriangulatorMethod robust method for point triangulation.
2374 * @return this instance so that method can be easily chained.
2375 */
2376 public T setRobustPointTriangulatorMethod(final RobustEstimatorMethod robustPointTriangulatorMethod) {
2377 this.robustPointTriangulatorMethod = robustPointTriangulatorMethod;
2378 //noinspection unchecked
2379 return (T) this;
2380 }
2381
2382 /**
2383 * Gets confidence of robustly triangulated points. By default, this is 99%.
2384 *
2385 * @return confidence of robustly triangulated points.
2386 */
2387 public double getPointTriangulatorConfidence() {
2388 return pointTriangulatorConfidence;
2389 }
2390
2391 /**
2392 * Sets confidence of robustly triangulated points. By default, this is 99%.
2393 *
2394 * @param pointTriangulatorConfidence confidence of robustly triangulated points.
2395 * @return this instance so that method can be easily chained.
2396 */
2397 public T setPointTriangulatorConfidence(final double pointTriangulatorConfidence) {
2398 this.pointTriangulatorConfidence = pointTriangulatorConfidence;
2399 //noinspection unchecked
2400 return (T) this;
2401 }
2402
2403 /**
2404 * Gets maximum number of iterations to make while robustly estimating triangulated
2405 * points. By default, this is 5000 iterations.
2406 *
2407 * @return maximum number of iterations to make while robustly estimating
2408 * triangulated points.
2409 */
2410 public int getPointTriangulatorMaxIterations() {
2411 return pointTriangulatorMaxIterations;
2412 }
2413
2414 /**
2415 * Sets maximum number of iterations to make while robustly estimating triangulated
2416 * points. By default, this is 5000 iterations.
2417 *
2418 * @param pointTriangulatorMaxIterations maximum number of iterations to make while
2419 * robustly estimating triangulated points.
2420 * @return this instance so that method can be easily chained.
2421 */
2422 public T setPointTriangulatorMaxIterations(final int pointTriangulatorMaxIterations) {
2423 this.pointTriangulatorMaxIterations = pointTriangulatorMaxIterations;
2424 //noinspection unchecked
2425 return (T) this;
2426 }
2427
2428 /**
2429 * Gets threshold to determine whether samples for robust point triangulator are
2430 * inliers or not.
2431 *
2432 * @return threshold to determine whether samples for robust point triangulator
2433 * are inliers or not.
2434 */
2435 public double getPointTriangulatorThreshold() {
2436 return pointTriangulatorThreshold;
2437 }
2438
2439 /**
2440 * Sets threshold to determine whether samples for robust point triangulator are
2441 * inliers or not.
2442 *
2443 * @param pointTriangulatorThreshold threshold to determine whether samples for
2444 * robust point triangulator are inliers or not.
2445 * @return this instance so that method can be easily chained.
2446 */
2447 public T setPointTriangulatorThreshold(final double pointTriangulatorThreshold) {
2448 this.pointTriangulatorThreshold = pointTriangulatorThreshold;
2449 //noinspection unchecked
2450 return (T) this;
2451 }
2452 }