skyline_extract — GEOCAM skyline op

• 데이터 종류: image2d → signal

• 호출: import fullseye as fs; fs.ledger.skyline_extract(image, sky_is_bright=True, smooth=1.5, max_jump=3, jump_penalty=0.5)(구현을 직접 호출하려면 import geocam; geocam.skyline_extract(image, sky_is_bright=True, smooth=1.5, max_jump=3, jump_penalty=0.5), 원장에서 가져오려면 opsgeocam.get("skyline_extract"))

사용법

사진에서 열마다의 하늘과 지형 경계의 행을 동적 계획법으로 1개 뽑는다 → signal (W,).

Lie·Lin·Hsu 2005(*Pattern Recognition*: 항법을 위한 강건한 스카이라인 추출)와 같은 생각:

수직 방향의 밝기 변화(하늘이 위에서 밝으면 I[v−1] − I[v+1] 가 양)를 "경계다움"으로 하고, 이웃 열에서 행이 max_jump 이상 튀지 않는 연속적인 경로 중 비용이 최소인 것을 고른다(jump_penalty × 행의 튐). 구름이나 건물의 세로 가장자리에서 국소적으로 강한 응답이 나와도, 경로의연속성이 진짜 능선을 남긴다.

Args:

image: (H, W) float. RGB 라면 먼저 회색으로 한다.

sky_is_bright: 하늘이 지형보다 밝다(낮). 야경·역광으로 반전한다면 False.

smooth: 세로 방향의 Gaussian σ [화소] (잡음). 0 으로 무효.

max_jump: 이웃 열에서 허용하는 행의 튐 [화소].

jump_penalty: 튐 1 화소당 비용(경계다움은 0~1 로 정규화되어 있다).

Returns:

signal (W,) float: 열마다의 경계 행(0 이 맨 위). 하늘만 찍혀 있거나·지형만찍혀 있는 영상에서는 경계의 응답이 약하고, 경로의 평균 비용이 0 에 가까우므로 ValueError

로 멈춘다(조용히 잡음의 선을 반환하지 않는다).

자세한 사용 가이드

• geocam 패밀리 가이드

참고(샘플 데이터·문헌)

• 샘플 데이터 카탈로그(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

타입이 이어지는 다음 연산자(signal 를 입력으로 받는 것)

sun_position · camera_orientation_from_sun · camera_orientation_from_sun_candidates · camera_orientation_from_skyline

같은 카테고리(skyline)

dem_skyline · render_skyline_view


*Provenance: geocam.py — GEOCAM 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*

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