diff --git a/B04_PreProcess/B04_PreProcess_Engine_Filter_PTD.py b/B04_PreProcess/B04_PreProcess_Engine_Filter_PTD.py index c5a1cc2c1..d55c209ba 100644 --- a/B04_PreProcess/B04_PreProcess_Engine_Filter_PTD.py +++ b/B04_PreProcess/B04_PreProcess_Engine_Filter_PTD.py @@ -7,7 +7,7 @@ 굵게 → 가늘게: 후보가 모두 면 위로 뜬 칸(면이 처짐)에 반 간격 씨앗을 더해 다시 다짐. 끝에 둘레보다 최대 거리 넘게 튀거나 꺼진 외딴 꼭짓점(가시 · 잡점)을 걷음. 3. 마지막 지면 TIN 을 후보 칸 격자로 굳히고 모든 점을 면까지 연직 거리로 판정 — - 면 아래 최대 거리 · 면 위 0.2 m(꼭짓점 = 칸 최저라 땅은 면 곁 · 위는 덤불). + 면 아래 최대 거리 · 면 위 0.12 m(꼭짓점 = 칸 최저라 땅은 면 곁 · 위는 덤불). 장면 셋(DJI Terra 꼴) = 평지 3° · 0.3 m / 완경사 6° · 0.5 m / 급경사 10° · 0.7 m · 기본 급경사(임도). @@ -157,7 +157,7 @@ def filter_ptd( seed_spacing: float = SURFACE_PTD_SEED_SPACING_M, max_angle: float | None = None, max_distance: float | None = None, - above_distance: float = 0.2, + above_distance: float = 0.12, candidate_cell: float = 0.5, max_candidates: int = 3_000_000, max_iterations: int = 60, @@ -210,8 +210,7 @@ def filter_ptd( pending = np.flatnonzero(~is_ground) dz[pending] = _tin_dz(cand[is_ground], cand[pending]) gx, gy, pick = _lowest_per_cell(np.column_stack([cand[:, :2], dz]), origin, spacing) - # 간격 절반보다 높이 뜬 칸 = 땅이 안 보이는 수관 · 덤불 → 씨앗으로 안 씀 - sag = pick[(dz[pick] > max_distance) & (dz[pick] <= spacing / 2)] + sag = pick[dz[pick] > max_distance] if len(sag): is_ground[sag] = True _densify(cand, is_ground, max_angle, max_distance, max_iterations)