基於Python和Opencv的目標檢測與特徵

2021-08-06 02:47:28 字數 2874 閱讀 2631

而我們訓練分類器的過程就是給這個分類函式(數學模型)找到一系列最優的引數,使得通過這個函式來判斷時能達到最好的分類效果(更高階一點的分類器就加入了學習和自適應的概念使得分類更精準),那麼通過什麼可以得到這個分類器呢?就是分類演算法

提到演算法我們不得不提到機器學習的概念,機器學習演算法簡單來說可以通過對其不同的角度來看分為三類:

①有監督學習(分類演算法、回歸演算法)、無監督學習(聚類)、半監督學習

②分類與回歸、標註

③生成模型、判別模型

因為我最近也剛開始學機器學習這部分,具體的以後再談

訓練分類器的演算法有:svm、決策樹、knn、adaboost演算法等(比如一般檢測行人是hog特徵+svm演算法;opencv裡檢測人臉是haar特徵+adaboost演算法;檢測拳頭一般lbp特徵+adaboost演算法)

同時呢,另乙個關鍵的步驟就是特徵提取,它包括特徵選擇和特徵提取

針對不同的目標選取不同的特徵才是需要解決的首要問題,但其實做到後面你就會發現,其實對特徵的選擇就是對演算法的選擇,因為不同的演算法他會使用不同的特徵,你選擇了演算法其實也就是選擇了某種特徵,但要是你想對演算法進行改進那就是另外一回事了,你需要建立你自己的一種得到特徵的方式

2.特徵

(1)什麼是特徵?

用我自己的話來說就是,當我們要完成某些檢測或者其它目的時(例如匹配、識別等等)需要對影象區域進行乙個選取、計算的過程,最後得到乙個能夠幫我們完成這個檢測目標的乙個描述的東西(描述子、特徵)

(2)特徵都有些什麼?

可以分為顏色特徵、紋理特徵、形狀特徵、特徵學習等這幾大類

①顏色特徵:顏色直方圖 (常使用hsv顏色空間)------主要應用於影象檢索方面

②紋理特徵:

(1)hog(梯度方向直方圖):具有影象幾何和光學形變的不變性(也就是說對光照變化好) 一般應用:hog+svm行人檢測

(haar:一系列的模板,haar特徵定義為模板內白色矩形畫素和減去黑色矩形畫素和)

(2)lbp特徵(區域性二值模式):具有旋轉不變性和灰度不變性 一般應用:svm等機器學習演算法訓練分類器,人臉、手掌、拳頭等

(lbp:原始的lbp運算元定義為在3*3的視窗內,以視窗中心畫素為閾值,將相鄰的8個畫素的灰度值與其 進行比較,若周圍畫素值大於中心畫素值,則該畫素點的位置被標記為1,否則為0,把這個8位二進位制 數叫做lbp值)

(3)haar小波特徵:具有邊緣特徵的特性;線性特性;中心特性和對角特性

應用:在opencv中結合adaboost演算法進行人臉檢測,檢測率很高

(haar:一系列的模板,haar特徵定義為模板內白色矩形畫素和減去黑色矩形畫素和)

(4)sift(尺度不變特徵變換):具有尺度不變性、缺點是複雜度高、耗時長(2023年提出)

(5)surf(speed-uprobust features):對sift的改進,大體相似、相比之下速度快幾倍 (2023年提出)

(6)orb:fast關鍵點+brief描述符,2023年首次發布、是目前最快的一種描述符

③形狀特徵:bow詞袋技術(bag of word),一般應用:bow+svm構建的分類器進行目標檢測

④特徵學習:分為監督學習(分類)和無監督學習(聚類),前者包括神經網路、決策樹、svm等;後者包括主成分分析法、k均值聚類等各種聚類演算法

一般常用的特徵基本就是上面這些了,接下來我們具體看一下:

harris角點檢測、sift、surf、orb這幾個特徵或者特徵演算法:

①harris角點檢測:用sobel運算元通過對影象行列變化來邊緣檢測,且具有旋轉不變性,但若在縮放影象時,則會相應的丟失或增加一些角點,造成檢測不準確,也就是說需要一種與比例無關的檢測方法

②sift(尺度不變特徵變換):使用difference of gaussian(dog)來檢測關鍵點(即對同一影象使用不同的高斯濾波器),得到一系列關鍵點,並且會對關鍵點周圍的區域計算乙個特徵向量(在上用方向來描述),得到一系列對應的描述符

③surf:用快速hessian演算法來檢測關鍵點(即用每個畫素的hessian矩陣行列式的近似值構成),並且跟sift一樣計算得到一系列描述符

④orb(oriented brief):fast關鍵點檢測技術+基於brief描述符的技術(brief也是一種描述子),同樣的,得到的特徵也是關鍵點+描述符的形式

可以看到,正是因為harris角點的不足之處,才有了後面這幾個新的改進特徵,基本都是關鍵點+描述符的形式來對其進行描述,他們用的最多的地方是在特徵匹配上

說了這麼多,我們看看這幾個特徵提取出來都是什麼樣子吧!~

1.harris角點檢測

可以看到,haris角點對這種格仔即使是手畫的格仔都能夠很好地檢測出角點,但在我最近檢測的下面這個例子有可能是光線的原因,檢測效果不太理想,也可以看看

2.sift尺度不變特徵

具體都是類似於這種,中不只檢測到了關鍵點,還畫出了關鍵點周圍的描述符和特徵方向,至於其他surf和orb類似上圖

1.knn匹配:

sift做的knn匹配

surf做的knn匹配

基於openCV和python的車牌字元切割

在車牌識別以及別的需要文字識別的場景中都需要對影象中的文字進行正確的切分以便於下一步的識別,類似人的閱讀計算機在識別文字時只能乙個乙個的來,精準的切分字元是識別的必要條件。假設我們已經從包含整輛車的中得到了只包含車牌的區域,如圖一所示,那麼任務就是如何把圖一 現的字母和數字單獨分開。注意到圖一的左上...

基於python的opencv教程

第一次寫部落格,學習是要有輸入與輸出的,所謂教學相長。所以我想試著自己寫乙份教程,算是對自己的學習總結吧,部落格的排版比較直男,請湊合看吧。首先建議的ide是pycharm,opencv的庫直接pip安裝就好,最好大家有一定的python基礎。第一部分是關於圖象讀取和儲存。import cv2imp...

基於python的opencv學習

dst cv2.sobel src,ddept,dx,dy,ksize ddepth 影象的深度,一般設為 1ksize sobel運算元的大小 白到黑是正數,黑到白是負數,所有的負數都會被截斷為0,因此要使用convertscaleabs取絕對值2 拉普拉斯金字塔 1 低通濾波 2 縮小尺寸pyr...