[AI][Python]OpenCV-模型訓練1-Haar特徵分類-簡介

  • 78
  • 0
  • AI
  • 2025-05-29

文、意如

Haar 特徵分類器(Haar Cascade Classifier)

是 OpenCV 中一種經典且有效的物件偵測方法。

在電腦視覺的世界中,「物件偵測(Object Detection)」是非常重要的核心技術之一。

無論是臉部辨識、貓、狗、交通號誌辨識,還是自動對焦系統,都需要能快速、準確地在圖片中找出特定目標。

在深度學習尚未普及的年代,Haar 特徵分類器(Haar Cascade Classifier) 是最常被使用的物件偵測工具之一,至今仍被廣泛使用於即時應用中,因為它速度快、效能穩定、部署簡單。
 

Haar 是什麼?

基於影像亮度變化的簡單特徵(稱為 Haar-like 特徵)。

這些特徵藉由「黑白區域的對比」來辨識物體,例如:

  • 眼睛相對於臉部會比較暗
  • 鼻子附近是明亮的區域
  • 嘴巴下方通常比臉頰深色
     
Haar 特徵是一種對「區域亮度差」進行計算的方式,用來找出圖像中可能的目標(如車牌)位置。

✔ 特徵原理:

白區總亮度 − 黑區總亮度

結果代表明暗對比強度 → 可用來判斷是否可能是目標特徵(例如:字的線條、車牌邊緣)

 

類型說明運用情境
邊緣型左右或上下黑白相間車牌邊框、字輪廓
線條型明暗交錯的線條(例如黑白黑)車牌內部文字
方塊型四格分區(上下左右亮暗對比)橫條式車牌、格子形文字
邊緣特徵
邊緣特徵
線條特徵
線條特徵
中心特徵
中心特徵
對角線特徵
對角線特徵

 

為什麼用Haar特徵?

計算快速(搭配積分圖加速特徵總和運算)

適合低運算資源的即時辨識(如監視系統、嵌入式裝置)

它是怎麼運作的?

掃描整張圖片
使用「滑動視窗」技術,從左上角一路滑動掃描整張圖片的每個區域。

提取 Haar 特徵
每個滑動區域會提取多種 Haar 特徵,
分析亮/暗區域的差異。
 

判斷是否為目標:

 利用一個訓練好的「分類器」來判斷這個區域是否包含目標(例如臉)。

多層級級聯(Cascade): 

如果前幾層分類器說「像臉」,才會交給下一層繼續判斷,這樣可以大幅減少處理時間。

例如:判斷是否為車牌:使用訓練好的分類器,判斷這個區域是否可能是車牌。

 

分類器如何訓練?

訓練目標是找出哪些 Haar 特徵可以有效分辨「有車牌」與「沒車牌」的區域。

提供數千張正樣本(含車牌)與負樣本(背景或無車牌影像)

Adaboost 演算法會:

計算每個特徵在所有樣本上的效果

選出表現最好的特徵組合成分類器

每個特徵都有對應的權重與判斷門檻

特徵 + 判斷門檻 → 投票組合形成分類器

 

什麼是 Cascade 結構:

一個完整的 Haar 分類器,實際上由「很多層」小分類器組成,稱為 Cascade(層級式分類)。

每層:判斷是否值得繼續檢查

不像的直接剔除、像的才進入下一層

這種結構可以讓系統只花時間在「有可能成功的區域」上。


每一層會快速過濾掉不可能的區域,只有通過的區域才會進入下一層。這樣可以更快更準確地找到車牌。

我們要做什麼?
  • 準備 正樣本(含有目標物的圖片)
  • 準備 負樣本(背景圖片,不含目標)
  • 使用 OpenCV 工具 進行訓練
  • 測試我們自己訓練的分類器效果!
     

Haar 特徵分類器是一種結合簡單數學與有效機制的影像辨識方法。

它透過數百到數千個「亮暗對比特徵」來學習目標的外觀,並透過 cascade 結構提升運算效率,

廣泛應用於臉部、車牌、物件等偵測任務中。

 

Yiru@Studio - 關於我 - 意如