我試圖優化我的哈里斯角點檢測器,以使其足夠快速,以便最終用於SLAM應用程序的實時特徵提取。優化哈里斯角點檢測器
傳統的Harris角點檢測步驟如下:
- 計算圖像導數(梯度)Ix和Iy使用圖像卷積核(k_dx和k_dy)。
- 計算二階導數Ixx = Ix^2,Iyy = Iy^2和Ixy = Ix * Iy。
- 使用高斯內核對來自步驟2的三個二階導數進行濾波(k_gaussian)。
- 使用文獻中所述的公式計算Harris響應。
到目前爲止好。我已經實現了上述步驟並且有一個工作程序。但是,我們知道,卷積是一個交換代數,這意味着:
- F#G =克·F
- F#(克#H)=(F#克)#ħ
- F#( G + H)=(F#G)+(F#1H)
- 常數*(F#克)=(常數* F)#克
其中(#)是卷積運算。
所以實質上我們可以結合各種內核來減少計算時間。
我希望能夠利用這個優勢將步驟(1)中使用的圖像梯度內核與步驟(3)中使用的高斯內核相結合,以減少計算時間。不幸的是步驟(2)阻止我這樣做,如:
[(IM#k_dx)^ 2]#k_gaussian =! (IM#k_dx#k_gaussian)^ 2
其中IM是圖像。所以這兩個內核不能合併。
我的問題:有沒有辦法做到這一點,或者它根本不可能?如果不可能,那麼有沒有一種方法可以計算出一個組合內核,即近似於的真實答案。即使它很差近似值,也可能會降低計算成本。
如果您想知道,我已經在使用CUDA在GPU上執行圖像卷積並且角落探測器已經相當快。但我需要進一步改進以便爲剩餘的SLAM算法分配更大的時間範圍。
已經有一個很好的答案。有兩件事情需要注意:(a)選擇一個針對GPU/CUDA優化的特徵檢測器。 (b)過早優化。如果角落探測器速度很快,如果將速度加倍,您將獲得多少收益?聽起來它可能會從5%的時間移動到2.5%的時間...... – Unapiedra 2014-10-20 15:57:49