MCPcopy Create free account
hub / github.com/colmap/colmap / IsValid

Method IsValid

src/colmap/scene/reconstruction.cc:121–293  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

119}
120
121bool Reconstruction::IsValid() const {
122 // Check object associations: rig-frame-image-camera references and pointers.
123 // Check rigs.
124 for (const auto& [rig_id, rig] : rigs_) {
125 for (const sensor_t& sensor_id : rig.SensorIds()) {
126 switch (sensor_id.type) {
127 case SensorType::CAMERA:
128 if (!ExistsCamera(sensor_id.id)) {
129 LOG(WARNING) << "Rig " << rig_id << " has sensor (camera) "
130 << sensor_id.id << " which does not exist";
131 return false;
132 }
133 break;
134 case SensorType::IMU:
135 case SensorType::INVALID:
136 // Only camera sensors are currently supported.
137 break;
138 }
139 }
140 }
141 // Check frames.
142 for (const auto& [frame_id, frame] : frames_) {
143 if (!frame.HasRigId()) {
144 LOG(WARNING) << "Frame " << frame_id << " has no rig_id";
145 return false;
146 }
147 if (!ExistsRig(frame.RigId())) {
148 LOG(WARNING) << "Frame " << frame_id << " references non-existent rig "
149 << frame.RigId();
150 return false;
151 }
152 if (!frame.HasRigPtr()) {
153 LOG(WARNING) << "Frame " << frame_id << " has no rig pointer";
154 return false;
155 }
156 if (frame.RigPtr() != &rigs_.at(frame.RigId())) {
157 LOG(WARNING) << "Frame " << frame_id
158 << " rig pointer does not match rig_id";
159 return false;
160 }
161 for (const auto& data_id : frame.DataIds()) {
162 if (!frame.RigPtr()->HasSensor(data_id.sensor_id)) {
163 LOG(WARNING) << "Frame " << frame_id << " has data with sensor_id "
164 << data_id.sensor_id.id << " that does not exist in rig "
165 << frame.RigId();
166 return false;
167 }
168 switch (data_id.sensor_id.type) {
169 case SensorType::CAMERA:
170 if (!ExistsImage(data_id.id)) {
171 LOG(WARNING) << "Frame " << frame_id << " references image "
172 << data_id.id << " which does not exist";
173 return false;
174 }
175 break;
176 case SensorType::IMU:
177 case SensorType::INVALID:
178 // Only camera data is currently supported.

Callers

nothing calls this directly

Calls 15

SensorIdsMethod · 0.80
HasRigIdMethod · 0.80
HasRigPtrMethod · 0.80
RigPtrMethod · 0.80
DataIdsMethod · 0.80
HasSensorMethod · 0.80
HasCameraIdMethod · 0.80
CameraIdMethod · 0.80
HasCameraPtrMethod · 0.80
CameraPtrMethod · 0.80
HasFrameIdMethod · 0.80
HasFramePtrMethod · 0.80

Tested by

no test coverage detected