# 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 1. ASTRAL-Next system operational 2. F07 Sequential Visual Odometry extracting and matching features 3. F10 Factor Graph Optimizer computing optimized poses 4. Camera intrinsics calibrated (from F17 Configuration Manager) 5. Test dataset with ground truth poses (for reference) 6. 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 ### 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**: 1. Check camera calibration accuracy 2. Verify lens distortion model 3. Review feature matching quality (outlier ratio) 4. Examine factor graph convergence 5. Check for scale drift in trajectory **If High Variance**: 1. Investigate images with outlier MRE 2. Check for challenging conditions (blur, low texture) 3. Review robust kernel settings 4. 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