orientation op• 데이터 종류: signal × table → table
• 호출: 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)(구현을 직접 호출하려면 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), 원장에서 가져오려면 opsgeocam.get("camera_orientation_from_skyline"))
사진의 스카이라인(열마다의 행)과 DEM의 스카이라인으로부터 (yaw, pitch, roll)을 결정한다 → table.
사진의 경계 화소 (u, v) 를 카메라 광선으로 하고, 임시 자세로 월드로 돌리면, 각 열은 (방위, 앙각) 의 점이 된다. 그 앙각과, DEM 의 스카이라인을 그 방위에서 찾은 앙각의 차의 RMS 가 자세의 비용. yaw 를 yaw_step_deg 스텝으로 한 바퀴, pitch·roll 을 coarse_step_deg 스텝으로 격자 탐색하고, 최소의 점에서 Nelder–Mead 로 연속값으로 좁힌다(scipy). Baatz 등 2012 의 스카이라인 대조를, 위치 기지· 1 대의 카메라로 좁힌 형태.
모호함을 반환한다: yaw 마다의 최선 비용 곡선(yaw_profile_deg / yaw_profile_residual_deg) 과, 최선과 2 번째 골의 차 margin_deg(2 번째 골 = 최선에서 20° 이상 떨어진 최소). 평지· 대칭인 능선·반원밖에 찍히지 않는 사진에서는 골이 여러 개 있어, margin 이 작다. margin 이 coarse 의 잔차 정도라면 방향은 정해져 있지 않다고 읽는다(조용히 1 개를 반환하지 않는다: ambiguous).
Args:
skyline_rows: (W,) skyline_extract 의 출력(열마다의 행).
K: (fx, fy, cx, cy).
sky_table: dem_skyline 의 출력.
yaw_step_deg / coarse_step_deg: 거친 격자의 스텝. pitch_range / roll_range: 탐색 범위 [도].
Returns:
table: yaw_deg / pitch_deg / roll_deg / residual_deg(앙각 잔차 RMS)/
margin_deg / runner_up_yaw_deg / ambiguous(bool)/ yaw_profile_deg (M,) /
yaw_profile_residual_deg (M,) / n_columns.
• 샘플 데이터 카탈로그(DL URL / 라이선스) —— 2-D 는 skimage.data(BSD/public)+ 합성, 3-D 는 실데이터 소스(Stanford/PDS 등)의 DL URL.
• 연산자의 내력·참고문헌 —— 이 연산자 족의 바탕이 된 연구/기법의 출처.
• 알고리즘의 정전(저자·연도)과 용도는 위의 패밀리 사용 가이드에 적혀 있습니다.
• poc_public_camera_heading — py -3.11 examples/poc_public_camera_heading.py
table 를 입력으로 받는 것)orientation)—
*Provenance: geocam.py — GEOCAM 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.