模板匹配
想像你把某個標誌的小照片剪下來,然後像拿放大鏡一樣,把這張剪下的圖在一張大很多的圖片上滑動。每停一次,你只問一個問題:我這張剪圖此刻和底下的像素對得有多好?模板匹配(template matching)正是如此。你手上有一張小的參考影像,稱為模板,你把它放到大目標影像的每一個可能位置上,在每個位置算出一個相似度分數。分數最高的位置,就是模板出現位置的最佳猜測。
兩種經典分數分別是 SSD(平方差總和,sum of squared differences),它把每個像素逐點的亮度差平方後加總,因此在最佳匹配處數值最小;以及 NCC(正規化互相關,normalized cross-correlation),它在各自減去平均值並除以標準差之後,量測模板與底下區塊之間的統計相關性。以符號表示:對寬 w、高 h 的模板 T,以及在位移 (u,v) 處取出的影像區塊,SSD 為對每個模板像素 (x,y) 的 (I(u+x, v+y) − T(x,y))² 之總和,其中 I 為影像。NCC 則先把模板與區塊都平移成平均亮度為零,再縮放成單位變異量,然後取兩者的內積;其值介於 −1 到 +1,+1 代表完美匹配。NCC 的關鍵優勢是對線性亮度與對比變化的不變性:若整個區塊一致地亮 20%,NCC 不受影響,而未正規化的 SSD 或互相關則會被嚴重誤導。
模板匹配在目標出現的尺度、旋轉與光照都和模板相同時,既快速又可靠,這也是它至今仍用於工業任務的原因,例如半導體晶圓對位、印刷電路板檢測、圖形使用者介面測試自動化(在畫面上找出某個圖示)以及轉播圖卡。它的弱點同樣明顯:單一剛性模板無法應付尺度變化、旋轉、透視變形、非剛性形變或部分遮擋。要處理這些,你得為每一種姿態各準備一個模板,數量會組合式爆炸。正是這種脆弱性,成為後來方法要填補的缺口:具不變性的關鍵點描述子(如 SIFT)、以部件為基礎的可變形模型,以及最終能不論物件出現位置與方式都加以辨識的學習式卷積特徵。
在 1920×1080 的畫面中尋找一個 32×32 的標誌:把模板滑過全部約兩百萬個位置,在每處計算 NCC,取最大值位置。由於亮度不變性,即使轉播畫面比參考模板亮 20%,在真正位置的 NCC 仍約為 0.95。
陷阱:未正規化的互相關往往不論圖樣為何都在亮區誤觸發,因為高亮度的平坦區塊可能比真正的匹配分數還高。光照會變化時,務必使用 NCC(或 SSD);並且要記得模板匹配本身沒有尺度或旋轉不變性——你必須自己在多尺度金字塔與多個旋轉模板上搜尋。