2013-04-11 82 views
9

我正在開發一個應用程序,使用SIFT + RANSAC和Homography來查找對象(OpenCV C++,Java)。我面臨的問題是RANSAC表現不佳的情況。SIFT匹配和識別?

由於這個原因,我想嘗試一下SIFT的作者說的非常好:投票。

我讀過,我們應該在4維特徵空間,其中4個維度是投票:

  • 位置[X​​,Y](有人說翻譯中)
  • 規模
  • 方向

雖然與OpenCV中很容易拿到賽scaleorientation有:

cv::Keypoints.octave 
cv::Keypoints.angle 

我很難理解我如何計算位置。

我發現了一個interesting slide其中只有one match我們可以得出一個邊界框:

但我不明白我怎麼能繪製邊框只有一個匹配。任何幫助?

回答

5

您正在尋找最大的一套適合從圖片1至2圖像幾何變換在這種情況下匹配的特徵,它是相似變換,它有4個參數:翻譯(dx, dy),規模變化ds和旋轉d_theta

比方說,你已經匹配功能:從圖像1和F2 F1從圖像2.設(x1,y1)是F1的圖像1的位置,讓s1是其規模,並讓theta1是它的方向。同樣,對於f2,您有(x2,y2),s2theta2

兩個功能之間的翻譯是(dx,dy) = (x2-x1, y2-y1)

兩個特徵之間的比例變化是ds = s2/s1

兩個功能之間的旋轉是d_theta = theta2 - theta1

所以,dxdyds,並且d_theta是你的霍夫空間的尺寸。每個bin對應於一個相似性轉換。

一旦你執行了Hough投票,並找到最大bin,那麼bin會給你一個從圖像1到圖像2的轉換。你可以做的一件事就是取出圖像1的邊界框並使用該轉換對其進行轉換:將相應的平移,旋轉和縮放應用到圖像的角落。通常,將參數打包到變換矩陣中,並使用齊次座標。這將爲您提供圖像2中與您檢測到的對象相對應的邊界框。

+0

我已經編輯了答案。 – Dima 2013-04-11 14:34:10

+1

只需一次匹配,就不需要霍夫變換。您將x和y(平移)的差異,方向(旋轉)的差異以及比例(比例)的差異考慮在內。然後你把它們放到矩陣中。 – Dima 2013-04-11 20:26:27

2

要完成Dima的,需要補充的是,圖4D霍夫空間被量化爲一個(可能是小的)數目的4D盒,其中每個盒對應於由它的中心給出的simiéarity。

然後,對於通過特徵的暫定匹配獲得的每個可能的相似性,將1添加到4D空間中的相應框(或單元)中。輸出相似性由具有更多選票的單元給出。

爲了computethe從1場變換,只是用迪馬的公式在他的回答。對於幾對比賽,你可能需要使用一些最小二乘擬合。

最後,變換可以應用功能cv::warpPerspective(),其中透視矩陣的第三行設置爲[0,0,1]

+0

這並未解釋如何繪製邊界框僅具有一個單一匹配 – dynamic 2013-04-11 13:38:58

+0

邊界框是通過將模型圖像上的最終相似性(從1個匹配或從霍夫投票獲得)的藍色和黃色的盒,然後繪製它繪製在新形象中。 – sansuiso 2013-04-11 14:13:53

+0

你可以發表一個關於如何鈣化最終相似度矩陣的例子(只考慮一個匹配)? – dynamic 2013-04-11 14:54:51

2

使用Hough變換時,可創建一個存儲模板質心((w/2,h/2)或藉助中心矩)的每個要素的位移矢量的簽名。

E.g.對於在模板上找到的10個SIFT特徵,根據模板中心的相對位置是vector<{a,b}>。現在,讓我們在查詢圖像中搜索這個對象:在查詢圖像中找到的每個SIFT特徵,與模板10中的一個匹配,投射到其對應的質心。

votemap(feature.x - a*, feature.y - b*)+=1其中a,b對應於該特定的特徵向量。

如果某些在同一點成功施放這些功能(集羣是必要的),你已經找到一個對象實例。

enter image description here

簽名和投票是相反的過程。我們假設V=(-20,-10)。因此,在搜索新穎的圖像時,當找到兩個匹配的時候,我們檢測它們的方向和大小並分別投票。例如。對於正確的箱形質心將離開SIFT特徵V'=(+20*0.5*cos(-10),+10*0.5*sin(-10)),因爲它的尺寸是一半並旋轉-10度。

+0

你是什麼意思「一場比賽」?匹配功能的性質是什麼?點(x,y)或區域(x,y,a,b,theta)就像例子中的黃色框? – William 2013-04-11 13:55:02

+0

然後,你就必須包括SIFT ** **描述的特徵,並從DescriptorMatcher提取匹配的補丁旋轉和縮放。 – William 2013-04-12 07:11:58