Arduino – Median Filtre Uygulaması (Median Filter)

Median Filtre Nedir?

Ortanca filtre olarak da bilinen bu filtre genellikle ses ve görüntü işlemede gürültülerden kurtulmak için kullanılır. Bir grup sayı dizisinden veya bir matris içerisinden ortalama değerler seçilip diğerlerinin elenmesiyle büyük farklılıklar temizlenmiş olur. Hareketli ortalamalar filtresinin aksine bu filtre lineer değildir. Genellikle görüntü işleme için kullanılır. Arduino görüntü işleme için uygun bir geliştirme kartı olmadığı için bu yazımızda da önceki filtre yazılarımızda kullandığımız tek boyutlu sensör verileri üzerinde çalışacağız. Şimdi filtrenin nasıl çalıştığına göz atalım. Bu şekilde algoritma da daha net anlaşılacaktır.

Median filtre kullandığımız LED bar ile mesafe gösterme projemize buradan ulaşabilirsiniz.

Median Filtre Nasıl Çalışır?

Bu yazımızda eş zamanlı median filtre uygulamasını göstereceğiz. Sesnsörden veri okunurken eş zamanlı olarak filtremiz çalışacaktır. Ham data üzerinde sinyal işleme yapılmayacaktır. Öncelikle sürekli veri okuduğunuz bir sistem düşünün. Belirli zaman aralıklarıyla sisteme sürekli veri girişi olmakta. Bu veriler içerisinde istenmeyen değerler de mevcut. Öncelikle bir buffer oluşturuyoruz. Şimdilik bu buffer boyutuna 5 diyelim. Bu sayı tek sayı olmak zorunda çünkü ortadaki değeri alacağız. İlk 5 değer okunduktan sonra bu 5 değeri küçükten büyüğe diziyoruz. Ortadaki değeri çıkış olarak veriyoruz. Sonra diziyi ilk haline getiriyoruz. Sağa kaydırma işlemi yaparak en eski değeri atıp yerine yeni değeri alıyoruz. Aynı işlemi buna da yapıyoruz. Sistem bu şekilde işliyor. Aşamaları şu şekilde (5 elemanlı Buffer dolduktan sonra):

Dizimiz şu şekilde olsun: G = {1,8,4,2,7}

  1. Dizimizi küçükten büyüğe sıralıyoruz => G = {1,2,4,7,8}
  2. Ortadaki değeri çıkışa veriyoruz => Ç = 4
  3. Diziyi eski haline getiriyoruz => G = {1,8,4,2,7}
  4. Sağa kaydırma yapıyoruz ve yeni değeri ekliyoruz (Yeni değer 3 olsun) => G = {3,1,8,4,2}

Aynı işlemleri bu dizi için de yapıyoruz.

Median filtre diğer anlattığımız filtrelerin aksine sadece varolan değerler ile düzeltme yapabilir. Yani çıkışta göreceğimiz her değer aslında bir şekilde mutlaka girişte görülmüş değerlerdir. Dizi içerisindeki ekstrem değerler yukarıda da görüldüğü gibi filtre içerisinde hiçbir zaman ortalama eğer olamadıkları için çıkışa verilmemektedir. Burada dikkat edilmesi gereken buffer büyüklüğüdür. Buffer büyüklüğüyle ilgili bilgi için Hareketli Ortalamalar Filtresi yazımıza bakabilirsiniz.

Arduino ile Median Filtre

Median Filtre’yi Arduino ile rahatlıkla kullanabilirsiniz. Diğer filtre yazılarımızda olduğu gibi burada da ivme sensöründen değerler okuduk. Filtreyi fonksiyon haline getirdik. Sizler de uygulamalarınızda filtreyi rahatlıkla kullanabilirsiniz. Arduino kodları işe şu şekilde:

 

TEST SONUÇLARI

Kullanılan ivmeölçer -16000 ila 16000 arası değer vermektedir. Yapılan testlerde saniyede 100 örnek alınmış ve sensör hızlı bir şekilde X ekseni üzerinde döndürülmüştür. Elde edilen sonuçlar X ekseninin sonuçlarıdır. Ölçüm değerlerinden bazıları (-16000) – (160000) aralığında olmamakla birlikte çoğu zaman gürültülüdür. Filtre sonuçları aşağıda verilmiştir:

Sonuç-1: Test 3.1 Saniye Sürmüştür – 310 Değer

Sonuç-2: Test 3.14 Saniye Sürmüştür – 314 Değer

Sonuç-3: Test 2.79 Saniye Sürmüştür – 279 Değer

Test sonuçlarında da görüldüğü gibi median filtre oldukça başarılı bir iş çıkarmıştır. Sizler de proje ve uygulamalarınızda rahatlıkla kullanabilirsiniz. Sorunuz olursa lütfen yorumlarda belirtin. İyi eğlenceler!

 

“Arduino – Median Filtre Uygulaması (Median Filter)” Hakkında 2 Yorum

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.