Uyarlamalı eşikleme, gri tonlamalı görüntüleri ikili (siyah beyaz) görüntülere dönüştürmek için çok önemli bir görüntü işleme tekniğidir. Tüm görüntü için tek bir eşik değeri kullanan basit eşiklemenin aksine, uyarlamalı eşikleme farklı görüntü bölgeleri için dinamik olarak bir eşik hesaplar. Bu uyarlanabilirlik, özellikle global bir eşik ön planı arka plandan doğru bir şekilde ayırmakta başarısız olabileceği düzensiz aydınlatma gösteren görüntülerle ilgilenirken avantajlıdır.
Uyarlamalı eşiklemenin temel ilkesi, eşik belirlenirken yerel görüntü özelliklerini dikkate almayı içerir. Küresel olarak belirlenmiş bir değer yerine, algoritma görüntüyü daha küçük bölgelere (bloklar veya karolar) böler. Her bölge için, o bölgedeki piksel yoğunluklarına bağlı olarak bir eşik hesaplanır. Bu yerelleştirilmiş yaklaşım, görüntüdeki aydınlatmadaki varyasyonları etkili bir şekilde telafi eder. Yerel eşiği hesaplamak için yaygın yöntemler, bölge içindeki piksel yoğunluklarının ortalamasını alma veya ağırlıklı bir ortalama (Gauss) kullanmayı içerir.
OpenCV’nin Uyarlamalı Eşikleme Fonksiyonu
Güçlü bir bilgisayar görme kitaplığı olan OpenCV, cv2.adaptiveThreshold()
fonksiyonuyla uyarlamalı eşiklemeyi basitleştirir. Bu fonksiyon birkaç önemli parametre alır:
src
: Giriş gri tonlamalı görüntü.maxValue
: Eşiği aşan piksellere atanan maksimum değer (genellikle beyaz için 255).adaptiveMethod
: Eşiği hesaplamak için yöntem. Seçenekler şunlardır:cv2.ADAPTIVE_THRESH_MEAN_C
: Eşik olarak komşuluğun ortalamasını kullanır.cv2.ADAPTIVE_THRESH_GAUSSIAN_C
: Eşik olarak komşuluğun ağırlıklı ortalamasını (Gauss) kullanır.
thresholdType
: Eşikleme türü.cv2.THRESH_BINARY
yaygındır, eşiğin üzerindeki piksellerimaxValue
‘ye, altındakileri ise 0’a (siyah) ayarlar.blockSize
: Eşik hesaplaması için kullanılan komşuluğun (bölgenin) boyutu. Tek sayı olmalıdır.C
: Ortalamadan veya ağırlıklı ortalamadan çıkarılan, eşiği ince ayarlayan bir sabit.
Python ile Pratik Uygulama
İşte OpenCV kullanan bir Python örneği:
import cv2
import numpy as np
# Gri tonlamalı görüntüyü yükle
img = cv2.imread('input.jpg', cv2.IMREAD_GRAYSCALE)
# Uyarlamalı eşiklemeyi uygula
thresh = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)
# Sonuçları göster
cv2.imshow('Orijinal', img)
cv2.imshow('Uyarlamalı Eşik', thresh)
cv2.waitKey(0)
cv2.destroyAllWindows()
Bu kod, gri tonlamalı bir görüntü yükler, Gauss yöntemini (cv2.ADAPTIVE_THRESH_GAUSSIAN_C
), 11 blok boyutunu ve 2 sabitini kullanarak uyarlamalı eşikleme uygular. Ardından hem orijinal hem de eşiklenmiş görüntüleri gösterir. En iyi sonuçlar için blockSize
ve C
ile deneme yapmak, görüntü özelliklerine bağlı olarak uygun adaptiveMethod
‘un seçimi çok önemlidir.
Doğru Parametreleri Seçme
Uyarlamalı eşiklemenin etkinliği, parametre seçimine bağlıdır. Daha büyük bir blockSize
daha geniş bir komşuluğu dikkate alır, bu da daha yumuşak geçişlere yol açar ancak daha ince ayrıntıları kaçırabilir. Tersine, daha küçük bir blockSize
yerel varyasyonlara daha duyarlıdır ancak gürültüye neden olabilir. Sabit C
, eşiğin hassasiyetini ayarlamaya yardımcı olur; daha büyük bir C
daha yüksek bir eşikle sonuçlanır.
cv2.ADAPTIVE_THRESH_MEAN_C
ve cv2.ADAPTIVE_THRESH_GAUSSIAN_C
arasında seçim, görüntünün gürültü özelliklerine bağlıdır. Gauss ağırlığı aykırı değerlerin etkisini azalttığı için, cv2.ADAPTIVE_THRESH_GAUSSIAN_C
genellikle önemli ölçüde gürültülü görüntüler için tercih edilir.
Sonuç
Uyarlamalı eşikleme, düzensiz aydınlatmaya sahip görüntüleri ikileştirmek için sağlam bir çözüm sağlar ve basit eşiklemeye göre doğruluğu önemli ölçüde artırır. OpenCV’nin verimli cv2.adaptiveThreshold()
fonksiyonu, kullanıcıların bu tekniği kolayca uygulamalarına ve parametreleri dikkatlice ayarlayarak ve uygun uyarlamalı yöntemi seçerek en iyi sonuçları elde etmelerine olanak tanır. Esnekliği ve etkinliği, onu çeşitli bilgisayar görme uygulamalarında vazgeçilmez bir araç haline getirir.
İçindekiler