2011-01-28 27 views
93

任何人都可以請幫我理解Mean Shift分割實際上是如何工作的嗎?使用Mean Shift進行圖像分割解釋

這裏是我編造的

103 103 103 103 103 103 106 104 
    103 147 147 153 147 156 153 104 
    107 153 153 153 153 153 153 107 
    103 153 147 96 98 153 153 104 
    107 156 153 97 96 147 153 107 
    103 153 153 147 156 153 153 101 
    103 156 153 147 147 153 153 104 
    103 103 107 104 103 106 103 107 

使用上面的矩陣可以解釋移位如何均值分割將會分離3個不同層次的數字的8×8矩陣?

+0

三個層次?我看到的數字大約在100和150左右。 – John 2011-01-28 19:05:23

+2

作爲一個分段,我認爲中間的數字將遠離要包含在邊界的邊界數字。這就是爲什麼我說3. 我可能是錯的,因爲我真的不明白這種類型的segmenation如何工作。 – Sharpie 2011-01-28 19:12:10

+0

哦...也許我們正在採取不同的意思。都好。 :) – John 2011-01-28 19:15:39

回答

179

基礎知識第一:

均值漂移分割是局部均勻化技術,其是用於局部對象阻尼陰影或色調的差異是非常有用的。 一個例子是比許多話更好:

enter image description here

操作:替換每個像素具有一介於-R附近的像素的平均值和其值是一個距離d內。

均值漂移通常需要3個輸入:

  1. 用於測量像素之間的距離的距離函數。通常可以使用歐幾里得距離,但可以使用任何其他明確定義的距離函數。有時候Manhattan Distance是另一個有用的選擇。
  2. 半徑。該半徑內的所有像素(根據上述距離測量)將計入該計算。
  3. 值差異。從半徑r內的所有像素中,我們將只取那些在這個差值內的值來計算平均值

請注意算法在邊界處沒有很好的定義,所以不同的實現會給你不同的結果。

我不會在這裏討論血淋淋的數學細節,因爲如果沒有適當的數學符號,它們是不可能顯示的,在StackOverflow中不可用,還因爲它們可以在from good sources elsewhere找到。

讓我們看看你的矩陣中心:

153 153 153 153 
147 96 98 153 
153 97 96 147 
153 153 147 156 

隨着半徑和距離合理的選擇,這四個中心的像素將獲得的97(其平均值)的值,將不同形式的相鄰像素。

讓我們來計算它在Mathematica。相反,顯示實際數字,我們會顯示一個顏色編碼,所以它更容易明白髮生了什麼:

的顏色編碼爲您的矩陣是:

enter image description here

然後我們採取合理的平均換檔:

MeanShiftFilter[a, 3, 3] 

而我們得到:

enter image description here

其中所有中心元素相等(至97,BTW)。

您可以使用Mean Shift迭代多次,嘗試獲得更均勻的着色。經過幾次反覆,你到達一個穩定的非各向同性的配置:

enter image description here

在這個時候,應該明確的是,你不能選擇你將平均後移多少「顏色」獲得。所以,讓我們展示如何去做,因爲這是你問題的第二部分。

你需要能夠預先設置輸出簇的數量就像Kmeans clustering

它運行這種方式對你的矩陣:

b = ClusteringComponents[a, 3] 

{{1, 1, 1, 1, 1, 1, 1, 1}, 
{1, 2, 2, 3, 2, 3, 3, 1}, 
{1, 3, 3, 3, 3, 3, 3, 1}, 
{1, 3, 2, 1, 1, 3, 3, 1}, 
{1, 3, 3, 1, 1, 2, 3, 1}, 
{1, 3, 3, 2, 3, 3, 3, 1}, 
{1, 3, 3, 2, 2, 3, 3, 1}, 
{1, 1, 1, 1, 1, 1, 1, 1}} 

或者:

enter image description here

這非常類似於我們以前的結果,但你可以看到,現在我們只有三個產出水平。

HTH!

143

均值漂移分割的工作是這樣的:

的圖像數據轉換成特徵空間 feature space

在你的情況,你所有的只是強度值,所以特徵空間不僅會是一維的。 (你可能會計算一些紋理特徵,例如,然後你的功能空間是二維的 - 你會被分割基於強度紋理)

搜索窗口分佈在特徵空間 enter image description here

窗口,窗口大小,和初始位置的數目是任意的在這個例子中 - 這可以是微調依賴於特定的應用

均值移位迭代:

1。),每個窗口內的數據樣本的裝置被計算 enter image description here

2.)窗口被轉移到等於它們的先前計算裝置的位置 enter image description here

步驟1.)和2- 。)被重複直至收斂,即所有的窗戶都在最後的位置 enter image description here

,關於最終的結算窗口相同的位置根據所述窗口遍歷 enter image description here

...例如合併 enter image description here

的數據被羣集所有被窗口遍歷的數據,例如位置「2」,將形成與該位置關聯的羣集。

所以,這種分割將(巧合)產生三組。以原始圖像格式查看這些組可能看起來像the last picture in belisarius' answer。選擇不同的窗口大小和初始位置可能會產生不同的結果。