7.1 KiB
Camera Tilt Impact on GSD Estimation for UAV Aerial Photography (Without IMU)
Context: GPS-denied visual navigation system processes photos from a fixed-wing UAV. Camera points downward but is NOT autostabilized. GSD computed as GSD = (effective_altitude × sensor_width) / (focal_length × original_width) assuming nadir. Flight altitude up to 1 km. No IMU data.
1. GSD Error from Uncorrected Camera Tilt
Formula
At the principal point (image center, φ = 0), the GSD correction factor is:
GSD_rate = 1 / cos(θ)
GSD_actual = GSD_nadir × GSD_rate = GSD_nadir / cos(θ)
Where θ = tilt angle from nadir (angle between optical axis and vertical).
Error percentage (nadir assumption vs. actual):
Error (%) = (GSD_actual - GSD_nadir) / GSD_nadir × 100 = (1/cos(θ) - 1) × 100
GSD Error at Typical Tilt Angles
| Tilt θ | 1/cos(θ) | GSD Error (%) |
|---|---|---|
| 1° | 1.00015 | 0.015% |
| 2° | 1.00061 | 0.06% |
| 3° | 1.00137 | 0.14% |
| 5° | 1.00382 | 0.38% |
| 10° | 1.01538 | 1.54% |
| 15° | 1.03528 | 3.53% |
| 18° | 1.05146 | 5.15% |
| 20° | 1.06418 | 6.42% |
| 25° | 1.10338 | 10.34% |
| 30° | 1.15470 | 15.47% |
Straight flight (1–5° tilt): Error 0.015%–0.38% — negligible for most applications.
During turns (10–30° bank): Error 1.5%–15.5% — significant and should be corrected.
2. When Does GSD Error Become Significant (>5%)?
Threshold: ~18° tilt.
- Below 15°: Error < 3.5%
- 15°–18°: Error 3.5%–5%
- Above 18°: Error > 5%
Fixed-wing UAVs commonly bank 10–30° in turns; photogrammetry specs often limit tilt to ±2° for straight flight and roll to ±5°.
3. Per-Pixel GSD (Full Formula)
For non-nadir views, GSD varies across the image:
GSD_rate(x, y) = 1 / cos(θ + φ)
Where:
- θ = camera tilt from nadir
- φ = angular offset of pixel from optical axis (0 at principal point)
Computing φ from pixel (x, y) and intrinsics (fx, fy, cx, cy):
world_vector = K⁻¹ × [x, y, 1]ᵀ
φ = angle between world_vector and optical axis (0, 0, 1)
Using focal length f and principal point (c₁, c₂):
tan(φ) = px × √[(x_px - c₁)² + (y_px - c₂)²] / f
For two-axis rotation (tilt + pan), the spherical law of cosines applies; see Math Stack Exchange derivation.
4. Tilt Estimation Without IMU
4.1 Horizon Detection
Feasibility: Not suitable for nadir-down imagery at 1 km.
- Horizon is ~0.9° below horizontal at 1 km altitude.
- A downward camera (e.g. 80–90° from horizontal) does not see the horizon.
- Horizon detection is used for front-facing or oblique cameras, not nadir mapping.
Sources: Fixed-wing attitude via horizon tracking; horizon detection for front-facing UAV cameras.
4.2 Vanishing Point Analysis
Feasibility: Limited for nadir ground imagery.
- Vanishing points come from parallel lines (roads, buildings).
- Nadir views often lack clear converging lines.
- More useful for oblique/urban views.
- Reported accuracy: ~0.15° roll, ~0.12° pitch on structured road scenes.
Sources: ISPRS vanishing point exterior orientation; real-time joint estimation of camera orientation and vanishing points.
4.3 Feature Matching Between Consecutive Frames
Feasibility: Yes — standard approach.
- Feature matching (e.g. SuperPoint+LightGlue) yields point correspondences.
- Homography or essential matrix relates consecutive views.
- Homography decomposition gives rotation R (and translation t).
- R encodes roll, pitch, yaw; pitch/roll relative to nadir give tilt.
4.4 Homography Decomposition (Already in Pipeline)
Feasibility: Best fit for this system.
- Homography:
H = K(R - tnᵀ/d)K⁻¹for planar scene. - R = rotation (roll, pitch, yaw); t = translation; n = plane normal; d = plane distance.
- For ground plane at known altitude, R can be decomposed to extract tilt.
- Planar motion (constant height, fixed tilt) reduces DOF; specialized solvers exist.
Lund University work:
- Ego-motion and tilt from multiple homographies under planar motion.
- Iterative methods for robust tilt across sequences.
- Minimal solvers (e.g. 2.5 point correspondences) for RANSAC.
Sources: Homography decomposition (Springer); Lund planar motion and tilt estimation.
5. Recommended Approach for Tilt-Compensated GSD
Option A: Homography Decomposition (Recommended)
- Use existing VO homography between consecutive frames.
- Decompose H to obtain R (and t).
- Extract tilt (pitch/roll from nadir) from R.
- Apply correction:
GSD_corrected = GSD_nadir / cos(θ)at principal point, or per-pixel with1/cos(θ + φ).
Pros: Reuses current pipeline, no extra sensors, consistent with VO.
Cons: Depends on homography quality; planar assumption; possible 4-way decomposition ambiguity (resolved with known altitude/scale).
Option B: Simplified Center-Only Correction
If per-pixel correction is unnecessary:
- Estimate tilt θ from homography decomposition.
- Use
GSD_corrected = GSD_nadir / cos(θ)for the whole image.
Option C: Vanishing Points (If Applicable)
For urban/structured scenes with visible parallel lines:
- Detect vanishing points.
- Estimate pitch/roll from vanishing point positions.
- Use for GSD correction when horizon/homography are unreliable.
6. Implementation Notes
- Straight flight (1–5°): Correction optional; error < 0.4%.
- Turns (10–30°): Correction recommended; error can exceed 5% above ~18°.
- Homography decomposition: Use
cv2.decomposeHomographyMator planar-motion solvers (e.g. Lund-style). - Scale: Known altitude fixes scale from homography decomposition.
- Roll vs. pitch: For GSD, the effective tilt from nadir matters; combine roll and pitch into a single tilt angle for the correction.