Giriş: Neden Histogram Hesaplamaya İhtiyacımız Var?
Görüntü işleme, bilgisayarla görme alanının temel taşlarından biridir. Görüntüler üzerinde yapılan analizler genellikle histogram hesaplamasıyla başlar. Histogram, bir görüntüdeki piksel değerlerinin dağılımını görselleştiren bir grafiktir ve görüntünün kontrastı, parlaklığı ve detayları hakkında önemli bilgiler sunar. Python programlama dili ve OpenCV kütüphanesi ile birlikte, histogramların hesaplanması ve görselleştirilmesi oldukça basit ve etkilidir.
Bu makalede, OpenCV kullanarak bir görüntünün histogramını nasıl hesaplayacağımızı ve bu histogramı nasıl görselleştireceğimizi adım adım öğreneceğiz. Hem gri tonlama hem de renkli görüntüler için histogram hesaplama yöntemlerini ele alacağız. Böylece görüntü işleme uğraşanların uygulamalarında daha derin bir anlayış geliştirmelerine yardımcı olabiliriz.
Histogram hesaplamaları, genellikle görüntü iyileştirme süreçlerinde, eşikleme (thresholding) uygulamalarında ve nesne tanıma algoritmalarında kullanılır. Dolayısıyla bu tekniklerin temelini öğrenmek, daha karmaşık projelere yönelirken size büyük avantaj sağlayacaktır.
OpenCV ile Görüntü Histogramı Hesaplama
OpenCV, bilgisayarla görme uygulamaları için geliştirilmiş açık kaynaklı bir kütüphanedir. Python programlama dili ile birlikte kullanıldığında, birçok güçlü görüntü işleme aracını basit ve anlaşılır bir şekilde utilize etmemizi sağlar. OpenCV ile histogram hesaplamak için ilk adım olarak, gerekli kütüphaneleri projemizde dahil etmemiz gerekiyor.
import cv2
import numpy as np
import matplotlib.pyplot as plt
İlk olarak, cv2
kütüphanesini görüntü işleme fonksiyonları için, numpy
kütüphanesini sayısal hesaplamalar için ve matplotlib.pyplot
kütüphanesini histogramları görselleştirmek için kullanıyoruz. Şimdi bir görüntüyü yükleyerek histogram hesaplamaya başlayalım.
# Görüntüyü yükleyin
image = cv2.imread('görüntü.jpg')
# Gri tonlamaya dönüştürün
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
Yukarıdaki kodda, bir görüntüyü yükledikten sonra onu gri tonlamaya dönüştürdük. Gri görüntünün histogramını hesaplamak için artık cv2.calcHist()
fonksiyonunu kullanabiliriz. Bu fonksiyon, belirli bir numune aralığında histogramı hesaplamamıza olanak tanır.
# Histogramı hesaplayın
hist = cv2.calcHist([gray_image], [0], None, [256], [0, 256])
Burada [gray_image]
ile görüntüyü, [0]
ile gri düzeyini, None
ile maske kullanmadığımızı belirtirken, [256]
histogram için kullanılan bin sayısını tanımlar. [0, 256]
ise değerlerimizin hangi aralıkta olduğunu gösterir.
Histogramı Görselleştirme
Histogramımızı hesapladıktan sonra, görselleştirmek için matplotlib
kütüphanesini kullanabiliriz. Histogramı görselleştirmek, görüntünün hangi tonlarda yoğunlaştığını anlamamıza yardımcı olur.
# Histogramı görselleştirin
plt.figure()
plt.title('Gri Ozan Histogramı')
plt.xlabel('Piksel Değerleri')
plt.ylabel('Frekansta')
plt.plot(hist)
plt.xlim([0, 256])
Yukarıdaki kod, histogramı görmek için bir grafik oluşturur. plt.title()
, plt.xlabel()
ve plt.ylabel()
fonksiyonları, grafiğimizin başlığını ve eksen etiketlerini belirlememize olanak sağlar. Gerçekleştirdiğimiz bu işlem sayesinde, görüntümüzün tonlandırma ve parlaklık dağılımını daha iyi anlayabiliriz.
Şimdi, aynı işlemi renkteki görüntüler için yapalım. Renkli görüntülerde genellikle üç kanal (kırmızı, yeşil, mavi) vardır ve her kanal için ayrı histogramlar hesaplayabiliriz.
Renkli Görüntüde Histogram Hesaplama
Renkli bir görüntüde histogram hesaplamak için, her bir renk kanalı için ayrı ayrı histogramlar üretmemiz gerekiyor. İlk olarak yine görüntüyü yükleyelim ve renk kanallarını ayıralım.
# Renk kanallarını ayırın
b_channel, g_channel, r_channel = cv2.split(image)
Burada cv2.split()
fonksiyonunu kullanarak görüntüyü mavi, yeşil ve kırmızı kanallara ayırdık. Şimdi her bir kanal için histogramı ayrı ayrı hesaplayabiliriz.
# Renk kanalları için histogramları hesaplayın
b_hist = cv2.calcHist([b_channel], [0], None, [256], [0, 256])
g_hist = cv2.calcHist([g_channel], [0], None, [256], [0, 256])
r_hist = cv2.calcHist([r_channel], [0], None, [256], [0, 256])
Histogramları hesapladıktan sonra, aynı şekilde grafikte gösterebiliriz. Bu sefer her bir kanalın histogramını aynı grafikte çizeceğiz.
# Histogramı görselleştirin
plt.figure()
plt.title('Renk Histogramı')
plt.xlabel('Piksel Değerleri')
plt.ylabel('Frekansta')
plt.plot(b_hist, color='b', label='Mavi')
plt.plot(g_hist, color='g', label='Yeşil')
plt.plot(r_hist, color='r', label='Kırmızı')
plt.legend()
plt.xlim([0, 256])
Bu sayede, üç renk kanalının histogramını bir arada görebiliyoruz. Bu grafik, her bir kanalın ne kadar piksel içerdiği hakkında bize daha fazla bilgi verir. Örneğin, bir kanalda belirgin bir piksel yoğunluğu varsa, görüntü o tonlarda baskın olacaktır.
Histogram Eşitleme ile Görüntü İyileştirme
Histogram hesaplama ve görselleştirme işlemlerinin yanı sıra, histogram eşitleme ile görüntüleri iyileştirmemiz de mümkün. Histogram eşitleme, bir görüntünün kontrastını artırarak daha iyi bir görsellik elde etmemize yardımcı olur. OpenCV’de bu işlemi gerçekleştirmek için cv2.equalizeHist()
fonksiyonunu kullanırız.
# Gri görüntünün histogram eşitlemesini gerçekleştirin
equalized_image = cv2.equalizeHist(gray_image)
Bu işlemden sonra, histogramı tekrar hesaplayarak görselleştirip, iyileştirilmiş görüntü ile karşılaştırabiliriz. Aşağıda, histogram eşitleme uygulanmış bir görüntünün histogramını ve eşleşen grafiği bulabilirsiniz.
# Eşitlenmiş görüntüyü gösterin
plt.figure()
plt.title('Eşitlenmiş Gri Ozan Histogramı')
hist_eq = cv2.calcHist([equalized_image], [0], None, [256], [0, 256])
plt.plot(hist_eq, color='orange')
plt.xlim([0, 256])
Histogram eşitleme sonucu, kontrastı artırarak daha vaiz bir görüntü elde etmemizi sağlayacaktır. Bu özellikle daha az kontrastlı görüntülerin iyileştirilmesi sürecinde son derece faydalıdır.
Sonuç
Bu makalede, OpenCV kütüphanesini kullanarak histogram hesaplamayı ve görselleştirmeyi öğrendik. Gri tonlama ve renkli görüntülerde histogramların nasıl hesaplanacağını ve histogram eşitleme uygulamasını inceledik. Histogramlar, görüntü işleme süreçlerinin temel bir parçasıdır ve görüntülerin daha iyi analiz edilmesine olanak tanır.
OpenCV ve Python kullanarak bu temel teknikleri anlamak, daha karmaşık görüntü işleme projeleri için sağlam bir temel oluşturacaktır. Bu bilgiler ışığında kendi projelerinizde histogram hesaplamayı ve görüntü iyileştirmeyi rahatlıkla uygulayabilirsiniz. Unutmayın, her zaman denemeler yapmaktan çekinmeyin! Farklı görüntüler üzerinde uygulamalar yaparak daha fazla deneyim kazanabilir ve bilginizi pekiştirebilirsiniz.
Umarım bu makale, Python’da OpenCV ile histogram hesaplama konusunu anlamanızı kolaylaştırmıştır. Eğer sorularınız veya merak ettiğiniz konular varsa, yorumlar kısmında çekinmeden sorabilirsiniz!