5.14. Gauss yumuşatması ve kenarlar

Klasik makine görüşünde komşuluk pencerelerinin kullanım amaçlarına iki iş hâkimdir: pikselden piksele varyasyonu temiz biçimde yumuşatmak ve görüntünün keskin biçimde değiştiği kenarları bulmak. Gauss filtresi birincisi için standart araçtır, Laplacian tabanlı tespit ediciler ise ikincisi için standart araçtır; ayrıca ikisi bir araya gelir, çünkü her kenar tespit edici hafifçe yumuşatılmış bir girdi üzerinde daha iyi çalışır.

5.14.1. Gauss filtresi

gaussian(), mean() filtresinin merkez ağırlıklı kuzenidir. Her ikisi de her pikselin komşuluğu üzerinden bir ortalama hesaplar, ancak Gauss’un ağırlıkları düzgün değildir: komşuluğun merkezine daha yakın pikseller daha çok, komşuluğun kenarındaki pikseller daha az sayılır; ağırlıklar, filtreye adını veren tanıdık çan eğrisini izler.

Çan şeklindeki ağırlıklandırma, bir Gauss filtresini kutu ortalamasından daha yumuşak yapan şeydir. Ortalama filtreleme, nesnelerin kenarlarında görünür yapay etkiler (artefakt) üretebilir; ağırlıklandırmadaki sert bir kesinti, keskin geçişlerde küçük çınlama desenleri ortaya çıkarır. Gauss’un düzgün biçimde azalan ağırlıkları bu çınlamadan kaçınır ve “bulanıklaştırılmış” görünmesi gerekene daha yakın bir sonuç üretir. Bedeli, ortalama filtresinden daha fazla piksel başına hesaplamadır; ancak çok dramatik değildir; piksel başına maliyet hâlâ bilateral filtreden çok daha düşüktür.

img.gaussian(1)    # 3x3 Gaussian -- a clean light blur
img.gaussian(2)    # 5x5 Gaussian -- stronger smoothing

Gauss yumuşatması, neredeyse her kenar tespit hattının standart ilk aşamasıdır. Aşağıdaki kenar tespit edicilerinin tümü, algoritmanın aslında tespit etmek istemediği sensör gürültüsü de dahil olmak üzere yüksek frekanslı içeriği yükseltir. Önce hafif bir Gauss çalıştırmak, gerçek kenarları fazla yumuşatmadan bu gürültüyü bastırır ve kenar tespit edicinin benek yerine gerçek kenarları bulmasına olanak tanır.

5.14.2. Keskinlik maskeleme (Unsharp masking)

Bir görüntünün Gauss ile bulanıklaştırılmış bir kopyası, keskinlik maskesi (unsharp mask) tekniğinin klasik keskinleştirme için kullandığı ham malzemedir. Filtrede unsharp=True ayarlanması, filtreyi “bulanık görüntüyü üret” işleyişinden “bulanık görüntüyü orijinalden çıkar ve farkı orijinale geri ekle” işleyişine geçirir; etki, yüksek frekanslı kenarların düzgün iç bölgelere göre yükseltilmesidir.

img.gaussian(1, unsharp=True)

İsteğe bağlı mul ve add parametreleri keskinlik sonucunun gücünü ölçeklendirir; varsayılanlar (mul=1.0, add=0.0) sensör gürültüsünü abartmayan ılımlı bir keskinleştirmedir.

5.14.3. Laplacian filtresi

laplacian(), görüntünün ikinci uzamsal türevinin ayrık bir yaklaşımını çalıştırır. Çıktı, piksel değerlerinin hızlı değiştiği yerlerde büyük, sabit oldukları ya da doğrusal olarak değiştikleri yerlerde sıfıra yakındır. Sonucun doğal okunuşu bir kenar yanıtıdır: görüntünün hızla değiştiği pikseller aydınlanır, düzgün iç bölgelerdeki pikseller karanlık kalır.

img.laplacian(1)   # 3x3 Laplacian -- edge response

