Önce temel bilgiler:
Ortalama Kayma segmentasyonu, yerelleştirilmiş nesnelerde gölgeleme veya tonalite farklılıklarını sönümlemek için çok yararlı olan yerel bir homojenizasyon tekniğidir. Bir örnek birçok kelimeden daha iyidir:
Eylem: her pikseli bir aralık-r mahallesindeki ve değeri d mesafesi içinde olan piksellerin ortalamasıyla değiştirir.
Ortalama Kayma genellikle 3 girdi alır:
- Pikseller arasındaki mesafeleri ölçmek için bir mesafe işlevi. Genellikle Öklid mesafesi, ancak başka herhangi bir iyi tanımlanmış mesafe işlevi kullanılabilir. Manhattan uzaklık bazen başka kullanışlı bir seçimdir.
- Bir yarıçap. Bu yarıçap içindeki tüm pikseller (yukarıdaki mesafeye göre ölçülür) hesaplama için dikkate alınacaktır.
- Değer farkı. R yarıçapı içindeki tüm piksellerden, ortalamayı hesaplamak için yalnızca değerleri bu fark dahilinde olanları alacağız.
Lütfen algoritmanın sınırlarda iyi tanımlanmadığını, bu nedenle farklı uygulamaların size burada farklı sonuçlar vereceğini unutmayın.
Doğru matematiksel gösterim olmadan gösterilmeleri imkansız olduğundan, StackOverflow'da bulunmadığından ve ayrıca başka yerlerde iyi kaynaklardan bulunabildiklerinden , burada kanlı matematiksel ayrıntıları tartışmayacağım .
Matrisinizin merkezine bakalım:
153 153 153 153
147 96 98 153
153 97 96 147
153 153 147 156
Yarıçap ve mesafe için makul seçeneklerle, dört merkez piksel 97 değerini (ortalamaları) alacak ve bitişik piksellerden farklı olacaktır.
Mathematica'da hesaplayalım . Gerçek sayıları göstermek yerine, bir renk kodlaması göstereceğiz, böylece ne olduğunu anlamak daha kolay:
Matrisiniz için renk kodlaması:
Sonra makul bir Ortalama Değişim alırız:
MeanShiftFilter[a, 3, 3]
Ve biz alırız:
Tüm merkez elemanlarının eşit olduğu yer (97, BTW).
Daha homojen bir renk elde etmeye çalışarak Mean Shift ile birkaç kez yineleyebilirsiniz. Birkaç yinelemeden sonra, kararlı, izotropik olmayan bir konfigürasyona ulaşırsınız:
Şu anda, Mean Shift'i uyguladıktan sonra kaç "renk" alacağınızı seçemeyeceğiniz açık olmalıdır. Öyleyse, nasıl yapılacağını gösterelim, çünkü bu, sorunuzun ikinci kısmı.
Çıktı kümelerinin sayısını önceden ayarlayabilmeniz için ihtiyacınız olan şey, Kmeans kümelemesi gibi bir şeydir .
Matrisiniz için şu şekilde çalışır:
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}}
Veya:
Bu önceki sonucumuza çok benziyor, ancak görebileceğiniz gibi, şimdi sadece üç çıktı seviyemiz var.
HTH!