fix(642): 점진 TIN 처짐 칸 씨앗 묶음 걷음 · 면 위 판정 0.12 m — 검사점 RMS 1.008 → 0.496 m

- 굵게 → 가늘게 다짐에서 「간격 절반보다 높이 뜬 칸 제외」 묶음을 걷음 — 급한 볼록 비탈이 계속 처져 implicit 검사점 RMS 가 CSF(0.587)보다 나빴음
- 마지막 판정 면 위 문턱 0.2 → 0.12 m — 덤불 점을 덜 받음
- 용화(분류 숨김) 업체 분류 대비 맞음 83.4 · 놓침 16.6 · 잘못 넣음 11.8 % · implicit 검사점 RMS 0.496 m · 4,900 만 점 205 초 · +1.2 GB

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-11-01 23:19:44 +09:00
co-authored by Claude Opus 5.5
parent 773544e5cb
commit 0ec0b68492
@@ -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)