feat: coarse_stride per sub-sampling top-level
Nuovo kernel JIT _jit_score_bitmap_rescored_strided: valuta solo pixel su griglia stride x stride al top della piramide. NMS + fase full-res recuperano precisione. Speed-up ~stride^2 sulla fase coarse, specie su scene grandi (1920x1080). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -573,6 +573,7 @@ class LineShapeMatcher:
|
||||
verify_ncc: bool = True,
|
||||
verify_threshold: float = 0.4,
|
||||
coarse_angle_factor: int = 2,
|
||||
coarse_stride: int = 1,
|
||||
scale_penalty: float = 0.0,
|
||||
) -> list[Match]:
|
||||
"""
|
||||
@@ -645,13 +646,16 @@ class LineShapeMatcher:
|
||||
end = min(n, i + half + 1)
|
||||
neighbor_map[vi_c] = vi_sorted[start:end]
|
||||
|
||||
# Pruning varianti via top-level (parallelizzato) - solo coarse
|
||||
# Pruning varianti via top-level (parallelizzato) - solo coarse.
|
||||
# coarse_stride > 1: valuta solo 1 pixel ogni stride, ~stride² speed-up.
|
||||
cs = max(1, int(coarse_stride))
|
||||
|
||||
def _top_score(vi: int) -> tuple[int, float]:
|
||||
var = self.variants[vi]
|
||||
lvl = var.levels[min(top, len(var.levels) - 1)]
|
||||
score = _jit_score_bitmap_rescored(
|
||||
spread_top, lvl.dx, lvl.dy, lvl.bin, bit_active_top,
|
||||
bg_cache_top[var.scale],
|
||||
bg_cache_top[var.scale], stride=cs,
|
||||
)
|
||||
return vi, float(score.max()) if score.size else -1.0
|
||||
|
||||
|
||||
Reference in New Issue
Block a user