2009-09-01 46 views
4

我一直在想出一個興趣點檢測算法,這是我想出的:您如何看待這種興趣點檢測算法?

你一次通過X軸和Y軸3n像素創建3n x 3n正方形。

對於3n x 3n正方形中間的nxn正方形(我們稱之爲平方Z),將R,G和B值取平均值並舍入爲預設值以限制顏色數量,是正方形將被視爲的顏色。

對於8個周圍的n×n個正方形也是這樣。

之後,如果方塊Z的顏色與周圍的方塊相比較,如果它與8個周圍方塊中的x相匹配,其中x = = + + + + + + +,那麼這是興趣點(檢測到角落)。

依次類推,直到所有的圖像被覆蓋。

n越大,圖像掃描得越快,檢測的準確性越低,反之亦然。

據推測,這可以檢測出「文字角落」,即實際上可以在圖像上看到的角落。

您對這種算法有什麼看法?它有效嗎?它是否可以用於手持設備上的實時視頻流(從相機說)?

回答

10

我很抱歉地說我不認爲這可能會很好。你的算法看起來有點像Moravec's algorithm的簡單版本,它本身就是最簡單的角點檢測算法之一。測試的硬編碼限制可以有效地使您的邊緣測試成爲階梯式函數,而不像諸如求和方差等方法。這幾乎肯定會給你的檢測功能帶來不連貫性(在他們應該有的時候不匹配的角落),對於某些值。

您也有與Moravec相同的問題,即如果邊緣與被考慮的鄰居方向成一個角度,則不會被檢測到。開發算法很有趣,如果這不是一個關鍵業務項目,那麼通過一切手段,進行修補和試驗(並且不要被我的評論推遲!)。但事實是,對於幾乎所有的實際問題,幾乎可以肯定的解決任務的更好算法已經存在。真正的挑戰是確定如何以最好的方式建模您的問題,以便您可以使用由專家設計的現有的,易於理解的方法來解決問題。

特別是,對邊緣案例和最壞情況運行時的健壯識別和分析是一項棘手的業務;除非你是專業的算術師,否則你很可能會發現這很困難。但我當然鼓勵你通過嘗試來發現這一點。 nlucaroni提到了一些優秀的問題作爲分析的出發點。

+0

非常感謝你:) 這是一個無標記的增強現實系統,我想使。 我已經看過很多我可以使用的圖書館,但所有好的都不是免費的。我試過SIFT和SURF,但他們都很慢,所以我決定自己做。 我打開了一張sop標誌(我將要檢測的其中一個東西)的圖片,我在「有趣的點」上放點,他們原來是角落。我試圖想出一個算法來檢測它們,這就是我所得到的。 如果你知道任何適合此目的的算法,請讓我知道:) 再次感謝:) – 2009-09-01 15:53:21

+0

聽起來很有趣。我建議在答案中鏈接維基百科頁面,並將其作爲一個好的起點:http://en.wikipedia.org/wiki/Edge_detection。你的代碼在圖像上運行一個3x3的內核。你可以用基本框架這樣的方法做很多圖像處理技巧。祝你好運! – 2009-09-01 16:37:02

+0

只是爲了記錄,我用C#試了一下..我不能說我對它滿意,但我確實很高興我可以寫一個興趣點檢測算法,一個糟糕的,也就是說。 檢測400x600圖片中的所有點需要將近1秒的時間。 儘管如此,這是一次很好的學習經歷。 謝謝你ire_and_curses,我會看看那個頁面。 上帝保佑:) – 2009-09-01 20:00:08

2

爲什麼不試試看看它是否按照您期望的方式工作?聽起來應該是這樣。性能與其他方法相比如何?算法的複雜性是什麼?與其他人相比效率高嗎?哪裏可以改進?預計會出現什麼樣的假陽性和假陰性?基於我計劃使用的數據,它們是否合理?應該使用什麼閾值來比較周圍的正方形? ...

這是你應該做的,而不是我們。

1

我建議你看看SIFT算法。它是圖像中興趣點的事實標準。不幸的是,它也有專利,因爲它非常好。

如果您對SIFT的實時版本感興趣,您可以在GPU上運行它,但此時它的實驗性很強。請注意,如果您正在開發商業應用程序,則必須首先購買使用SIFT的許可證或獲得David Lowe的批准。

+0

OP已經嘗試過SIFT - 請參閱我的回答。 – 2009-09-02 08:03:18

+0

是的,謝謝你的指針。他對SIFT的主要抱怨是速度太慢,你可以用更多的血液和更多的汗水將它運行在GPU或FPGA上,讓它跑得更快。 – ldog 2009-09-02 08:19:02

+0

感謝您的回答,但我不認爲在GPU上運行它是一種選擇,它有點不好,因爲我沒有提到這個,但最終目標是在Android上運行它。 – 2009-09-02 17:59:02