2

如何將2D圖像有效地分割爲相似值的斑點?給定的輸入是一個n數組整數,其中包括非灰色像素的色調和灰色像素的亮度。如何有效地將2D圖像分割成相似值的區域/斑點?

我正在寫一個使用Java的虛擬移動機器人,我正在使用分段來分析地圖以及攝像機的圖像。這是Computer Vision中的一個衆所周知的問題,但是當它在機器人性能上很重要,所以我想要一些輸入。算法是重要的,所以你可以用任何語言發佈代碼。

回答

3

我會下樣,在色彩空間和像素數量上,使用視覺方法(可能是meanshift)並放大結果。

這很好,因爲向下取樣也增加了對噪聲的魯棒性,並使得它更有可能獲得有意義的分段。

如果需要平滑度,可以使用填充來平滑邊緣。

還有一些想法(迴應你的評論)。

1)您在下采樣時混合了嗎? y [i] =(x [2i] + x [2i + 1])/ 2這應該消除噪音。

2)你想要多快?

3)您是否嘗試過動態均值漂移(也谷歌的動態X所有算法X)

+0

+1。這實際上是我嘗試的第一件事,但是1.我的原始圖像很小(100x100),我想保留blob和2的大小。當它拾起噪點時,它會得到增強。在具有大量漸變的實際情況下,這將是一個好主意。 – 2008-12-10 09:19:56

+0

1.在下采樣過程中我沒有混合,但是我確實在整個圖像上放置了高斯模糊以預先減小微小的噪點。 2.我沒有具體的目標,但更快意味着機器人更新頻繁。不,聽起來比洪水更冷。 – 2008-12-10 11:02:15

0

我現在擁有的一切:

  1. 製作一個與輸入大小相同的緩衝區圖像,初始化爲UNSEGMENTED
  2. 對於圖像中相應緩衝區值不是UNSEGMENTED的每個像素,使用像素值對緩衝區進行洪泛。

    a。泛洪的邊界檢查通過檢查像素是否在原始像素值的EPSILON(當前設置爲10)內完成。

    b。 Flood filling algorithm

可能的問題:

的2.A中的邊境檢查被稱爲在洪水填充算法多次。如果我可以使用邊緣檢測預先計算邊界,我可以將它變成查找,但這可能會增加比當前檢查更多的時間。

private boolean isValuesCloseEnough(int a_lhs, int a_rhs) { 
    return Math.abs(a_lhs - a_rhs) <= EPSILON; 
} 

可能增強:

不是檢查UNSEGMENTED每一個像素的,我可以隨機挑選了幾個點。如果你期望10個左右的斑點,按照這個順序選擇隨機點就足夠了。缺點是你可能會錯過一個有用但很小的團隊。

2

不知道這是太有效率,但你可以嘗試使用Kohonen neural network(或自組織映射?; SOM)對相似的值進行分組,每個像素包含原始顏色和位置,只有顏色用於Kohohen分組。

您應該在實施前仔細閱讀,因爲我對Kohonen網絡的瞭解儘可能多地用於分組數據 - 所以我不知道您的方案的性能/可行性選項是什麼。

還有Hopfield Networks。他們可以根據我閱讀的內容而改編成分組。

0

看看Eyepatch(eyepatch.stanford.edu)。它應該在調查階段通過提供各種可能的分段濾波器來幫助你。

相關問題