Error checking
parent
39d74d1d2a
commit
c0bac3cac5
|
@ -63,13 +63,24 @@ def simulate_data(points, poses, cal, rng, noise_std):
|
||||||
|
|
||||||
# Function to compute ground truth matrices
|
# Function to compute ground truth matrices
|
||||||
def compute_ground_truth(method, poses, cal):
|
def compute_ground_truth(method, poses, cal):
|
||||||
|
F1 = FundamentalMatrix(cal.K(), poses[0].between(poses[1]), cal.K())
|
||||||
|
F2 = FundamentalMatrix(cal.K(), poses[0].between(poses[2]), cal.K())
|
||||||
if method == "FundamentalMatrix":
|
if method == "FundamentalMatrix":
|
||||||
F1 = FundamentalMatrix(cal.K(), poses[0].between(poses[1]), cal.K())
|
|
||||||
F2 = FundamentalMatrix(cal.K(), poses[0].between(poses[2]), cal.K())
|
|
||||||
return F1, F2
|
return F1, F2
|
||||||
elif method == "EssentialMatrix":
|
elif method == "EssentialMatrix":
|
||||||
E1 = EssentialMatrix.FromPose3(poses[0].between(poses[1]))
|
E1 = EssentialMatrix.FromPose3(poses[0].between(poses[1]))
|
||||||
E2 = EssentialMatrix.FromPose3(poses[0].between(poses[2]))
|
E2 = EssentialMatrix.FromPose3(poses[0].between(poses[2]))
|
||||||
|
|
||||||
|
# Assert that E1.matrix and F1 are the same
|
||||||
|
invK = np.linalg.inv(cal.K())
|
||||||
|
G1 = invK.transpose() @ E1.matrix() @ invK
|
||||||
|
G2 = invK.transpose() @ E2.matrix() @ invK
|
||||||
|
assert np.allclose(
|
||||||
|
G1 / np.linalg.norm(G1), F1.matrix() / np.linalg.norm(F1.matrix())
|
||||||
|
), "E1 and F1 are not the same"
|
||||||
|
assert np.allclose(
|
||||||
|
G2 / np.linalg.norm(G2), F2.matrix() / np.linalg.norm(F2.matrix())
|
||||||
|
), "E2 and F2 are not the same"
|
||||||
return E1, E2
|
return E1, E2
|
||||||
else:
|
else:
|
||||||
raise ValueError(f"Unknown method {method}")
|
raise ValueError(f"Unknown method {method}")
|
||||||
|
@ -261,6 +272,16 @@ def main():
|
||||||
# Build the factor graph
|
# Build the factor graph
|
||||||
graph = build_factor_graph(method, args.num_cameras, measurements)
|
graph = build_factor_graph(method, args.num_cameras, measurements)
|
||||||
|
|
||||||
|
# Assert that the initial error is the same for both methods:
|
||||||
|
if trial == 0 and method == methods[0]:
|
||||||
|
initial_error = graph.error(initial_estimate[method])
|
||||||
|
else:
|
||||||
|
current_error = graph.error(initial_estimate[method])
|
||||||
|
if not np.allclose(initial_error, current_error):
|
||||||
|
print(f"Initial error for {method} ({current_error}) does not match ")
|
||||||
|
print(f"initial error for {methods[0]} ({initial_error})")
|
||||||
|
exit(1)
|
||||||
|
|
||||||
# Optimize the graph
|
# Optimize the graph
|
||||||
result = optimize(graph, initial_estimate[method])
|
result = optimize(graph, initial_estimate[method])
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue