Gauss Bulanıklığı - Standart Sapma, Yarıçap ve Çekirdek Boyutu


19

GLSL'de bir gauss bulanıklığı bulanıklık gölgelendiricisi uyguladım. Her şeyin arkasındaki ana kavramları anlıyorum: evrişim, x ve y'nin doğrusallığı kullanarak ayrılması, yarıçapı arttırmak için çoklu geçişler ...

Yine de birkaç sorum var:

  • Sigma ve yarıçap arasındaki ilişki nedir?

    Sigma'nın yarıçapa eşdeğer olduğunu okudum, sigma'nın piksel cinsinden nasıl ifade edildiğini göremiyorum. Yoksa "yarıçap" yalnızca sigma için bir ad mıdır, piksellerle ilgili değildir?

  • Sigma'yı nasıl seçerim?

    Sigma'yı artırmak için birden fazla geçiş kullandığımı düşünürsek, herhangi bir geçişte istediğim sigmayı elde etmek için iyi bir sigma nasıl seçerim? Ortaya çıkan sigma, sigmaların karelerinin toplamının kare köküne eşitse ve sigma yarıçapa eşitse , istenen yarıçapı almanın kolay yolu nedir?

  • Bir çekirdek için iyi boyut nedir ve sigma ile ilişkisi nedir?

    Çoğu uygulamanın 5x5 çekirdeği kullandığını gördüm. Bu muhtemelen iyi kalitede hızlı bir uygulama için iyi bir seçimdir, ancak başka bir çekirdek boyutu seçmek için başka bir neden var mı? Sigma çekirdek büyüklüğü ile nasıl ilişkilidir? Çekirdeğimin dışındaki katsayı ihmal edilebilir ve normalleşecek şekilde en iyi sigmayı bulmalı mıyım?

Yanıtlar:


21

Sigma ve yarıçap arasındaki ilişki nedir? Sigma'nın yarıçapa eşdeğer olduğunu okudum, sigma'nın piksel cinsinden nasıl ifade edildiğini görmüyorum. Yoksa "yarıçap" yalnızca sigma için bir ad mıdır, piksellerle ilgili değil mi?

Burada çalan üç şey var. Varyans, ( ), yarıçap ve piksel sayısı. Bu 2 boyutlu bir gauss işlevi olduğundan, bunun yerine kovaryans matrisinden Σ bahsetmek mantıklıdır . Bununla birlikte, bu üç kavram zayıf bir şekilde ilişkilidir.σ2Σ

Her şeyden önce, 2-B gaussian denklemi ile verilir:

g(z)=1(2π)2|Σ|e12(zμ)TΣ1 (zμ)

Burada , görüntünüzdeki x ve y koordinatlarını içeren bir sütun vektörüdür . Yani, z = [ x y ] ve μ , x ve y yönlerinde μ = [ μ x μ y ] , gauss fonksiyonunuzun ortalamasını kodlayan bir sütun vektörüdür .zxyz=[xy]μxyμ=[μxμy]

Misal:

Şimdi, biz kovaryans matrisi set diyelim ve μ = [ 0 0 ] . Ayrıca piksel sayısını 100 x 100 olarak ayarlayacağım . Dahası, bu PDF değerlendirmek benim 'ızgara', giden olacak - 10 için 10 hem de, x ve y . Yani ızgara çözünürlüğüm 10 - ( - 10 )Σ=[1001]μ=[00]1001001010xy10(10)100=0.2Σ=[9009]

resim açıklamasını buraya girin

1001002020-101010-(-10)20=1

resim açıklamasını buraya girin

Bu değişkenler arasındaki etkileşimi nasıl anlamanız gerekir. Kodu isterseniz, burada da gönderebilirim.

Sigma'yı nasıl seçerim?

Gauss filtrenizin varyans / kovaryans matrisi seçimi son derece uygulamaya bağlıdır. Doğru cevap yok. Bu, bir filtre için hangi bant genişliğini seçmesi gerektiğini sormak gibidir. Yine, uygulamanıza bağlıdır. Tipik olarak, bir gaussian filtre seçmek istersiniz, böylece görüntünüzde önemli miktarda yüksek frekans bileşenini iptal edersiniz. İyi bir önlem almak için yapabileceğiniz bir şey, görüntünüzün 2D DFT'sini hesaplamak ve 2D gaussian görüntünüzle birlikte verimliliklerini kaplamaktır. Bu, hangi katkıların ağır bir şekilde cezalandırıldığını gösterecektir.

Örneğin, gauss görüntünüz, görüntünüzün birçok yüksek frekans katsayısını içerecek kadar geniş bir kovaryansa sahipse, kovaryans öğelerini daha küçük yapmanız gerekir.


1
Sıralı bir renk haritası kullanırlarsa bu görüntüler daha iyi olurdu. jet en kötüsü.
endolith

