mirror of
https://github.com/azaion/gps-denied-desktop.git
synced 2026-04-22 21:46:36 +00:00
abc26d5c20
docs -> _docs
8.0 KiB
8.0 KiB
Acceptance Test: AC-10 - Mean Reprojection Error < 1.0 pixels
Summary
Validate Acceptance Criterion 10: "Mean Reprojection Error (MRE) < 1.0 pixels. The distance, in pixels, between the original pixel location of the object and the re-projected pixel location."
Linked Acceptance Criteria
AC-10: MRE < 1.0 pixels
Preconditions
- ASTRAL-Next system operational
- F07 Sequential Visual Odometry extracting and matching features
- F10 Factor Graph Optimizer computing optimized poses
- Camera intrinsics calibrated (from F17 Configuration Manager)
- Test dataset with ground truth poses (for reference)
- Reprojection error calculation implemented
Reprojection Error Definition
Formula:
For each matched feature point p_i in image I_j:
1. Triangulate 3D point X_i from matches across images
2. Project X_i back to image I_j using optimized pose T_j and camera K
3. p'_i = K * T_j * X_i (projected pixel location)
4. e_i = ||p_i - p'_i|| (Euclidean distance in pixels)
MRE = (1/N) * Σ e_i (mean across all features in all images)
Test Data
- Dataset: AD000001-AD000030 (30 images, baseline)
- Expected Features: ~500-2000 matched features per image pair
- Total Measurements: ~15,000-60,000 reprojection measurements
Test Steps
Step 1: Process Flight Through Complete Pipeline
- Action: Process AD000001-AD000030 through full ASTRAL-Next pipeline
- Expected Result:
- Factor graph initialized and optimized
- 30 poses computed
- All feature correspondences stored
Step 2: Extract Feature Correspondences
- Action: Retrieve all matched features from F07
- Expected Result:
- For each image pair (i, j):
- List of matched keypoint pairs: [(p_i, p_j), ...]
- Match confidence scores
- Total: ~500-1500 matches per pair
- Total matches across flight: ~15,000-45,000
- For each image pair (i, j):
Step 3: Triangulate 3D Points
- Action: For each matched feature across multiple views, triangulate 3D position
- Expected Result:
- 3D point cloud generated
- Each point has:
- 3D coordinates (X, Y, Z) in ENU frame
- List of observations (image_id, pixel_location)
- Triangulation uncertainty
Step 4: Calculate Per-Feature Reprojection Error
- Action: For each 3D point and each observation:
For point X with observation (image_j, pixel_p): 1. Get optimized pose T_j from factor graph 2. Get camera intrinsics K from config 3. Project: p' = project(K, T_j, X) 4. Error: e = sqrt((p.x - p'.x)² + (p.y - p'.y)²) - Expected Result:
- Array of per-feature reprojection errors
- Typical range: 0.1 - 3.0 pixels
Step 5: Compute Statistical Metrics
- Action: Calculate MRE and distribution statistics
- Expected Result:
Total features evaluated: 25,000 Mean Reprojection Error (MRE): 0.72 pixels Median Reprojection Error: 0.58 pixels Standard Deviation: 0.45 pixels 90th Percentile: 1.25 pixels 95th Percentile: 1.68 pixels 99th Percentile: 2.41 pixels Max Error: 4.82 pixels
Step 6: Validate MRE Threshold
- Action: Compare MRE against AC-10 requirement
- Expected Result:
- MRE = 0.72 pixels < 1.0 pixels ✓
- AC-10 PASS
Step 7: Identify Outlier Reprojections
- Action: Find features with reprojection error > 3.0 pixels
- Expected Result:
Outliers (> 3.0 pixels): 127 (0.5% of total) Outlier distribution: - 3.0-5.0 pixels: 98 features - 5.0-10.0 pixels: 27 features - > 10.0 pixels: 2 features
Step 8: Analyze Outlier Causes
- Action: Investigate high-error features
- Expected Result:
- Most outliers at image boundaries (lens distortion)
- Some at occlusion boundaries
- Moving objects (if any)
- Repetitive textures causing mismatches
Step 9: Per-Image MRE Analysis
- Action: Calculate MRE per image
- Expected Result:
Per-Image MRE: AD000001: 0.68 px (baseline) AD000002: 0.71 px ... AD000032: 1.12 px (sharp turn - higher error) AD000033: 0.95 px ... AD000030: 0.74 px Images with MRE > 1.0: 2 out of 30 (6.7%) Overall MRE: 0.72 px
Step 10: Temporal MRE Trend
- Action: Plot MRE over sequence to detect drift
- Expected Result:
- MRE relatively stable across sequence
- No significant upward trend (would indicate drift)
- Spikes at known challenging locations (sharp turns)
Step 11: Validate Robust Kernel Effect
- Action: Compare MRE with/without robust cost functions
- Expected Result:
Without robust kernels: MRE = 0.89 px, outliers affect mean With Cauchy kernel: MRE = 0.72 px, outliers downweighted Improvement: 19% reduction in MRE
Step 12: Cross-Validate with GPS Accuracy
- Action: Correlate MRE with GPS error
- Expected Result:
- Low MRE correlates with low GPS error
- Images with MRE > 1.5 px tend to have GPS error > 30m
- MRE is leading indicator of trajectory quality
Step 13: Test Under Challenging Conditions
- Action: Compute MRE for challenging dataset (AD000001-060)
- Expected Result:
Full Flight MRE: Total features: 55,000 MRE: 0.84 pixels (still < 1.0) Challenging segments: - Sharp turns: MRE = 1.15 px (above threshold locally) - Normal segments: MRE = 0.68 px Overall: AC-10 PASS
Step 14: Generate Reprojection Error Report
- Action: Create comprehensive MRE report
- Expected Result:
======================================== REPROJECTION ERROR REPORT Flight: AC10_Test Dataset: AD000001-AD000030 ======================================== SUMMARY: Mean Reprojection Error: 0.72 pixels AC-10 Threshold: 1.0 pixels Status: PASS ✓ DISTRIBUTION: < 0.5 px: 12,450 (49.8%) 0.5-1.0 px: 9,875 (39.5%) 1.0-2.0 px: 2,350 (9.4%) 2.0-3.0 px: 198 (0.8%) > 3.0 px: 127 (0.5%) PER-IMAGE BREAKDOWN: Images meeting < 1.0 px MRE: 28/30 (93.3%) Images with highest MRE: AD000032 (1.12 px), AD000048 (1.08 px) CORRELATION WITH GPS ACCURACY: Pearson correlation (MRE vs GPS error): 0.73 Low MRE predicts high GPS accuracy RECOMMENDATIONS: - System meets AC-10 requirement - Consider additional outlier filtering for images > 1.0 px MRE - Sharp turn handling could be improved ========================================
Success Criteria
Primary Criterion (AC-10):
- Mean Reprojection Error < 1.0 pixels across entire flight
Supporting Criteria:
- Standard deviation < 2.0 pixels
- No outlier reprojections > 10 pixels (indicates gross errors)
- Per-image MRE < 2.0 pixels (no catastrophic single-image failures)
- MRE stable across sequence (no drift)
Pass/Fail Criteria
TEST PASSES IF:
- Overall MRE < 1.0 pixels
- Standard deviation reasonable (< 2.0 pixels)
- Less than 1% of features have error > 5.0 pixels
- MRE consistent across multiple test runs (variance < 10%)
TEST FAILS IF:
- MRE ≥ 1.0 pixels
- Standard deviation > 3.0 pixels (high variance indicates instability)
- More than 5% of features have error > 5.0 pixels
- MRE increases significantly over sequence (drift)
Diagnostic Actions if Failing
If MRE > 1.0 px:
- Check camera calibration accuracy
- Verify lens distortion model
- Review feature matching quality (outlier ratio)
- Examine factor graph convergence
- Check for scale drift in trajectory
If High Variance:
- Investigate images with outlier MRE
- Check for challenging conditions (blur, low texture)
- Review robust kernel settings
- Verify triangulation accuracy
Components Involved
- F07 Sequential Visual Odometry: Feature extraction and matching
- F10 Factor Graph Optimizer: Pose optimization, marginal covariances
- F13 Coordinate Transformer: 3D point projection
- H01 Camera Model: Camera intrinsics, projection functions
- H03 Robust Kernels: Outlier handling in optimization
Notes
- MRE is a geometric consistency metric, not direct GPS accuracy
- Low MRE indicates well-constrained factor graph
- High MRE with good GPS accuracy = overfitting to GPS anchors
- Low MRE with poor GPS accuracy = scale/alignment issues
- AC-10 validates internal consistency of vision pipeline