5.19. Tonal düzeltmeler¶
Tonal düzeltmeler, yakalanan bir görüntüde parlaklığın ve rengin nasıl dağıldığını değiştirir – yani bir çerçeve çok karanlık, çok parlak, çok düz veya yanlış renge kaymış olduğunda bir uygulamanın yaptığı düzeltmelerdir.
Düzeltmeler iki aileye ayrılır: parlaklığı yeniden dağıtan parlaklık-ve-kontrast ayarlamaları ve her pikselin hangi renk olarak okunduğunu değiştiren renk ayarlamaları. Her ikisinin de sensörün ISP birimi içinde benzerleri vardır; ISP her çerçeveyi içeri girerken düzeltir. Buradaki yöntemler ise, çerçevenin ISP’nin sağladığından daha fazla düzeltmeye ihtiyaç duyduğu durumlar için, zaten yakalanmış bir Image üzerine sonradan uygulanır.
5.19.1. Histogram eşitleme¶
En basit kontrast germe işlemi histogram eşitlemedir. Fikir, çıkışın histogramı olabildiğince düz olacak şekilde piksel değerlerini yeniden eşlemektir – her değer kabaca eşit sıklıkta görünür. Görsel etki, düşük kontrastlı bir görüntünün (histogramı dar bir banda yoğunlaşmış olanın) pikselleri tüm 0 – 255 aralığını kaplayan yüksek kontrastlı bir görüntü hâline gelmesidir.
histeq() eşitlemeyi çalıştırır:
img.histeq()
İşleyiş doğrudandır. Kaynağın histogramının kümülatif dağılım fonksiyonu (CDF) hesaplanır; her giriş piksel değeri, çıkış aralığına ölçeklenerek CDF içindeki konumuna eşlenir. Piksellerin zaten eşit dağıldığı yerlerde eşleme özdeşliğe yakındır; piksellerin tek bir parlaklıkta yığıldığı yerlerde ise eşleme, o parlaklığı daha geniş bir çıkış değeri aralığına yayarak onları açar.
Sonuç, düşük kontrastlı sahnelerde çarpıcıdır – loş bir iç mekân fotoğrafı ile histeq sonrası aynı fotoğraf arasındaki fark çoğu zaman “okunamaz” ile “mükemmel derecede okunaklı” arasındaki farktır. Ödünleşim, işlemin sensör gürültüsü dahil her şeyi yükseltmesidir. Geri kazanılacak gerçek düşük kontrastlı ayrıntıya sahip bir sahnede histeq doğru cevaptır; buna ihtiyaç duymayan temiz, iyi pozlanmış bir sahnede ise histeq görünür gürültü ekler.
5.19.2. CLAHE: uyarlanabilir eşitleme¶
Histogram eşitleme globaldir: tüm görüntüden hesaplanan tek bir CDF kullanır ve onu her yere uygular. Bu, parlaklık aralığı kabaca düzgün olan görüntülerde işe yarar, ancak yerel olarak karanlık ve parlak bölgeleri olan sahnelerde başarısız olur – CDF, daha çok piksele sahip tarafa doğru çekilir ve karşı taraf aşırı düzeltilir.
Uyarlanabilir varyant, yaygın olarak CLAHE diye anılan Kontrast Sınırlı Uyarlanabilir Histogram Eşitleme‘dir. CLAHE, tek bir global CDF yerine görüntünün her küçük döşemesi (tile) için ayrı bir CDF hesaplar, her döşemeyi kendi CDF’sine göre eşitler ve döşeme sınırlarını birbirine harmanlar. Sonuç, parlaklık ayarlamalarının yerel olarak gerçekleşmesidir – gölgede kalan köşe, parlak köşe onu yanlış yöne çekmeden kendi eşitlemesini alır.
adaptive=True bayrağı histeq() yöntemini CLAHE moduna geçirir:
img.histeq(adaptive=True, clip_limit=10)
clip_limit parametresi, CLAHE adındaki “kontrast sınırlı” ifadesinin atıfta bulunduğu kısımdır. Yerel eşitleme, CDF’nin çok az sayıda farklı değere sahip olduğu düz bölgelerde gürültüyü aşırı yükseltebilir; clip limit, herhangi bir tek kutucuğun (bin) ne kadar agresif yeniden dağıtılabileceğini sınırlandırır, bu da gürültü yükseltmesini önlerken kontrast germesinin önemli olduğu yerlerde gerçekleşmesine izin verir. 10 civarındaki bir değer makul bir başlangıç noktasıdır; daha büyük değerler CLAHE’nin daha fazla görünür gürültü pahasına daha çok çalışmasına izin verir, daha küçük değerler ise onu daha yumuşak hâle getirir.
CLAHE, global histeq’ten daha pahalıdır, ancak parlaklığın düzensiz dağıldığı sahnelerde – ki bunlar gerçek dünyadaki çoğu sahnedir – daha temiz sonuçlar üretir.
5.19.3. Gamma, kontrast ve parlaklık¶
Histogram eşitleme, parlaklığı yeniden eşlemenin veriye dayalı yoludur. Veriden bağımsız yol ise, birkaç kolayca ayarlanabilir düğmeyle parametrelenen seçili bir eğri uygulamaktır. gamma() üç tane sağlar:
img.gamma(gamma=1.0, contrast=1.0, brightness=0.0)
Her parametre, her piksele belirli bir dönüşüm uygular:
gamma, her pikselin değerini output = input ** (1 / gamma) güç fonksiyonundan geçirir. Standart anlamı: 1.0‘dan büyük değerler görüntüyü aydınlatır ve orta tonları yükseltir (klasik “monitör gamması” düzeltmesi); 1.0‘dan küçük değerler ise onu karartır. Parametre doğrusal değildir – siyah ve beyaz noktaları korur ve yalnızca aradaki dağılımı yeniden şekillendirir; bu, amaç mevcut uç değerleri ezmeden gölge veya parlak bölgelerdeki ayrıntıları geri kazanmak olduğunda doğru davranıştır.
contrast, her pikseli orta-gri noktası etrafında doğrudan bir çarpmadan geçirir. 1.0‘dan büyük değerler kontrastı artırır (karanlık daha karanlık, parlak daha parlak olur, orta-gri aynı kalır); 1.0‘dan küçük değerler kontrastı azaltır.
brightness, her piksel değerine bir sabit ekler. Pozitif değerler aydınlatır, negatif değerler karartır. Kayma düzgündür – hiçbir şey korunmaz – ki bu tek başına bir uygulamanın nadiren istediği bir şeydir, ancak sonucu yeniden ortalamak için bir kontrast geçişiyle iyi eşleşir.
Üç parametre birleşir: tek bir gamma() çağrısı tek geçişte önce bir gamma eğrisi, sonra bir kontrast çarpması, sonra bir parlaklık kayması uygulayabilir. Sıralama önce gamma, sonra kontrast, sonra parlaklıktır; bu da üçü de varsayılan dışı olduğunda en sezgisel sonuçları veren sıralamayla uyuşur.
5.19.4. Otomatik beyaz dengesi¶
Tonal düzeltmelerin renk ailesi otomatik beyaz dengesi ile başlar. Sensörün ISP’sinin görüntüleme hattının bir parçası olarak çalıştırdığı aynı mekanizma – kırmızı, yeşil ve mavi kanallardaki göreli kazançları, ortalama gri renkli bir bölgenin gerçek gri olarak okunmasını sağlayacak şekilde ayarlamak – bitmiş bir Image üzerinde yakalama sonrası bir işlem olarak da kullanılabilir:
img.awb()
Varsayılan, gray-world algoritmasını kullanır: tüm görüntünün ortalama renginin nötr gri olduğu varsayılır ve kanal başına kazançlar bunu sağlayacak şekilde ayarlanır. Alternatif max=True biçimi white-patch algoritmasını kullanır: en parlak piksellerin nötr beyaz olduğu varsayılır ve kazançlar bunu sağlayacak şekilde ayarlanır. Her ikisi de RGB565 ve ham Bayer üzerinde çalışır; hiçbiri gri tonlamada (dengeleyecek renk olmadığında) veya YUV’da (renk gösterimi bu algoritmaların üzerinde çalıştığı şey olmadığında) çalışmaz.
ISP’nin otomatik beyaz dengesi yerine yakalama sonrası biçimine ne zaman başvurmalı: ISP’nin seçimi belirli bir sahne için kötü bir eşleşme olduğunda, uygulama farklı koşullar altında yakalanmış referans çerçeveleri diskten yüklediğinde veya renk değerlendirmesi, uygulamanın kendi algoritma seçimiyle yeniden çalıştırmak isteyecek kadar önemli olduğunda.
5.19.5. Renk düzeltme matrisi¶
Görüntünün ihtiyaç duyduğu renk düzeltmesi, beyaz dengesinin verdiği kanal başına ölçekleme değil de daha genel bir kanal karıştırması olduğunda, başvurulacak işlem renk düzeltme matrisidir. ccm() yöntemi, her pikselin (r, g, b) vektörünü çarparak yeni bir (r, g, b) vektörü üreten 3’e 3 (veya ofsetli 3’e 4) bir matris uygular:
img.ccm([[1.1, -0.05, -0.05],
[-0.05, 1.1, -0.05],
[-0.05, -0.05, 1.1]])
Matris, uygulamanın renk kanalları arasındaki çapraz konuşmayı (crosstalk) düzeltmesine olanak tanır – örneğin kırmızı sensörün tepkisi bir miktar yeşil ışık içerdiğinde, matris bunu telafi etmek için yeşil kanalın bir kısmını kırmızı çıkıştan çıkarabilir. Kanal başına bir ofsetle birleştirildiğinde, 3’e 4 biçimi uygulamanın her kanalı yeniden sıfırlamasına da olanak tanır.
ISP hattı materyali, renk düzeltme matrislerinin nedenini ele alır. Image üzerindeki yakalama sonrası biçim, yalnızca sonradan uygulanan aynı işlemdir.