2009-08-17 431 views
2

我遇到過許多AR庫/ SDK/APIs,它們都是基於標記的,直到我找到this video,從描述和評論中,它看起來像他使用SIFT來檢測對象並遵循它。使用SIFT增強現實

我需要做的是爲Android,所以我會需要在純Java的完整實現SIFT的。

我願意這樣做,但我需要知道SIFT如何用於增強現實第一。

我可以利用您提供的任何信息。

回答

10

在我看來,想要實現SIFT用於便攜式設備是瘋狂。 SIFT是一種圖像特徵提取算法,它包含複雜的數學運算,並且肯定需要大量的計算能力。 SIFT也獲得專利。

不過,如果你確實要完成這個任務出去,你首先應該做的相當一些研究。你需要檢查的東西,如:

  • SIFT的任何變體增強的性能,其中包括各地不同的算法
  • 我會建議尋找到SURF這是非常強大和更更快(但仍那些可怕的一個算法)
  • Android NDK(以後我會解釋)
  • 很多很多的出版物

爲什麼的Android NDK的?因爲通過在Java應用程序正在使用的C庫中實現算法,您可能會獲得更爲顯着的性能提升。

開始什麼之前,請確保您做研究事業這將是半路認識到的圖像特徵提取算法只是太多的Android手機太可惜了。這是一個非常努力的過程,它實現了這樣一種算法,可以提供良好的結果並在可接受的時間內運行,更不用說使用它來創建AR應用程序。

正如你將如何使用,對於AR,我猜你運行的圖像算法得到的描述必須針對與保存在中央數據庫中的數據進行匹配。然後結果可以顯示給用戶。從SURF收集的圖像的特徵應該用來描述它,例如可以使用這些圖像進行識別。我並不是很有經驗,但網絡上總是有資源。你可能想從一些通用的東西開始,比如Object Recognition

祝您好運:)的

+0

感謝您的回答。 我開始移植http://user.cs.tu-berlin.de/~nowozin/libsift/(libsift)以Java,但我想我現在需要找到一種替代。 所以我想我將不得不放棄這一點,並找到在Java或C++中的SURF實現(以防我選擇使用NDK)。 但是,我的問題是它可以如何用於AR。 – 2009-08-20 20:54:36

+0

爲你增加了一些更多的信息:) – alkar 2009-08-21 19:41:54

2

如果我在那裏你,我會考慮SIFT特徵如何(以及爲何)的作品(如前文所述的維基百科頁面提供了一個良好的科奇斯的解釋,併爲更多的細節檢查科學論文(鏈接到維基百科)),然後構建適合自己口味的自己的變體;即在您的應用程序所需的性能和CPU負載之間達到最佳平衡。

例如,我認爲高斯平滑可能會被一些更快的平滑方法所取代。

此外,當你建立你自己的變種,你沒有任何與專利(目前已經有很多變種,比如GLOH)。

+0

謝謝,我會給你一個鏡頭。 – 2009-09-28 16:38:06

2

我曾嘗試網上瀏覽了330MHz的Symbian手機,它仍然是,即使所有的優化和查找表太慢。而SIFT應該會更慢。現在每個人都使用FAST進行移動。無論如何,特徵提取並不是最大的問題。通信和清除誤報比較困難。 快速鏈路 http://svr-www.eng.cam.ac.uk/~er258/work/fast.html

1

我建議你看在OpenCV庫已經實現的功能,其中包括SURF,MSER和其他人開始:

http://opencv.willowgarage.com/documentation/cpp/feature_detection.html

這可能是足以讓你的應用程序並且比SIFT更快。如上所述,SIFT獲得專利。

此外,首先在您的移動平臺上進行性能測試,只需在每一幀中提取功能,這樣您就可以瞭解哪些功能可以實時運行或不運行。

1

您是否嘗試過在Android端口的OpenCV的執行速度快?我測試過它,它運行得非常快。

您也可以計算所檢出的FAST關鍵點減少直方圖描述符。我聽說過3x3而不是SIFT的標準4x4。如果您使用NEON指令對其進行大量優化,那麼它具有實時工作的良好機會。否則,我會推薦一些快速而簡單的方法,例如在非常快速的關鍵點周圍提供補丁的平方或絕對差異。

SIFT也不是萬能的。對於實時視頻應用程序,通常是矯枉過正。