View Javadoc
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  
17  package com.irurueta.ar.sfm;
18  
19  import com.irurueta.algebra.Matrix;
20  import com.irurueta.geometry.Point3D;
21  
22  import java.io.Serializable;
23  
24  /**
25   * Contains data of a reconstructed 3D point.
26   */
27  public class ReconstructedPoint3D implements Serializable {
28  
29      /**
30       * Default quality score value.
31       */
32      public static final double DEFAULT_QUALITY_SCORE = 1.0;
33  
34      /**
35       * ID to identify this instance. This is useful in case that this data is
36       * stored in some sort of database and must be set externally.
37       */
38      private String id;
39  
40      /**
41       * Coordinates of reconstructed 3D point.
42       */
43      private Point3D point;
44  
45      /**
46       * Indicates whether reconstructed point is an inlier or not.
47       */
48      private boolean inlier;
49  
50      /**
51       * Quality score of sampled point. The larger the value, the better the
52       * quality. This is used for robust estimators such as PROSAC or PROMedS.
53       * This value is typically obtained from algorithms determining point
54       * correspondences.
55       */
56      private double qualityScore = DEFAULT_QUALITY_SCORE;
57  
58      /**
59       * Covariance of reconstructed point. This can be computed during point
60       * triangularization.
61       */
62      private Matrix covariance;
63  
64      /**
65       * Color data of reconstructed point (i.e. RGB or YUV values), if available.
66       */
67      private PointColorData colorData;
68  
69      /**
70       * Gets id to identify this instance. This is useful in case that this data
71       * is stored in some sort of database and must be set externally.
72       *
73       * @return id to identify this instance.
74       */
75      public String getId() {
76          return id;
77      }
78  
79      /**
80       * Sets id to identify this instance. This is useful in case that this data
81       * is stored in some sort of database and must be set externally.
82       *
83       * @param id id to identify this instance.
84       */
85      public void setId(final String id) {
86          this.id = id;
87      }
88  
89      /**
90       * Gets coordinates of reconstructed 3D point.
91       *
92       * @return coordinates of reconstructed 3D point.
93       */
94      public Point3D getPoint() {
95          return point;
96      }
97  
98      /**
99       * Sets coordinates of reconstructed 3D point.
100      *
101      * @param point coordinates of reconstructed 3D point.
102      */
103     public void setPoint(final Point3D point) {
104         this.point = point;
105     }
106 
107     /**
108      * Indicates whether reconstructed point is an inlier or not.
109      *
110      * @return true if reconstructed point is an inlier, false otherwise.
111      */
112     public boolean isInlier() {
113         return inlier;
114     }
115 
116     /**
117      * Specifies whether reconstructed point is an inlier or not.
118      *
119      * @param inlier true if reconstructed point is an inlier, false otherwise.
120      */
121     public void setInlier(final boolean inlier) {
122         this.inlier = inlier;
123     }
124 
125     /**
126      * Gets quality score of sampled point. The larger the value, the better the
127      * quality. This is used for robust estimators such as PROSAC or PROMedS.
128      * This value is typically obtained from algorithms determining point
129      * correspondences.
130      *
131      * @return quality score of sampled point.
132      */
133     public double getQualityScore() {
134         return qualityScore;
135     }
136 
137     /**
138      * Sets quality score of sampled point. The larger the value, the better the
139      * quality. This is used for robust estimators such as PROSAC or PROMedS.
140      * This value is typically obtained from algorithms determining point
141      * correspondences.
142      *
143      * @param qualityScore quality score of sampled point.
144      */
145     public void setQualityScore(final double qualityScore) {
146         this.qualityScore = qualityScore;
147     }
148 
149     /**
150      * Gets covariance of reconstructed point. This is obtained from the
151      * algorithms determining points of interest or point correspondences.
152      * This might be null if covariance cannot be determined.
153      *
154      * @return covariance of reconstructed point.
155      */
156     public Matrix getCovariance() {
157         return covariance;
158     }
159 
160     /**
161      * Sets covariance of reconstructed point. This is obtained from the
162      * algorithms determining points of interest or point correspondences.
163      *
164      * @param covariance covariance of reconstructed point.
165      */
166     public void setCovariance(final Matrix covariance) {
167         this.covariance = covariance;
168     }
169 
170     /**
171      * Gets color data of reconstructed point (i.e. RGB or YUV values), if
172      * available.
173      *
174      * @return color data of reconstructed point or null.
175      */
176     public PointColorData getColorData() {
177         return colorData;
178     }
179 
180     /**
181      * Sets color data of reconstructed point (i.e. RGB or YUV values), if
182      * available.
183      *
184      * @param colorData color data of reconstructed point or null.
185      */
186     public void setColorData(final PointColorData colorData) {
187         this.colorData = colorData;
188     }
189 }