以sift 128維特徵作為例子。例如現在有1000張訓練,對每一張訓練都提取sift的128維特徵,那麼最終可以得到n(i)*128的特徵,n(i)代表第i張圖特徵點的個數,因為每張影象不一樣,所以每張影象的sift 特徵個數也不一樣。提取特徵後對1000張影象提取出的所有sift特徵進行聚類(目的是為了合併那些相近的特徵,相當於集合的合併操作),常用的聚類方法是k-均值聚類。對以上例子對∑n(i)∑n(i)個特徵選擇1000聚類中心進行聚類,將這1000個聚類中心稱為詞典,這個詞典好比乙個容器,通俗一點就是乙個直方圖的基,利用這個基去統計這些樣本的資訊。
此時已經得到乙個直方圖的基,如下圖:
圖1 直方圖的基,n表示聚類中心個數
這些直方圖的基像是在空間的一些三維空間基向量i,jk,利用這些基向量去構造別的向量,只需要知道特定的係數就行。所以接下來的步驟就是將原始的影象(sifit 128維)向這些基向量作對映,得到相關係數(影象中出現該特徵的個數),如圖:
圖2 兩個類別的直方圖
通過相關的對映,得到不同類別的乙個類別的直方圖統計,這樣整個bow特徵提取過程就算是完全實現了。接下來如何進行匹配,就是選擇分類器的問題了。
分類器可以選擇樸素貝葉斯分類器或svm。有研究表明bow結合svm效果比較好。訓練的時候,將步驟2中得到的相關係數作為輸入,送入到svm分類器中進行訓練。
訓練好分類器後,對於新來的樣本,同樣先提取sift特徵,然後將sift特徵對映到圖1中的詞典中去,然後得到的直方圖就可以通過分類器進行分類了。
圖3 新的bow直方圖特徵。
opencv3計算機視覺 Python(四)
在opencv中,實現了grabcut分割演算法,該演算法可以方便的分割出前景影象,操作簡單,而且分割的效果很好。演算法的原理參見papaer grabcut interactive foreground extraction using iterated graph cuts 比如下面的一副圖,我...
OpenCV3計算機視覺 python 二
當前,在計算機視覺中有三種常用的色彩空間 灰度 bgr以及hsv 1.灰度色彩空間是通過去除彩色資訊來將其轉換為灰階,灰度色彩空間對中間處理特別有效,比如人臉檢測 2.bgr,即藍綠紅色彩空間,每乙個畫素點都由乙個三元組來表示 3.hsv,h hue 是色調,s saturation 是飽和度,v ...
OpenCV 3計算機視覺(Canny邊緣檢測)
函式原型 edge cv2.canny image,threshold1,threshold2 edges aperturesize l2gradient 第乙個引數是待處理的原影象該函式會將影象處理成黑白,第二個引數是閾值1,第三個引數是閾值三 例如影象調整中的閾值就像一把尺子,它讓高於這把尺子的...