Bilateral Filtresi

fav gif
Kaydet
Alıntıla
kure star outline

Görüntü işleme ve bilgisayarlı görü alanında, gürültü azaltma ve detay koruma arasında denge kurmak her zaman zor bir mesele olmuştur. Bu bağlamda, bilateral filtre (ikili filtre), hem gürültüyü etkili bir şekilde azaltan hem de görüntüdeki kenarları ve önemli detayları koruyan bir yöntem olarak öne çıkar. İlk kez 1998 yılında Tomasi ve Manduchi tarafından tanıtılan bu filtre, geleneksel filtreleme tekniklerinden farklı olarak yalnızca uzamsal yakınlığı değil, aynı zamanda piksel yoğunluklarının benzerliğini de dikkate alır.

Bilateral Filtre

Bilateral filtre, görüntü işlemede kullanılan doğrusal olmayan bir filtreleme yöntemidir. Temel amacı, bir görüntünün gürültüsünü azaltırken kenarlarını ve ince detaylarını korumaktır. Geleneksel filtreler (örneğin, Gaussian bulanıklaştırma), bir pikselin çevresindeki tüm pikselleri eşit şekilde ağırlıklandırarak bulanıklaştırma yapar ve bu süreçte kenarlar da yumuşar. Ancak bilateral filtre, bu sorunu çözmek için iki farklı ağırlık fonksiyonunu birleştirir:


  1. Uzamsal Yakınlık (Spatial Domain): Pikselin çevresindeki diğer piksellerle olan fiziksel mesafesini dikkate alır.
  2. Yoğunluk Benzerliği (Range Domain): Pikselin gri seviye veya renk değerinin çevresindeki piksellerle benzerliğini ölçer.


Bu çift yönlü yaklaşım, filtrenin yalnızca uzamsal olarak yakın olan pikselleri değil, aynı zamanda yoğunluk açısından benzer olan pikselleri de dikkate almasını sağlar. Örneğin, bir kenarın iki tarafındaki pikseller farklı yoğunluklara sahipse, filtre bu pikselleri birbirinden ayırarak kenarı korur.

Tarihsel Bağlam

Bilateral filtre, Carlo Tomasi ve Roberto Manduchi tarafından 1998’de "Bilateral Filtering for Gray and Color Images" başlıklı makalede tanıtılmıştır. Bu yöntem, o dönemde popüler olan Gaussian filtreleme gibi doğrusal tekniklerin eksikliklerini gidermek için geliştirilmiştir. Daha sonra, Sylvain Paris ve diğer araştırmacılar tarafından 2000’li yıllarda teorik ve pratik yönleriyle daha da geliştirilmiştir.

Bilateral Filtrenin Çalışma Mekanizması

​Bilateral filtrenin çalışma mantığı bir örnek üzerinden açıklanmak istendiğinde, gürültülü bir gri tonlamalı görüntünün belirli bir pikselin değerini filtrelenmiş haliyle hesaplanmasının istenmesi ele alınabilir.


Adım 1: Çevre Tanımlama: Pikselin etrafındaki bir pencere (örneğin, 5x5) seçilir.

Adım 2: Uzamsal Ağırlık Hesaplama: Her çevre pikselin merkez piksele olan mesafesine göre Gσs hesaplanır.

Adım 3: Yoğunluk Ağırlık Hesaplama: Her çevre pikselin yoğunluk farkına göre Gσr hesaplanır.

Adım 4: Ağırlıkların Çarpımı: Uzamsal ve yoğunluk ağırlıkları çarpılarak her piksel için bir toplam ağırlık elde edilir.

Adım 5: Ağırlıklı Ortalama: Çevre piksellerin değerleri, hesaplanan ağırlıklarla çarpılıp toplanır ve normalizasyon yapılır.


Bu süreç, filtrenin kenarları korumasını sağlar. Örneğin, bir kenarın yakınındaki piksellerin yoğunlukları çok farklıysa, Gσr ağırlığı küçük olacak ve bu piksellerin etkisi azalacaktır.

Bilateral Filtrenin Matematiksel Temelleri

Bilateral filtrenin çalışma prensibini anlamak için matematiksel formülasyonuna bakmak gerekir. Bir görüntüdeki her piksel için yeni bir değer hesaplanırken, filtre aşağıdaki formülle ifade edilir:

<span class="katex"><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.07847em;">I</span><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="mord">​</span><span class="mopen">(</span><span class="mord mathnormal">p</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.13889em;">W</span><span class="mord mathnormal">p</span><span class="mord">​1​</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mop op-symbol small-op" style="position:relative;top:0em;">∑</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.03588em;">q</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.05764em;">S</span><span class="mord">​</span><span class="mord mathnormal">G</span><span class="mord mathnormal" style="margin-right:0.03588em;">σ</span><span class="mord mathnormal">s</span><span class="mord">​​</span><span class="mopen">(</span><span class="mord">∥</span><span class="mord mathnormal">p</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.03588em;">q</span><span class="mord">∥</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">G</span><span class="mord mathnormal" style="margin-right:0.03588em;">σ</span><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="mord">​​</span><span class="mopen">(</span><span class="mrel">∣</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.07847em;">I</span><span class="mopen">(</span><span class="mord mathnormal">p</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.07847em;">I</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.03588em;">q</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∣</span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.07847em;">I</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.03588em;">q</span><span class="mclose">)</span></span></span></span>


