Files
yola/Pink/.claude/plans/ct-line-detection-fix.md
T
2026-07-17 15:37:35 +08:00

1.6 KiB
Raw Blame History

Plan: 对齐 C++ C/T 线检测逻辑

问题

当前 Kotlin 代码跳过条带定位步骤,直接在整张相机画面(960×1280)上用极低阈值检测 C/T 线,导致噪声轮廓大量通过,C 线检测不稳定。

C++ 方案正确:先找绿色定位块 → 裁剪旋转条带区域 → 在裁剪后的条带上检测 C/T 线

修改范围

1. StripLocator.ktlocate() 函数(主路径)

a) 放宽 center distance ratio(第 408 行)

  • 1.651.7(对齐 C++

b) C/T 线过滤顺序和阈值(第 542-548 行)

  • 当前:Width(0.030.25) → Height(0.41.1)
  • 改为:Height(0.71.1) → Width(0.0450.20)(对齐 C++

c) 去重逻辑(第 556-569 行)

  • 当前:保留离图像中心最近的 2 个轮廓
  • 改为:左右两侧各保留 1 个(最靠近中心线的),对齐 C++

2. StripLocator.ktlocateCroppedStrip() 函数(回退路径)

a) 过滤顺序和阈值(第 850-856 行)

  • 当前:Width(0.0050.35) → Height(0.021.1)
  • 改为:Height(0.151.1) → Width(0.010.25)

b) 去重逻辑(第 864-879 行)

  • locate(),改为左右各保留 1 个

3. ScanViewModel.ktprocessFrameInternal()(第 161-166 行)

  • 当前:直接调用 locateCroppedStrip(rgbMat)
  • 改为:先 try locate(srcRgba, roiRect, false),失败再 fallback 到 locateCroppedStrip

预期效果

  • C/T 线检测在裁剪后的条带区域上进行,过滤阈值合理
  • C 线检测更稳定,减少"只检测到 1 条线"的情况
  • 即使 locate() 失败,fallback 路径也有改善的阈值