Ortalama Kaydırma kullanılarak Görüntü Segmentasyonu açıklandı


107

Mean Shift segmentasyonunun gerçekte nasıl çalıştığını anlamama yardımcı olabilir mi?

İşte az önce oluşturduğum 8x8 matris

  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

Yukarıdaki matrisi kullanarak Ortalama Kayma segmentasyonunun 3 farklı sayı seviyesini nasıl ayıracağını açıklamak mümkün mü?


Üç seviye mi? 100 ve 150 civarında rakamlar görüyorum.
John

2
Bu bir ayrım olduğu için ortadaki sayıların sınırın o bölümüne dahil edilecek kenar sayılarından çok uzakta olacağını düşündüm. Bu yüzden 3 dedim. Bu tür bir ayrımın nasıl çalıştığını gerçekten anlamadığım için yanılıyor olabilirim.
Sharpie

Oh ... belki farklı anlamlara gelmek için seviyeleri alıyoruz. Hepsi iyi. :)
John

1
Kabul edilen cevabı beğendim ama bütün resmi gösterdiğini sanmıyorum. IMO bu pdf, ortalama kayma segmentasyonunu daha iyi açıklar (örnek olarak daha yüksek bir boyut alanı kullanmak, bence 2d'den daha iyidir). eecs.umich.edu/vision/teaching/EECS442_2012/lectures/…
Helin Wang

Yanıtlar:


204

Ö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:

görüntü açıklamasını buraya girin

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:

  1. 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.
  2. 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.
  3. 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ı:

görüntü açıklamasını buraya girin

Sonra makul bir Ortalama Değişim alırız:

MeanShiftFilter[a, 3, 3]

Ve biz alırız:

görüntü açıklamasını buraya girin

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:

görüntü açıklamasını buraya girin

Ş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:

görüntü açıklamasını buraya girin

Bu önceki sonucumuza çok benziyor, ancak görebileceğiniz gibi, şimdi sadece üç çıktı seviyemiz var.

HTH!


Görüntü için Ortalama kaymanın bir Matlab uygulaması var mı?
Kaushik Acharya


164

Ortalama Kaydırma segmentasyonu şu şekilde çalışır:

Görüntü verileri özellik alanına dönüştürülür özellik alanı

Sizin durumunuzda, sahip olduğunuz tek şey yoğunluk değerleridir, bu nedenle özellik uzayı yalnızca tek boyutlu olacaktır. (Örneğin, bazı doku özelliklerini hesaplayabilirsiniz ve sonra özellik alanınız iki boyutlu olur - ve yoğunluk ve dokuya göre segmentlere ayırırsınız )

Arama pencereleri özellik alanı üzerine dağıtılır görüntü açıklamasını buraya girin

Bu örnek için pencere sayısı, pencere boyutu ve ilk konumlar isteğe bağlıdır - belirli uygulamalara bağlı olarak ince ayar yapılabilen bir şey

Ortalama Kaydırma yinelemeleri:

1.) Her pencerede bulunan veri örneklerinin ORTALAMALARI hesaplanır görüntü açıklamasını buraya girin

2.) Pencereler, önceden hesaplanan araçlarına eşit konumlara KAYDEDİLİR görüntü açıklamasını buraya girin

1.) ve 2.) adımları yakınsamaya kadar tekrar edilir, yani tüm pencereler son konumlara yerleşir. görüntü açıklamasını buraya girin

Aynı konumlara gelen pencereler birleştirildi görüntü açıklamasını buraya girin

Veriler, pencere geçişlerine göre kümelenir görüntü açıklamasını buraya girin

... örneğin “2” konumunda sona eren pencereler tarafından geçilen tüm veriler, bu konumla ilişkili bir küme oluşturacaktır.

Yani, bu bölümleme (tesadüfen) üç grup üretecektir. Bu grupları orijinal resim formatında görmek belisarius'un cevabındaki son resim gibi görünebilir . Farklı pencere boyutları ve başlangıç ​​konumlarının seçilmesi farklı sonuçlar üretebilir.


her bir pikselin konumunu hesaba katarak uzay üç boyutlu olamaz mı?
Helin Wang

@HelinWang Evet, olabilir.
mlai

Pencerenin 1B özellik alanında nasıl konumlandırıldığını anlıyorum, ancak açıklamanızın, örneğin bir uzamsal arama mesafesi (ör. Piksel cinsinden) ve spektral mesafe (değer farkı) içeren ortalama kaydırma algoritmalarına nasıl uygulanabileceğini anlamıyorum. Dr. belisarius'un cevabında olduğu gibi. Bunu açıklar mısın?
Lennert

@Lennert Sorunuzu doğru anlarsam, esasen yapacağınız şey piksel konumlarını (x, y) özellikler olarak eklemek veya kümeleme alanına diğer konum tabanlı özellikler eklemektir. Belisarius'un cevabı Mathematica'da biraz daha karmaşık bir şey yapabilecek belirli bir uygulamaya atıfta bulunuyor gibi görünüyor. Bu yardımcı olur mu?
mlai

1
@Lennert Evet, anladın galiba. Cevabımı neden kafa karıştırıcı bulduğunuzu anlayabiliyorum. 'Pencerelerimi' iki boyutlu olarak çizdim ama aslında kümelemeyi sadece tek boyutlu spektral değerler üzerinde tasvir etmeye çalışıyordum. Üç boyutlu özellik uzayında ortalama kaydırma kümesini bir çizim veya animasyonla görselleştirmek oldukça güzel olurdu (Zaman
bulursam
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.