基礎知識第一:
均值漂移分割是局部均勻化技術,其是用於局部對象阻尼陰影或色調的差異是非常有用的。 一個例子是比許多話更好:
![enter image description here](https://i.stack.imgur.com/jQyzF.png)
操作:替換每個像素具有一介於-R附近的像素的平均值和其值是一個距離d內。
均值漂移通常需要3個輸入:
- 用於測量像素之間的距離的距離函數。通常可以使用歐幾里得距離,但可以使用任何其他明確定義的距離函數。有時候Manhattan Distance是另一個有用的選擇。
- 半徑。該半徑內的所有像素(根據上述距離測量)將計入該計算。
- 值差異。從半徑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](https://i.stack.imgur.com/rCDFA.png)
然後我們採取合理的平均換檔:
MeanShiftFilter[a, 3, 3]
而我們得到:
![enter image description here](https://i.stack.imgur.com/tS9Rg.png)
其中所有中心元素相等(至97,BTW)。
您可以使用Mean Shift迭代多次,嘗試獲得更均勻的着色。經過幾次反覆,你到達一個穩定的非各向同性的配置:
![enter image description here](https://i.stack.imgur.com/laGV7.png)
在這個時候,應該明確的是,你不能選擇你將平均後移多少「顏色」獲得。所以,讓我們展示如何去做,因爲這是你問題的第二部分。
你需要能夠預先設置輸出簇的數量就像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](https://i.stack.imgur.com/IS5D1.png)
這非常類似於我們以前的結果,但你可以看到,現在我們只有三個產出水平。
HTH!
三個層次?我看到的數字大約在100和150左右。 – John 2011-01-28 19:05:23
作爲一個分段,我認爲中間的數字將遠離要包含在邊界的邊界數字。這就是爲什麼我說3. 我可能是錯的,因爲我真的不明白這種類型的segmenation如何工作。 – Sharpie 2011-01-28 19:12:10
哦...也許我們正在採取不同的意思。都好。 :) – John 2011-01-28 19:15:39