Files
gps-denied-desktop/_docs/00_research/camera_tilt_gsd_research.md
T

7.1 KiB
Raw Blame History

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.00015 0.015%
1.00061 0.06%
1.00137 0.14%
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 (15° tilt): Error 0.015%0.38% — negligible for most applications.

During turns (1030° 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 1030° 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. 8090° 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.


  1. Use existing VO homography between consecutive frames.
  2. Decompose H to obtain R (and t).
  3. Extract tilt (pitch/roll from nadir) from R.
  4. Apply correction: GSD_corrected = GSD_nadir / cos(θ) at principal point, or per-pixel with 1/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

  1. Straight flight (15°): Correction optional; error < 0.4%.
  2. Turns (1030°): Correction recommended; error can exceed 5% above ~18°.
  3. Homography decomposition: Use cv2.decomposeHomographyMat or planar-motion solvers (e.g. Lund-style).
  4. Scale: Known altitude fixes scale from homography decomposition.
  5. Roll vs. pitch: For GSD, the effective tilt from nadir matters; combine roll and pitch into a single tilt angle for the correction.

7. Source URLs

Topic URL
GSD oblique correction formula https://math.stackexchange.com/questions/4221152/correct-non-nadir-view-for-calculation-of-the-ground-sampling-distance-gsd
Stack Overflow GSD correction https://stackoverflow.com/questions/68710337/correct-non-nadir-view-for-gsd-calculation-uav
Camera orientation variation (Extrica) https://www.extrica.com/article/15116
Oblique GSD calculator https://www.aerial-survey-base.com/gsd-calculator/gsd-calculator-help-oblique-images-calculation/
Homography decomposition https://link.springer.com/article/10.1007/s11263-025-02680-4
Lund homography planar motion + tilt https://www.lu.se/lup/publication/72c8b14d-3913-4111-a334-3ea7646bd7ea
Horizon detection attitude https://ouci.dntb.gov.ua/en/works/98XdWoq9/
Fixed-wing horizon + optical flow https://onlinelibrary.wiley.com/doi/10.1002/rob.20387
Vanishing point camera orientation https://isprs-archives.copernicus.org/articles/XLVIII-2-W9-2025/143/2025/
UAV nadir/oblique influence https://www.mdpi.com/2504-446X/8/11/662
Horizon angle at altitude https://gis.stackexchange.com/questions/4690/determining-angle-down-to-horizon-from-different-flight-altitudes