2014-10-19 48 views
2

我試圖優化我的哈里斯角點檢測器,以使其足夠快速,以便最終用於SLAM應用程序的實時特徵提取。優化哈里斯角點檢測器

傳統的Harris角點檢測步驟如下:

  1. 計算圖像導數(梯度)Ix和Iy使用圖像卷積核(k_dxk_dy)。
  2. 計算二階導數Ixx = Ix^2,Iyy = Iy^2和Ixy = Ix * Iy。
  3. 使用高斯內核對來自步驟2的三個二階導數進行濾波(k_gaussian)。
  4. 使用文獻中所述的公式計算Harris響應。

到目前爲止好。我已經實現了上述步驟並且有一個工作程序。但是,我們知道,卷積是一個交換代數,這意味着:

  1. F#G =克·F
  2. F#(克#H)=(F#克)#ħ
  3. F#( G + H)=(F#G)+(F#1H)
  4. 常數*(F#克)=(常數* F)#克

其中(#)是卷積運算。

所以實質上我們可以結合各種內核來減少計算時間。
我希望能夠利用這個優勢將步驟(1)中使用的圖像梯度內核與步驟(3)中使用的高斯內核相結合,以減少計算時間。不幸的是步驟(2)阻止我這樣做,如:
[(IMk_dx)^ 2]#k_gaussian =! (IMk_dxk_gaussian)^ 2

其中IM是圖像。所以這兩個內核不能合併。

我的問題:有沒有辦法做到這一點,或者它根本不可能?如果不可能,那麼有沒有一種方法可以計算出一個組合內核,即近似於的真實答案。即使它很差近似值,也可能會降低計算成本。

如果您想知道,我已經在使用CUDA在GPU上執行圖像卷積並且角落探測器已經相當快。但我需要進一步改進以便爲剩餘的SLAM算法分配更大的時間範圍。

+0

已經有一個很好的答案。有兩件事情需要注意:(a)選擇一個針對GPU/CUDA優化的特徵檢測器。 (b)過早優化。如果角落探測器速度很快,如果將速度加倍,您將獲得多少收益?聽起來它可能會從5%的時間移動到2.5%的時間...... – Unapiedra 2014-10-20 15:57:49

回答

2

使用卷積的內核的直接組合是不可能的。 Ixx = Ix^2,Iyy = Iy^2和Ixy = Ix * Iy不是通過卷積找到的(它不是線性的)。

優化的一些技巧可以在「LOCOCO:低複雜度角探測器」中找到