visibility op• 데이터 종류: depth → image2d
• 호출: import fullseye as fs; fs.ledger.dem_viewshed(dem, cell_size, observer_rc, observer_height_m=1.7, target_height_m=0.0, max_distance_m=None)(구현을 직접 호출하려면 import demops; demops.dem_viewshed(dem, cell_size, observer_rc, observer_height_m=1.7, target_height_m=0.0, max_distance_m=None), 원장에서 가져오려면 opsdem.get("dem_viewshed"))
1개 점에서의 가시 영역(1 = 보임). 시선이 지형에 가려지는지를 판정한다.
observer_rc는 (row, col). 관측점 자신은 항상 가시.
절차: 눈높이 eye = z[observer] + observer_height_m. 각 셀로의 시선을 ceil(hypot(H, W)) 등분하고, 도중 지형의 앙각 (z_mid - eye) / d_mid가목표의 앙각 (z + target_height_m - eye) / d를 웃도는 셀이 있으면 차폐(0). 도중의 점은 최근접 셀로 반올림하므로, 비스듬한 시선은 격자 오차를 포함한다. 지구의 곡률과 대기 굴절은 넣지 않는다(수 km 초과에서는 별도로 보정한다).
• dem: (H, W) [m], 3x3 이상, 센티넬 값은 거부(dem_slope와 같은 계약). nan 셀은 비교가 거짓이 되므로 차폐도 피차폐도 되지 않고 1인 채로 남는다.
• cell_size: [m], 양수. 거리 판정에 쓴다.
• observer_rc: 격자 안의 (row, col) 정수. 밖이거나 pair가 아닌 것은 ValueError.
• observer_height_m / target_height_m: 지면으로부터의 높이 [m]. 기본값은 눈높이 1.7 m와 지표 0 m. 철탑으로부터의 가시 영역이라면 observer_height_m를 올린다.
• max_distance_m: 이보다 먼 셀은 0(생략 시 무제한).
• 반환값: (H, W) float64의 1 / 0. 관측점은 항상 1.
• 계산량: 격자 전체 × ceil(hypot(H, W))회의 벡터 연산.
dem_horizon_angle / dem_sky_view_factor는 반대로 “각 셀에서 하늘이 얼마나보이는가”를 낸다.
• dem_terrain_analysis 패밀리 가이드
• 샘플 데이터 카탈로그(DL URL / 라이선스) —— 2-D 는 skimage.data(BSD/public)+ 합성, 3-D 는 실데이터 소스(Stanford/PDS 등)의 DL URL.
• 연산자의 내력·참고문헌 —— 이 연산자 족의 바탕이 된 연구/기법의 출처.
• 알고리즘의 정전(저자·연도)과 용도는 위의 패밀리 사용 가이드에 적혀 있습니다.
• dem_terrain_analysis_tour — py -3.11 examples/dem_terrain_analysis_tour.py
• poc_stockpile_volume — py -3.11 examples/poc_stockpile_volume.py
image2d 를 입력으로 받는 것)—
visibility)dem_horizon_angle · dem_sky_view_factor
*Provenance: demops.py — DEM 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.