2016-09-25 96 views
0

相同顏色的組斑點我擁有所有圖像中的每個白色像素的[x, y]值的陣列。我想基本上將這些像素分組爲單獨的數組,如果某些白色像素斷開連接,並且是不同於其他組的一部分。JS - 基於距離

換句話說,設想與一種白色斑點的左側和另一白色斑點,以(通過任何白色像素連接相隔一定距離的和不)右側的紅色圖像。

我想所有白色像素的原始陣列分成兩個陣列,一個表示用於第一斑點白色像素和一個表示用於所述第二白色像素。這只是一個例子,可能會有一大塊白色或許多較小的白色斑點 - 它需要能夠適用於所有情況。

我的第一個想法是使用DBSCAN作爲https://github.com/uhho/density-clustering的一部分來識別單獨的「blob」或「clusters」,但不幸的是,這不起作用,因爲我的圖像可能很大,並且可能有超過100,000個像素需要羣集(我需要這個操作在幾ms內運行)。

有一些其他的方式來處理這個或使用更快的聚類算法?

回答

0

聚類這裏是錯誤的工具 - 它太複雜(因而昂貴)。

你所尋找的被稱爲連接組件。 DBSCAN基於連接的組件,但功能超出您的需求。

+0

好的 - 你知道JavaScript中連接組件的任何實現嗎?此外,我不是簡單地試圖看看這些斑點是否連接 - 我試圖看看它們在所有點上是否至少隔開了「n」的距離。換句話說,如果blob是凹的,並且在某個點它非常接近另一個blob(由'n'確定),那麼它們不應該被認爲是兩個斑點,而應該被認爲是一個斑點。 – abagshaw

+0

圖書館的建議在這裏是題外話題。另外,我絕對不會爲此使用庫,而是直接在問題上實現它,因此它是快速和可定製的。這不是什麼難事,你需要一個圖書館。事實上,一個庫可能意味着您必須花費更多的精力將數​​據從模型A轉換爲模型B並返回,而不僅僅是您自己實現算法。 –

+0

好的確定這是有道理的。然而,再次將基於距離的「斑點」或「組件」分類爲獨立的問題?我只能想到在將斑點分開後,通過歐幾里德距離將所有外邊緣點與所有其他外邊緣點進行比較,但我會認爲效率非常低。 – abagshaw