You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无人机非天底视角下GSD计算的修正:像素角位置计算与双轴旋转公式疑问

Answers to Your GSD Calculation Questions

Hi there! I’ve worked through similar photogrammetry projects before, so let’s unpack your questions clearly:


1. Calculating the angular position φ of a pixel relative to the camera optical axis

To compute φ accurately, you’ll need to start with your camera’s intrinsic parameters and the pixel’s coordinates:

  • First, identify the principal point of your image: this is the pixel location (cx, cy) where the camera’s optical axis intersects the sensor. Most camera calibration tools (like OpenCV’s calibration functions) can provide this value, or it might be included in your camera’s metadata.
  • For any target pixel (x, y), calculate its offset from the principal point along the axis perpendicular to your camera’s tilt direction:
    • If the tilt is around the image’s vertical axis (yaw-like tilt), use the horizontal offset: dx = x - cx
    • If the tilt is around the image’s horizontal axis (pitch-like tilt), use the vertical offset: dy = y - cy
  • Convert this pixel offset to an angular position using trigonometry. Let f be your camera’s focal length in pixel units (convert from mm to pixels by dividing by the sensor’s pixel size, e.g., f_pixels = f_mm / pixel_size_mm). The angle φ is:
    φ = arctan(offset / f_pixels)
    
    This works because the focal length and pixel offset form the adjacent and opposite sides of a right triangle, where φ is the angle between the optical axis and the pixel’s line of sight.

2. GSD adjustment for dual-axis camera rotation

Yes, you’ll need to modify the GSD formula when dealing with dual-axis rotation (e.g., both pitch and yaw). The key here is that every pixel’s line of sight will have a unique angle relative to the vertical (nadir) direction, which affects how much ground area each pixel covers.

Step-by-step derivation & formula:

  1. Start with the nadir GSD as your baseline:
    GSD_nadir = (flight_altitude × sensor_pixel_size) / (focal_length × image_dimension)
    
  2. For any pixel, calculate the effective angle γ between its line of sight and the vertical (nadir) direction:
    • Compute the pixel’s direction vector in the camera’s local coordinate system: (dx/f, dy/f, 1) (where dx = x - cx, dy = y - cy), then normalize this vector.
    • Apply your dual-axis rotation matrix (combining pitch θ and yaw ψ) to convert this vector into the world coordinate system (where the z-axis points straight up from the ground).
    • The cosine of γ is the absolute value of the z-component of the rotated direction vector (this represents how aligned the pixel’s line of sight is with the vertical).
  3. Adjust the GSD for the pixel using this cosine value:
    GSD_rotated = GSD_nadir / |cos(γ)|
    

Key notes:

  • Unlike single-axis tilt, dual-axis rotation means GSD will vary across both width and height of the image. Pixels farther from the optical axis in both directions will have larger GSD values.
  • If you’re working with a GIS or photogrammetry library (like PDAL or OpenDroneMap), many tools can handle this calculation automatically using your camera’s orientation metadata (EXIF tags for pitch/yaw/roll), so you might not need to implement the rotation matrix from scratch.

内容的提问来源于stack exchange,提问作者Spinkoo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 04:07:41