From 746d1668c623958e93b2ccd983107cc5777520eb Mon Sep 17 00:00:00 2001 From: AdrianoDev Date: Mon, 4 May 2026 15:28:24 +0200 Subject: [PATCH] feat: NCC verify lazy con skip per shape-score alto ncc_skip_above (default 0.85): se lo score shape e gia molto alto, salta la verifica NCC (costosa: warp + corr per ogni match). I match borderline 0.6-0.85 vengono comunque verificati. Comportamento Halcon-style: NCC come tie-breaker per casi ambigui, non come gate generalizzato. Su scene con molti match netti riduce sensibilmente il costo della fase post-NMS. Co-Authored-By: Claude Opus 4.7 (1M context) --- pm2d/line_matcher.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/pm2d/line_matcher.py b/pm2d/line_matcher.py index e5f212a..26cd5ba 100644 --- a/pm2d/line_matcher.py +++ b/pm2d/line_matcher.py @@ -572,6 +572,7 @@ class LineShapeMatcher: subpixel: bool = True, verify_ncc: bool = True, verify_threshold: float = 0.4, + ncc_skip_above: float = 0.85, coarse_angle_factor: int = 2, scale_penalty: float = 0.0, ) -> list[Match]: @@ -805,7 +806,11 @@ class LineShapeMatcher: search_radius=self.angle_step_deg / 2.0, original_score=score, ) - if verify_ncc: + # NCC verify lazy (Halcon-style): skip se shape-score gia molto + # alto (probabilita falso positivo trascurabile). NCC e l'op + # piu costosa per match (warp + corr), quindi vale la pena + # saltarlo quando il gradiente shape e gia conclusivo. + if verify_ncc and float(score_f) < ncc_skip_above: ncc = self._verify_ncc(gray0, cx_f, cy_f, ang_f, var.scale) if ncc < verify_threshold: continue