camera_orientation_from_skyline — GEOCAM orientation op

• Data kinds: signal × table → table

• Call: import fullseye as fs; fs.ledger.camera_orientation_from_skyline(skyline_rows, K, sky_table, yaw_step_deg=1.0, pitch_range=(-15.0, 15.0), roll_range=(-10.0, 10.0), coarse_step_deg=2.5) (implementation को सीधे call करना हो तो import geocam; geocam.camera_orientation_from_skyline(skyline_rows, K, sky_table, yaw_step_deg=1.0, pitch_range=(-15.0, 15.0), roll_range=(-10.0, 10.0), coarse_step_deg=2.5), registry से लेना हो तो opsgeocam.get("camera_orientation_from_skyline"))

उपयोग

photo की skyline (हर column की row) और DEM की skyline से (yaw, pitch, roll) तय करता है → table।

photo के boundary pixels (u, v) को camera rays बनाकर किसी अस्थायी pose से world में घुमाने पर हर column एक (azimuth, elevation) point बन जाता है। उस elevation और उसी azimuth पर DEM skyline से निकाली गई elevation के अंतर का RMS ही pose की cost है। yaw को yaw_step_deg के step से पूरा एक चक्कर, और pitch, roll को coarse_step_deg के step से grid search किया जाता है, फिर minimum point से Nelder–Mead द्वारा continuous values तक refine किया जाता है (scipy)। यह Baatz आदि 2012 की skyline matching को ज्ञात position और 1 camera तक सीमित किया गया रूप है।

ambiguity लौटाई जाती है: हर yaw पर सबसे अच्छी cost का curve (yaw_profile_deg / yaw_profile_residual_deg) और सबसे अच्छी तथा 2nd valley का अंतर margin_deg (2nd valley = सबसे अच्छे से कम से कम 20° दूर वाला minimum)। केवल समतल ज़मीन, symmetric ridges या आधा गोला दिखाने वाली photos में कई valleys होती हैं और margin छोटा होता है। अगर margin coarse के residual जितना हो तो दिशा तय नहीं है ऐसा पढ़ें (चुपचाप 1 नहीं लौटाया जाता: ambiguous)।

Args:

skyline_rows: (W,) skyline_extract का output (हर column की row)।

K: (fx, fy, cx, cy)।

sky_table: dem_skyline का output।

yaw_step_deg / coarse_step_deg: coarse grid का step। pitch_range / roll_range: search range [degree]।

Returns:

table: yaw_deg / pitch_deg / roll_deg / residual_deg (elevation residual RMS) /

margin_deg / runner_up_yaw_deg / ambiguous (bool) / yaw_profile_deg (M,) /

yaw_profile_residual_deg (M,) / n_columns।

उपयोग की विस्तृत guide

• geocam family guide

संदर्भ (sample data, साहित्य)

• Sample data catalog (DL URL / license) — 2-D के लिए skimage.data (BSD/public) + synthetic, 3-D के लिए real data sources (Stanford/PDS आदि) के DL URL।

• Operators का स्रोत और संदर्भ — इस op family के मूल research/methods के स्रोत।

• Algorithm का मानक स्रोत (लेखक, वर्ष) और उपयोग ऊपर की family usage guide में दिए गए हैं।

चलाए जा सकने वाले उदाहरण (verified samples जो सच में यह op call करते हैं)

• poc_public_camera_heading — py -3.11 examples/poc_public_camera_heading.py

वे अगले ops जिनसे type जुड़ता है (table को input के रूप में लेते हैं)

render_skyline_view

इसी category के (orientation)

—


*Provenance: geocam.py — GEOCAM operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.