gaussian ile aynı parametreler kullanılabilir. sharpen=True, keskinleştirilmiş bir görüntü üretir (Laplacian kendi başına döndürülmek yerine orijinale eklenir). mul ve add yanıtı ölçeklendirir.

Kenar tespitinin ötesinde pratik bir kullanım odak ölçümüdür. Bir bölge boyunca ortalaması alınan Laplacian yanıtı, bölgenin ne kadar yüksek frekanslı içerik taşıdığının kaba bir ölçüsünü verir; iyi odaklanmış bir çerçevede bu ortalama yüksektir, bulanık bir çerçevede ise düşer. Çerçeveler arasında Laplacian yanıtını karşılaştırmak, daha pahalı bir kontrast metriğine ihtiyaç duymadan “lens odaklanmış mı?” diye sormanın ucuz yoludur.

5.14.4. find_edges metodu

find_edges(), yalnızca bir kenar yanıtı filtresi yerine eksiksiz bir kenar tespit hattı çalıştırır. Gri tonlamalı görüntüler üzerinde çalışır ve sonuç, sıfır olmayan pikselleri girdinin bir kenar olarak sayılması gereken türde bir parlaklık değişikliğine sahip olduğu konumları işaretleyen bir ikili görüntüdür.

Metot, iki algoritma arasında seçim yapan bir edge_type parametresi alır:

EDGE_SIMPLE, bir yüksek geçiren filtre çalıştırır, bir eşik uygular ve sonucu döndürür. Hızlıdır, ancak çıktı, uygulamanın muhtemelen umursamadığı gürültü ve doku da dahil olmak üzere eşiğin üzerindeki her parlaklık değişikliğini içerir. Temiz görüntüler için ve gürültünün daha sonraki bir morfolojik geçişle temizleneceği durumlar için makuldür.

EDGE_CANNY, klasik çok aşamalı algoritma olan Canny kenar tespit edicisini çalıştırır. Parlaklık gradyanını hesaplar, gradyan yönü boyunca her maksimum olmayan yanıtı bastırır (böylece her kenar bir piksel genişliğinde olur) ve bir histerezis eşiği uygular (böylece bir yerde güçlü olan bir kenar, arada sönükleştiği yerlerde bile izlenir). Sonuç, her klasik kenar tabanlı algoritmanın istediği türde temiz, ince ve bağlantılı bir kenar pikselleri kümesidir.

threshold parametresi iki elemanlı bir (low, high) demetidir. EDGE_CANNY için high değeri, bir pikselin kesinlikle bir kenar olduğu kesme noktasıdır ve low değeri, bir pikselin yalnızca kesin bir kenara bağlıysa kenar olduğu kesme noktasıdır. EDGE_SIMPLE için yalnızca high değeri önemlidir; bir pikselin kenar olarak sayıldığı tek kesme noktasıdır. Varsayılan (100, 200) değeri, belirli sahne için ayarlanmaya değer bir başlangıç noktasıdır.

img.gaussian(1)                                   # pre-smooth
img.find_edges(image.EDGE_CANNY, threshold=(50, 100))

Canny tespit edicisi, kenarların önemli olduğu neredeyse her uygulama için daha iyi seçimdir. Daha hızlı olan EDGE_SIMPLE, Canny’nin maliyetinin bir sorun olduğu ve histerezisinin gürültü reddinin aslında gerekmediği durumlar için hatırlanmaya değerdir.

5.14.5. Gauss üzerinde uyarlamalı eşikleme

istatistiksel filtreler gibi, gaussian() de uyarlamalı eşikleme için threshold=True / offset=N anahtar sözcük çiftini kabul eder. Davranış mean() ile aynıdır: her konumdaki Gauss istatistiği yerel kesme noktası haline gelir ve kaynak piksel, ikili bir sonuç üretmek için istatistik artı offset değeriyle karşılaştırılır.

Gauss varyantı, girdi makul ölçüde gürültüsüz olduğunda uyarlamalı eşikleme için genellikle en temiz seçimdir. Ağırlıklı ortalama, ortalama filtresinin ürettiğinden daha düzgün bir kesme noktası verir ve keskin aydınlatma geçişlerinde daha az yapay etki üretir.