sun op• Data kinds: keypoints × signal → table
• Call: import fullseye as fs; fs.ledger.camera_orientation_from_sun(sun_pixels, unix_times, lat_deg, lon_deg, K) (to call the implementation directly, import geocam; geocam.camera_orientation_from_sun(sun_pixels, unix_times, lat_deg, lon_deg, K); from the registry, opsgeocam.get("camera_orientation_from_sun"))
• GPU: none (CPU reference implementation only)
Time-stamped pixel positions of the sun, ≥ 2 points → camera (yaw, pitch, roll) (SVD solution of Wahba's problem = Kabsch).
For each observation, pixel → camera coordinate ray d_c(from K), time → global sun direction s_w(sun_position, Use an elevation angle with refraction included: the camera sees the apparent sun). R = argmin Σ |R d_c − s_w|² Solve it in closed form using SVD (Kabsch 1976 / Markley 1988) and decompose it into (yaw, pitch, roll).
It is uniquely determined by two points (requires a surface that extends in two directions). If the observations are at one point or all in the same direction (collinear) ValueError — For example, two photos at the same time, or only at noon for many days. The direction of the sun changes greatly in one day. Since it moves, you only need two photos from the same day, one taken in the morning and one taken in the evening.
Args:
sun_pixels: (u, v) of (N, 2). The output of sun_pixel_position is stacked.
unix_times: (N,) UNIX seconds (UTC).
lat_deg, lon_deg: Camera position.
K: (fx, fy, cx, cy).
Returns:
table: yaw_deg / pitch_deg / roll_deg / residual_deg (ray and sun direction
RMS of angle residual)/ max_residual_deg / n / condition(Width of surface in observation direction =
The ratio of the second and largest singular value, closer to 0 is indeterminate).
• Sample-data catalog (download URLs / licences) — 2-D uses skimage.data (BSD/public domain) plus synthetic images; 3-D lists download URLs for real data sources (Stanford, PDS, …).
• Operator provenance and references — the sources of the research/methods this op family came from.
• The canonical algorithm (author, year) and its uses are named in the family usage guide above.
• poc_public_camera_heading — py -3.11 examples/poc_public_camera_heading.py
table as input)render_skyline_view · camera_orientation_from_skyline
sun)sun_position · sun_pixel_position · sun_bloom_fit · camera_orientation_from_sun_candidates
*Provenance: geocam.py — GEOCAM operator registry. This per-op note is generated by tools/opdocs.py md (do not hand-edit).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.