Burada:

  • If(p): Filtrelenmiş piksel değeri (çıktı),
  • I(p): Orijinal piksel değeri (girdi),
  • p: İşlenen pikselin konumu,
  • q: Çevrede dikkate alınan pikselin konumu,
  • S: Pikselin çevresindeki alan,
  • Gσs: Uzamsal Gaussian ağırlık fonksiyonu,
  • Gσr: Yoğunluk Gaussian ağırlık fonksiyonu,
  • Wp​: Normalizasyon faktörü, Wp = <span class="katex"><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mop op-symbol small-op" style="position:relative;top:0em;">∑</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.03588em;">q</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.05764em;">S</span><span class="mord">​</span><span class="mord mathnormal">G</span><span class="mord mathnormal" style="margin-right:0.03588em;">σ</span><span class="mord mathnormal">s</span><span class="mord">​​</span><span class="mopen">(</span><span class="mord">∥</span><span class="mord mathnormal">p</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.03588em;">q</span><span class="mord">∥</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">G</span><span class="mord mathnormal" style="margin-right:0.03588em;">σ</span><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="mord">​​</span><span class="mopen">(</span><span class="mrel">∣</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.07847em;">I</span><span class="mopen">(</span><span class="mord mathnormal">p</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.07847em;">I</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.03588em;">q</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∣</span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mclose">)</span><span class="mord">.</span></span></span></span>

Uzamsal Ağırlık: Gσs

Uzamsal ağırlık, pikseller arasındaki Euclidean mesafesine bağlıdır ve şu şekilde tanımlanır:

Burada σs ​, uzamsal Gaussian’ın standart sapmasıdır ve filtrenin uzamsal etki alanını belirler. Büyük σs değerleri, daha geniş bir çevrenin dikkate alınmasına neden olur.


Yoğunluk Ağırlık: Gσr

​Yoğunluk ağırlığı, piksel değerleri arasındaki farka bağlıdır:


σr, yoğunluk farklarının ne kadar tolere edileceğini belirler. Küçük σr değerleri, yalnızca çok benzer yoğunluklara sahip piksellerin dikkate alınmasını sağlar.


Normalizasyon

Normalizasyon faktörü Wp ​, ağırlıkların toplamının 1’e normalize edilmesini sağlar. Bu, filtrenin enerji korumasını ve çıktı değerlerinin orijinal görüntüyle uyumlu olmasını garantiler.


Farklı σ değerlerine göre Gaus doğrusal filtreleme örneği (Kredi: Paris, Sl vd.)

Bilateral Filtrenin Avantajları ve Dezavantajları

Avantajları

  • Kenar Koruma: Geleneksel Gaussian bulanıklaştırmadan farklı olarak kenarları yumuşatmaz.
  • Gürültü Azaltma: Düşük ve orta seviyeli gürültüyü etkili bir şekilde temizler.
  • Esneklik: σs ve σr parametreleriyle kolayca ayarlanabilir.

Gaussian Filtresi ile Bilateral Filtre karşılaştırması (Kredi: AI Learning Centre)

Dezavantajları

  • Hesaplama Maliyeti: Doğrusal olmayan yapısı nedeniyle hesaplama açısından yoğun bir yöntemdir.
  • Parametre Hassasiyeti: Yanlış σ değerleri, yetersiz gürültü azaltma veya aşırı yumuşatma gibi sorunlara yol açabilir.
  • Halo Etkisi: Çok büyük σr değerleri, kenarların çevresinde istenmeyen parlaklık veya koyuluk (halo) sebebiyet verebilir.

Uygulama Alanları

Bilateral filtre, birçok alanda kullanılır:

  • Fotoğraf Düzenleme: Gürültüyü azaltarak görüntü kalitesini artırır.
  • Tıbbi Görüntüleme: MR veya CT taramalarında detayları korurken gürültüyü temizler.
  • Bilgisayarlı Görü: Nesne tespiti öncesi ön işleme adımı olarak kullanılır.

Bilateral Filtresi Uygulama Kodu

Bilateral filtesinin teorik temellerinin kodlamaya hazır hale gelebilmesi için sırasıyla görüntünün piksel piksel taranması, her piksel için bir pencere tanımlanması, uzamsal ve yoğunluk ağırlıklarının hesaplanması, ağırlıklı ortalamanın bulunup normalizasyon yapılması gerekmektedir.


Sen de Değerlendir!

0 Değerlendirme

Yazar Bilgileri

Avatar
YazarBeyza Nur Türkü16 Mart 2025 20:42

Etiketler

Tartışmalar

Henüz Tartışma Girilmemiştir

"Bilateral Filtresi" maddesi için tartışma başlatın

Tartışmaları Görüntüle

İçindekiler

  • Bilateral Filtre

    • Tarihsel Bağlam

  • Bilateral Filtrenin Çalışma Mekanizması

  • Bilateral Filtrenin Matematiksel Temelleri

    • Uzamsal Ağırlık: Gσs

    • Yoğunluk Ağırlık: Gσr

    • Normalizasyon

  • ​Bilateral Filtrenin Avantajları ve Dezavantajları

    • Avantajları

    • Dezavantajları

  • Uygulama Alanları

  • Bilateral Filtresi Uygulama Kodu

KÜRE'ye Sor