自動門檻樣板比對(對分數圖做 Otsu)
每次呼叫 match_template_all 都迫使呼叫者猜 min_score:太低會讓 NMS 充滿背景雜訊,
太高會漏掉縮放 / 換膚的目標,而正確值因素材與畫面而異。match_autothresh 移除這個魔術
數字——它對*相關性分數直方圖*(而非像素強度,後者是 preprocess.binarize 的做法)套用
Otsu 法,找出「背景相關」團與「真正匹配」團之間的谷,並回傳該門檻加上一個 separability
(分離度)值,讓呼叫端知道何時直方圖為單峰(無明確匹配 → 不要信任該門檻)。
本功能重用 visual_match._score_map``(公開比對器丟棄的完整 ``matchTemplate 曲面)與
cv2_utils.blobs.connected_boxes——每個過門檻區域只回傳單一峰,避免原始像素掃描 + NMS
在寬相關峰上留下的重複命中。haystack 可注入;分析可在合成陣列上單元測試。不匯入
PySide6。
無頭 API
from je_auto_control import match_auto, auto_threshold
# 無需手調 min_score——門檻由分數圖推導
for hit in match_auto("save_button.png", floor=0.5):
print(hit.center, hit.score)
info = auto_threshold("save_button.png")
# {"threshold": 0.83, "separability": 0.61, "n_above": 2}
if info["separability"] < 0.3:
print("無明確匹配——門檻不可信")
match_auto 每個過門檻區域回傳一個 Match,依分數排序並以 max_results 為上限;
門檻為 max(floor, otsu_threshold),使單峰 / 雜訊曲面無法把它拉到合理下限之下。
auto_threshold 回傳 {threshold, separability, n_above}——separability 接近 0
表示分數直方圖為單峰,該門檻應視為不可靠。
執行器指令
AC_match_auto``(``template / floor / max_results / region / method →
{count, matches})與 AC_auto_threshold``(``template / region / method →
{found, info})。兩者以 MCP 工具 ac_match_auto / ``ac_auto_threshold``(唯讀)及
Script Builder 指令 Match Template (auto-threshold) / Auto Threshold (Otsu on scores)
(位於 Image 分類下)形式提供。