特徵匹配(feature match)是計算機視覺中很多應用的基礎,比如說影象配準,攝像機跟蹤,三維重建,物體識別,人臉識別,所以花一些時間去深入理解這個概念是不為過的。本文希望通過一種通俗易懂的方式來闡述特徵匹配這個過程,以及在過程中遇到的一些問題。
首先我通過幾張來指出什麼是特徵匹配,以及特徵匹配的過程。
影象一:彩色圓圈為影象的特徵點
影象二:
影象一與影象二的匹配:
概念理解:什麼是特徵,什麼是特徵描述,什麼是特徵匹配
假設這樣的乙個場景,小白和小黑都在看乙個,但是他們想知道他們看的是否是同一幅,於是他們就通過**描述這個,來判斷是否是同乙個。比如說有下面兩個
對話1:
對話2:
小白:我的乙個特徵左邊是三角形,右邊是圓形,上面是菱形,下面是正方形。
小黑:我也有乙個特徵左邊是三角形,右邊是圓形,上面是菱形,下面是正方形。
對話3:
小白和小黑:那我們看到的就是同乙個特徵了。
上述三個對話其實分別代表這特徵提取,特徵描述和特徵匹配。
那麼來詳細的分析一下,我們的問題是要匹配兩張影象是否是同乙個影象,比較好的方法就是找出影象中特徵顯著的內容然後來進行比較,如果這些特徵都一致,那麼就有很高的概率稱他們為同乙個影象。所以首先第一步就是找出影象中特徵性強的內容(feature detect),上圖中特徵性強的就是五個紅色的圖案。但是只知道有顯著特徵沒用,必須知道兩張影象中的特徵是不是一致的,如何判斷特徵是不是一致的,就需要我們對這個特徵進行描述(feature deor),如果描述非常的相似或者說是相同,那麼就可以判斷為是同一特徵。那麼問題來了,該如何去描述乙個特徵,什麼樣的描述是乙個好的描述呢。從對話2中我們可以看出,描述乙個特徵其實就是描述特徵與他周圍內容的相互關係。那麼什麼樣的描述是乙個好的描述呢,就要提到我們為什麼要描述特徵了?我們描述特徵是為了能夠更好的匹配特徵,使得我們認為描述相同的特徵是同乙個特徵的是可信的(概率高的)。所以我們的描述必須是有代表性的,具有排他性的(discriminative),而不是模稜兩可泛泛而談的。最後我們就可以根據描述的相似性來判斷這對特徵是否是同乙個特徵。
特徵不變性的理解:
接下來我們將談一下特徵的不變性。我們用過很多特徵,harris corner、sift、surf、brief、brisk等,而特徵的乙個重要特性就是特徵不變性,常見的就是旋轉不變性和尺度不變性,還有一些具有仿射不變性的特徵。而這些特徵該怎麼理解呢?下面我就用通俗地解釋一下。
再看下面兩張:
於是我們在看審視三個對話,你會發現對話2就改變了。
對話2:
小白:我的乙個特徵左邊是三角形,右邊是圓形,上面是菱形,下面是正方形。
小黑:我有乙個特徵左邊是正方形,右邊是菱形,上面是三角形,下面是圓形。
於是小黑和小白就認為他們看得並不是同乙個。但事實上他們看得確實是同一種。於是我們就說這種特徵不具有旋轉不變性。
那麼如何實現旋轉不變性呢,再看下面兩張:
然後我們再來審視對話2:
對話2:
小白:我的乙個特徵西邊是三角形,東邊是圓形,北邊是菱形,南邊是正方形。
小黑:我也有乙個特徵西邊是三角形,東邊是圓形,北邊是菱形,南邊是正方形。
這時候兩個特徵的描述就一致了,即擁有了旋轉不變性。所以只要對特徵定義方向,然後在同乙個方向上進行特徵描述就可以實現旋轉不變性。這稱之為rotation normalization。
接下來談一下尺度不變性,依然看下面兩張:
對話2:
小白:我的乙個特徵東邊5個畫素的地方有個圓形。
小黑:我有乙個特徵東邊7個畫素的地方有個圓形。
這就是尺度變化造成的特徵不匹配,為了實現尺度不變性,就需要給特徵加上尺度因子,比如說小白看到的是尺度為5的,小黑看到的是尺度為7的,那麼在進行描述的時候,將尺度統一就可以實現尺度不變性了。這過程稱為scale normalization。
所謂的旋轉不變性和尺度不變性的原理,就是我們在描述乙個特徵之前,將兩張影象都變換到同乙個方向和同乙個尺度上,然後再在這個統一標準上來描述這個特徵。同樣的,如果在描述乙個特徵之前,將影象變換到同乙個仿射尺度或者投影尺度上,那麼就可以實現仿射不變性和投影不變性。分別稱為affine normalization 和 projected normalization.
總結:
特徵匹配的方法是先找出特徵顯著的特徵點(feature detect),然後再分別描述兩個特徵點(feature deor),最後比較兩個描述的的相似程度來判斷是否為同乙個特徵(feature match)。而在特徵描述之前如果能夠做到確定特徵的方向,則可以實現旋轉不變性(rotation invarient),如果能確定尺度,則可以實現尺度不變性(scale invarient)。
下面是我根據上面的方式對常用的feature所做的總結。
opencv 特徵提取以及特徵匹配
用到的庫檔案 include include using namespace std opencv 特徵檢測模組 include include include 提取影象中的特徵 關鍵點 與 關鍵點的描述子,分別用到了opencv庫中的cv featuredetector和cv descriptor...
特徵工程 特徵提取
特徵提取 將任意資料 如文字或影象 轉換為可用於機器學習的數字特徵 注 特徵值化是為了計算機更好的去理解資料 字典特徵提取 作用 對字典資料進行特徵值化 dictvectorizer.get feature names 返回類別名稱 from sklearn.feature extraction i...
文字特徵 特徵提取(一)
本文的內容主要來自於quora上的乙個問題,這裡簡單的做一下總結,感興趣的可檢視原帖 為了使用機器學習方法處理文字資料,需要找到適合的文字表示形式,對於傳統機器學習方法而言,常用的一種表示方法是將文件轉換為文件 詞項矩陣 document term matrix 具體就是將多篇文件轉換為資料幀 da...