@endolith "Daha iyi" uygulamaya bağlıdır. Görsel kontrast ayrımcılığı gerektiğinde jet kullanmıyorum. (Sıcak daha iyidir). Bununla birlikte, mesaj gaussianın büyüklüğündedir, bu yüzden jet ile zarar vermez. Gerçi bağlantı için teşekkürler.
Tarin Ziyaee

2
Bu güzel düşünülmüş ve gerçekten iyi görselleştirilmiş bir cevap! Örneğin, sol üstteki görüntüyü ele alalım. Varyans ve çekirdek boyutu kombinasyonunun israf edeceği açıktır, çünkü sadece 30x30 merkezinin (~% 9) sıfır olmadığı 100x100 bir çekirdektir.
Adam Smith

5

Sigma parametresi Gauss bulanıklığını sürekli bir bakış açısından tanımlamak için yeterlidir. Ancak pratikte görüntüler ve evrişim çekirdekleri ayrıktır. Sürekli Gauss çekirdeğinin en uygun ayrıklığı nasıl seçilir?

Daha büyük bir yarıçap kullanıldığında ayrık yaklaşım sürekli Gauss çekirdeğine daha yakın olacaktır. Ancak bu, ilave hesaplama süresi pahasına gelebilir.

İdeal olarak, sigma için bir değer seçilecek, ardından karşılık gelen sürekli Gauss çekirdeğini sadakatle temsil etmeyi sağlayan bir yarıçap hesaplanacaktır. Belirli bir yaklaşım hatası için, sigma ne kadar büyükse, yarıçap da o kadar büyük olmalıdır.

İlginç bir şekilde, bu doğru yapmak için çok karmaşık olabilir. Gauss matrisini oluştururken, sürekli çekirdeği örneklemek için en iyi çözüm mü yoksa daha iyi yaklaşımlar mı var? Hesaplanan ayrık çekirdeği kesmeyi hesaba katmak için nasıl normalleştirilir? vb.

Bir referans olarak, Mathematica'da GaussianMatrix işlevi bir Gauss ayrık matrisini hesaplamak için çeşitli yollar içerir, örneğin ayrık Bessel yaklaşımı kullanarak. Varsayılan olarak, radius = 2 * sigma, yani sigma = 1 ile matris 5x5 olacaktır.


Bu oldukça eski bir soru. Ama 2 * sigma yarıçapı 9x9'luk bir matrise neden olmaz mı?
Sanrı Mantık

@ Sigma = 1, yarıçap = 2 ile delLionalLogic, bu nedenle matris 4 boyuta sahip olacak, ancak 5x5 boyutunda tek boyuta ihtiyaç duyacak. En azından ben böyle anlıyorum ..
Micka

Yarıçap 2 ise, mahalle merkez pikseli 2 piksel sola, 2 sağa vb. Genişletir. Bu sadece Mathematica'nın kullandığı kuraldır.
Matthias Odisio

2

Pascal Üçgeni satırlarının oldukça güzel bir Gauss'a yaklaştığı ve toplamı 2 olan bir tamsayı değerine sahip olmanın pratik avantajına sahip olduğu ortaya çıkıyor (bu değerleri tam olarak tamsayı, sabit nokta değerleri veya kayan nokta olarak saklayabiliriz ). Örneğin, 7x7 Gauss Çekirdeği oluşturmak istediğimizi varsayalım, bunu Pascal üçgeninin 7. sırasını aşağıdaki gibi kullanarak yapabiliriz:

resim açıklamasını buraya girin

Bu filtrenin, tamsayı değerlenirken köşelerde minimum etkiye sahip olduğuna dikkat edin. Bu durumda yaklaşık Gaussian için 64 / (20 * sqrt (2 * pi)) = 1.276 olan standart sapma sigma değerini belirlemek için 20/64 orta değerini kullanabilirsiniz. Şunları yapabilirsiniz Gauss grafiğini mükemmel bir uyum olduğunu görmek .

Dolayısıyla, bir Gauss Çekirdeği için makul bir standart sapma belirlemek için iyi bir başlangıç ​​noktası, Pascal'ın Üçgeni'nden ( Binom Katsayıları olarak da bilinir ) gelir - yukarıdaki inşaat kullanımına karşılık gelen (N + 1) x (N + 1) filtre için

resim açıklamasını buraya girin

Wolfram Alpha'dan GaussianMatrix [3] sadece r / 2 = 1.5 kullanıyor. Garip bir şekilde, GaussianMatrix [{3,1.276}] etmez değil maden aynı 2D filtre verim ve olduğu değil x ardından arasında ara-3 ve 3:

resim açıklamasını buraya girin

Neden olmasın emin değilim? 2D filtrem mükemmel bir uyum.

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.