add tests

gen_tests updated
solution.md updated
This commit is contained in:
Oleksandr Bezdieniezhnykh
2025-11-24 22:57:46 +02:00
parent f50006d100
commit 4f8c18a066
49 changed files with 7209 additions and 3 deletions
@@ -0,0 +1,291 @@
# Integration Test: Image Rotation Manager
## Summary
Validate the Image Rotation Manager component for detecting and correcting image orientation issues from non-stabilized UAV camera.
## Component Under Test
**Component**: Image Rotation Manager
**Location**: `gps_denied_06_image_rotation_manager`
**Dependencies**:
- Image Input Pipeline
- EXIF metadata reading
- OpenCV rotation functions
- Configuration Manager
## Detailed Description
This test validates that the Image Rotation Manager can:
1. Detect rotation/orientation from EXIF metadata
2. Detect rotation from image content analysis (horizon detection)
3. Apply rotation correction efficiently
4. Handle pitch and roll variations from wing-type UAV
5. Maintain image quality during rotation
6. Estimate rotation angle for images without metadata
7. Handle edge cases (upside-down, 90° rotations)
8. Coordinate with vision algorithms that expect specific orientations
Since the UAV camera is "pointing downwards and fixed, but not auto-stabilized" (per restrictions), images may have varying orientations due to aircraft banking and pitch during flight, especially during turns.
## Input Data
### Test Case 1: EXIF Orientation
- **Image**: AD000001.jpg
- **Check**: EXIF orientation tag if present
- **Expected**: Detect and report orientation metadata
### Test Case 2: Straight Flight (No Rotation)
- **Images**: AD000001-AD000010 (straight segment)
- **Expected**: Little to no rotation needed (< 5°)
### Test Case 3: Before/After Sharp Turn
- **Images**: AD000042, AD000044 (sharp turn, skip AD000043)
- **Expected**: Possible rotation difference due to banking
### Test Case 4: Outlier Image
- **Image**: AD000048 (after 268m jump)
- **Expected**: May have significant rotation due to aircraft tilt
### Test Case 5: Content-Based Rotation Detection
- **Image**: AD000025.jpg (mid-route)
- **Method**: Horizon detection or feature alignment
- **Expected**: Estimate rotation angle without metadata
### Test Case 6: Rotation Correction Application
- **Image**: Artificially rotated AD000010.jpg by known angles (15°, 30°, 45°, 90°)
- **Expected**: Detect and correct rotation to within 2°
### Test Case 7: Batch Processing
- **Images**: All 60 images
- **Expected**: Process all images, identify which need rotation correction
### Test Case 8: Extreme Rotation
- **Image**: AD000015.jpg rotated 180° (upside-down)
- **Expected**: Detect and correct significant rotation
## Expected Output
For each test case:
```json
{
"success": true/false,
"image_path": "path/to/image.jpg",
"rotation_detected": true/false,
"rotation_angle_deg": <float>,
"rotation_source": "exif|content_analysis|none",
"confidence": <float 0-1>,
"rotation_applied": true/false,
"corrected_image_path": "path/to/corrected_image.jpg",
"processing_time_ms": <float>,
"quality_metrics": {
"sharpness_before": <float>,
"sharpness_after": <float>
}
}
```
## Success Criteria
**Test Case 1 (EXIF)**:
- success = true
- EXIF orientation read if present
- Reported correctly
- processing_time_ms < 50
**Test Case 2 (Straight Flight)**:
- All images show rotation_angle_deg < 5°
- rotation_applied = false or minimal correction
- Consistent orientations across sequence
**Test Case 3 (Sharp Turn)**:
- Rotation angles detected if present
- Banking during turn may cause rotation
- Both images processed successfully
**Test Case 4 (Outlier)**:
- Image processed successfully
- Rotation detected if present
- No crash despite unusual geometry
**Test Case 5 (Content-Based)**:
- Rotation angle estimated (confidence > 0.6)
- Estimate within ±5° of ground truth if available
- processing_time_ms < 500
**Test Case 6 (Correction)**:
- All artificially rotated images corrected
- Corrected angle within ±2° of target (0°)
- Image quality preserved (PSNR > 25dB)
- 90° rotations detected and corrected exactly
**Test Case 7 (Batch)**:
- All 60 images processed
- Statistics reported (mean rotation, max rotation)
- Total processing time < 30 seconds
- No crashes or failures
**Test Case 8 (Extreme)**:
- 180° rotation detected (confidence > 0.8)
- Correction applied successfully
- Resulting image is right-side-up
## Maximum Expected Time
- **EXIF reading**: < 50ms
- **Content-based detection**: < 500ms
- **Rotation application**: < 200ms
- **Batch 60 images**: < 30 seconds
- **Total test suite**: < 60 seconds
## Test Execution Steps
1. **Setup Phase**:
a. Initialize Image Rotation Manager
b. Load test images
c. Create artificially rotated test images for Test Case 6
d. Configure detection parameters
2. **Test Case 1 - EXIF**:
a. Load AD000001.jpg
b. Read EXIF orientation tag
c. Report findings
d. Measure timing
3. **Test Case 2 - Straight Flight**:
a. Process AD000001-AD000010
b. Detect rotation for each
c. Verify low rotation angles
d. Check consistency
4. **Test Case 3 - Sharp Turn**:
a. Process AD000042, AD000044
b. Compare rotation between images
c. Check for banking-induced rotation
d. Verify successful processing
5. **Test Case 4 - Outlier**:
a. Process AD000048
b. Handle any unusual orientation
c. Verify robustness
d. Check error handling
6. **Test Case 5 - Content-Based**:
a. Process AD000025.jpg
b. Apply content-based rotation detection
c. Estimate rotation angle
d. Validate confidence score
7. **Test Case 6 - Correction**:
a. Load artificially rotated images
b. Detect rotation
c. Apply correction
d. Verify accuracy
e. Check image quality
8. **Test Case 7 - Batch**:
a. Process all 60 images
b. Collect statistics
c. Identify outliers
d. Report summary
9. **Test Case 8 - Extreme**:
a. Load 180° rotated image
b. Detect rotation
c. Apply correction
d. Verify result
## Pass/Fail Criteria
**Overall Test Passes If**:
- All test cases meet their success criteria
- No crashes on any image
- Rotation detection accuracy > 85%
- Rotation correction accuracy within ±3°
- Image quality maintained (PSNR > 25dB)
**Test Fails If**:
- Any image causes crash
- Rotation detection fails on obviously rotated images
- Correction introduces artifacts or quality loss > 5dB
- Processing time exceeds 2x maximum expected
- False positive rate > 20% (detecting rotation when none exists)
## Additional Validation
**Rotation Detection Methods**:
1. **EXIF Tag**: Quickest, but may not be present
2. **Horizon Detection**: Use Hough lines to find horizon
3. **Feature Alignment**: Compare to reference orientation
4. **Gravity Vector**: Use vanishing points (vertical structures)
**Accuracy Testing**:
For Test Case 6, create rotated versions at:
- 0° (control)
- 5°, 10°, 15° (small rotations)
- 30°, 45° (moderate rotations)
- 90°, 180°, 270° (cardinal rotations)
- -15°, -30° (counter-clockwise)
Measure detection and correction accuracy for each.
**Quality Preservation**:
- **Interpolation Method**: Use bicubic or lanczos for high quality
- **Border Handling**: Crop or pad appropriately
- **Metadata Preservation**: Maintain EXIF data in corrected image
**Performance Optimization**:
- Content-based detection should be skippable if EXIF reliable
- GPU acceleration for batch rotation if available
- Parallel processing for batch operations
**Edge Cases**:
1. **No Clear Horizon**: Agricultural fields may have no clear horizon - should handle gracefully
2. **All-Sky Image**: If camera points up instead of down (error case)
3. **Blank/Dark Image**: Insufficient features for detection
4. **High Texture Image**: Many features but no clear orientation cues
**Integration with Vision Pipeline**:
- SuperPoint should work regardless of minor rotation
- LightGlue should match features despite rotation
- AnyLoc DINOv2 features should be rotation-invariant
- LiteSAM may benefit from consistent orientation
**False Positive Analysis**:
Test images that are correctly oriented:
- Should not detect false rotation
- Should report confidence < 0.5 for "no rotation needed"
- Should not apply unnecessary corrections
**Rotation Statistics for Full Dataset**:
Expected findings:
- Mean rotation angle: < 5° (mostly straight)
- Max rotation angle: ~15-30° during banking
- Images needing correction: < 30%
- Straight segments (01-30): minimal rotation
- Turn segments (42-48): possible higher rotation
## Camera Characteristics
Given UAV camera is:
- "pointing downwards and fixed"
- "not auto-stabilized"
- Wing-type UAV (banks to turn)
Expected rotation scenarios:
- **Roll**: Banking during turns (up to ±30°)
- **Pitch**: Climbing/descending (usually minimal)
- **Yaw**: Heading change (doesn't affect image rotation)
Most critical: **Roll detection and correction**
## Validation Against Ground Truth
If GPS coordinates and consecutive images are used:
- Direction of flight can be inferred
- Expected "up" direction in image can be estimated
- Validate detected rotation against flight path geometry
## Performance Benchmarks
- 1000 EXIF reads in < 5 seconds
- 100 content-based detections in < 30 seconds
- 100 rotation applications in < 10 seconds
- Memory usage per image < 100MB