Thresholding & Histogramlar
Thresholding (Eşikleme)
Thresholding, görüntü işlemede kullanılan temel bir tekniktir ve genellikle görüntüleri siyah ve beyaz (ikili) formata dönüştürmek için kullanılır. Bu işlem, belirli bir eşik değerine dayanarak pikselleri iki gruba ayırır: Bir grup için eşik değerinden düşük olanlar, diğer grup için ise eşik değerinden yüksek veya ona eşit olanlar. Bu bölümde, OpenCV kullanarak yapılan çeşitli eşikleme tekniklerini inceleyeceğiz.
Basit Eşikleme
Basit eşikleme, bir görüntüdeki her pikseli, belirtilen bir eşik değeriyle karşılaştırır ve pikselin değeri bu eşikten yüksekse bir değere (genellikle beyaz), düşükse başka bir değere (genellikle siyah) atanır.
threshold, thresh = cv.threshold(gray, 150, 255, cv.THRESH_BINARY)
cv.imshow('Simple Thresholded', thresh)
threshold, thresh_inv = cv.threshold(gray, 150, 255, cv.THRESH_BINARY_INV)
cv.imshow('Simple Thresholded Inverse', thresh_inv)
Bu örnekte, 150
eşik değeri kullanılmıştır. THRESH_BINARY
uygulamasında eşik değerinden büyük pikseller beyaz, küçük olanlar siyah olur. THRESH_BINARY_INV
ise tersini yapar.
Uyarlamalı Eşikleme
Uyarlamalı eşikleme, görüntünün farklı bölgelerine farklı eşik değerleri uygulayarak daha iyi sonuçlar elde etmeyi amaçlar. Bu, ışık değişimlerinin olduğu durumlarda yararlıdır.
adaptive_thresh = cv.adaptiveThreshold(gray, 255, cv.ADAPTIVE_THRESH_GAUSSIAN_C, cv.THRESH_BINARY_INV, 11, 9)
cv.imshow('Adaptive Thresholding', adaptive_thresh)
Burada, ADAPTIVE_THRESH_GAUSSIAN_C
metodu kullanılmıştır ve görüntü, yerel alanların ortalama değerlerine göre eşiklenmiştir. 11
blok boyutu ve 9
C değeri, algoritmanın hassasiyetini belirler.
Eşikleme işlemi görüntüdeki gürültüyü artırabilir. Gürültüyü azaltmak için, eşikleme uygulamadan önce görüntüyü bulanıklaştırmayı düşünebilirsiniz.
Eşikleme teknikleri, görüntü segmentasyonu, nesne algılama ve çeşitli görüntü analizi görevlerinde temel bir araçtır. Doğru eşikleme yöntemini seçmek, uygulamanızın gereksinimlerine ve görüntünüzün özelliklerine bağlıdır.
Histogramlar
Histogramlar, bir görüntüdeki piksellerin yoğunluk dağılımını gösteren grafiklerdir. Görüntü işlemede, histogramlar görüntünün ton dağılımını analiz etmek ve çeşitli görüntü işleme tekniklerini uygulamak için kullanılır. Bu bölümde, OpenCV ve Matplotlib kullanarak hem gri tonlamalı hem de renkli görüntüler için histogramları nasıl hesaplayıp çizeceğimizi inceleyeceğiz.
Maske Oluşturma
Bir görüntüde belirli bir bölgeye odaklanmak için maske kullanabiliriz. Maske, belirli bir bölgenin histogramını hesaplarken diğer tüm pikselleri dikkate almamak için kullanılır.
blank = np.zeros(img.shape[:2], dtype='uint8')
mask = cv.circle(blank, (img.shape[1]//2, img.shape[0]//2), 100, 255, -1)
masked = cv.bitwise_and(img, img, mask=mask)
cv.imshow('Mask', masked)
Bu kodda, görüntünün ortasında bir daire oluşturarak maske oluşturulmuş ve bu maske görüntüye uygulanmıştır.
Gri Tonlamalı Histogram
Gri tonlamalı bir görüntü için histogram, görüntüdeki her bir gri tonunun sıklığını gösterir.
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
gray_hist = cv.calcHist([gray], [0], mask, [256], [0,256])
plt.figure()
plt.title('Grayscale Histogram')
plt.xlabel('Bins')
plt.ylabel('# of pixels')
plt.plot(gray_hist)
plt.xlim([0,256])
plt.show()
cv.calcHist
fonksiyonu, histogramı hesaplar. [0]
kanal indeksini, [256]
ise bin sayısını belirtir.
Renkli Histogram
Renkli bir görüntü için histogram, her bir renk kanalı (Kırmızı, Yeşil, Mavi) için yoğunluk dağılımını ayrı ayrı gösterir.
colors = ('b', 'g', 'r')
for i, col in enumerate(colors):
hist = cv.calcHist([img], [i], mask, [256], [0,256])
plt.plot(hist, color=col)
plt.xlim([0,256])
plt.title('Colour Histogram')
plt.xlabel('Bins')
plt.ylabel('# of pixels')
plt.show()
Bu kodda, her bir renk kanalı için histogram hesaplanır ve farklı renklerle çizilir.
Histogramları kullanarak, görüntünüzün parlaklık, kontrast ve renk dağılımı hakkında bilgi edinebilirsiniz. Ayrıca, görüntü işleme algoritmalarınızı ayarlamak için de yararlı bir referans olabilirler.
Histogramlar, görüntü analizi ve işlemede temel bir araçtır. Doğru kullanıldığında, görüntülerin özelliklerini anlamak ve geliştirmek için güçlü bilgiler sağlayabilirler.