8
« on: May 11, 2019, 05:19:57 PM »
I've just done some code
# Compute the re-projection error
chunk = doc.chunk
point_cloud = chunk.point_cloud
points = point_cloud.points
error, tie_points = [], []
cam_list, cam_rmse, cam_std, cam_min, cam_max, cam_std = [], [], [], [], [], []
for camera in [cam for cam in doc.chunk.cameras if cam.transform]:
point_index = 0
photo_num = 0
cam_error=[]
for proj in doc.chunk.point_cloud.projections[camera]:
track_id = proj.track_id
while point_index < len(points) and points[point_index].track_id < track_id:
point_index += 1
if point_index < len(points) and points[point_index].track_id == track_id:
if not points[point_index].valid:
continue
dist = camera.error(points[point_index].coord, proj.coord).norm() ** 2
error.append(dist)
cam_error.append(dist)
photo_num += 1
tie_points.append(photo_num)
cam_list.append(camera.label)
cam_rmse.append(round(math.sqrt(sum(error) / len(error)), 3))
cam_std.append(round(statistics.stdev(error), 3))
cam_max.append(round(max(error) , 3))
cam_min.append(round(min(error) , 3))