Giriş
Görüntü işleme alanında, görüntülerin kalitesini artırmak ve kontrastı iyileştirmek için farklı teknikler kullanılmaktadır. Bu tekniklerden biri, histogram eşitleme (histogram equalization) olarak bilinir. Histogram eşitleme, bir görüntünün parlaklık dağılımını düzelterek daha iyi bir kontrast elde etmemizi sağlar. Özellikle düşük kontrastlı görüntülerde bu teknik oldukça yararlıdır. Bu yazıda, Python kullanarak histogram eşitleme yöntemini nasıl uygulayacağınıza dair adım adım rehberlik edeceğim.
Histogram Nedir?
Histogram, bir görüntüdeki piksel yoğunluklarının dağılımını gösteren bir grafiktir. Bu grafik, piksel değerlerini (0’dan 255’e kadar) yatay eksende ve her bir piksel değerinin görüldüğü frekansı ise dikey eksende gösterir. Örneğin, bir görüntüde çoğunlukla koyu tonlar varsa, histogramın sol tarafında yüksek bir değer görebileceksiniz. Bu durumda görüntü düşük kontrastlı kabul edilir. Histogram eşitleme, bu tür örüntüleri daha dengeli bir dağılıma dönüştürmeyi amaçlar.
Bir görüntünün histogramını incelediğimizde, görüntünün aydınlatma koşullarına bağlı olarak belirli tonlarda yoğunlaşma olduğunu görebiliriz. Histogram eşitleme, bu yoğunlukların dağılımını dengeleyerek görüntünün tüm piksel değer aralığını daha iyi kullanmamıza olanak tanır. Böylece, görüntünün daha net ve anlaşılır hale gelmesini sağlar.
Histogram Eşitlemenin Temel Prensibi
Histogram eşitleme, görüntünün histogramını alarak, bu histogramın birikmiş dağılım fonksiyonu (CDF) kullanılarak yeni bir histogram oluşturulmasını temel alır. İlk olarak, orijinal histogramdaki her piksel değerinin CDF değeri hesaplanır. Ardından, her pikselin yeni değeri, bu CDF değerlerinin normalize edilmesi ile elde edilir. Böylece, görüntüdeki değerler arasında daha iyi bir dağılım sağlanır ve kontrast artar.
Histogram eşitleme işlemi genellikle 3 aşamada gerçekleştirilir: ilk olarak, orijinal görüntünün histogramı çıkarılır; ardından bu histogramın birikmiş dağılım fonksiyonu hesaplanır ve son olarak, her pikselin yeni değeri bu CDF kullanılarak belirlenir. Uygulandığında, görüntünün genel görünümünü belirgin bir şekilde iyileştirebilmektedir.
Python ile Histogram Eşitleme
Python, görüntü işleme için oldukça popüler bir programlama dilidir. Bu yazıda, histogram eşitleme işlemini uygulamak için kullanabileceğimiz popüler bir kütüphane olan OpenCV’den yararlanacağız. OpenCV, görüntü işleme alanında geniş bir yelpazeye sahip fonksiyonlar sunmaktadır ve histogram eşitleme gibi birçok temel işlemi kolaylıkla yapmamıza olanak tanır.
Öncelikle gerekli kütüphaneleri yüklememiz gerekmektedir. OpenCV kütüphanesini yüklemek için `pip install opencv-python` komutunu terminalde çalıştırabilirsiniz. Ayrıca görüntüleri göstermek için Matplotlib kütüphanesini de kullanacağız. Bunun için `pip install matplotlib` komutunu yine terminalde çalıştırarak kurabilirsiniz.
Gerekli Kütüphanelerin Yüklenmesi
import cv2
import numpy as np
import matplotlib.pyplot as plt
Yukarıdaki kod bloğunda, OpenCV (cv2) ve Matplotlib (plt) kütüphanelerini yükledik. Ardından, NumPy kütüphanesini de görüntü üzerinde işlem yaparken kullanacağız. NumPy, çok boyutlu dizilerle çalışmaya olanak tanır ve bu yüzden görüntü işleme için çok uygundur.
Görüntünün Yüklenmesi ve Histogramın Görselleştirilmesi
# Görüntüyü yükle
image = cv2.imread('image_path.jpg', cv2.IMREAD_GRAYSCALE)
# Histogramın hesaplanması
hist, bins = np.histogram(image.flatten(), 256, [0, 256])
# Histogramın görselleştirilmesi
plt.hist(image.flatten(), 256, [0, 256], color='r')
plt.xlim([0, 256])
plt.title('Orijinal Histogram')
plt.show()
Yukarıdaki kodda, öncelikle bir görüntü dosyasını gri tonlamalı olarak yüklüyoruz. Ardından, görüntünün histogramını hesaplayarak bunu görselleştiriyoruz. Görselleştirmede Matplotlib kütüphanesini kullanarak histogramı çiziyoruz. Bu işlem, görüntünün mevcut kontrast durumu hakkında bilgi edinmemizi sağlar.
Histogram Eşitleme İşleminin Gerçekleştirilmesi
# Histogram eşitlemenin uygulanması
equalized_image = cv2.equalizeHist(image)
# Eşitlenmiş histogramı görselleştirelim
hist_eq, bins_eq = np.histogram(equalized_image.flatten(), 256, [0, 256])
# Eşitlenmiş histogramın görüntülenmesi
plt.hist(equalized_image.flatten(), 256, [0, 256], color='r')
plt.xlim([0, 256])
plt.title('Eşitlenmiş Histogram')
plt.show()
Burada, OpenCV’nin `equalizeHist` fonksiyonunu kullanarak histogram eşitleme işlemini uyguluyoruz. Uygulanan işlemin ardından eşitlenmiş görüntüyü histogramıyla birlikte görselleştiriyoruz. Bu adım, histogram eşitlemesi sonrasında görüntüdeki kontrastın ne kadar iyileştiğini net bir şekilde göstermektedir.
Sonuçların Karşılaştırılması
Genel olarak, orijinal görüntü ile histogram eşitleme uygulanmış görüntü arasındaki farkı gözlemlemek oldukça öğreticidir. Aşağıdaki örnekte, orijinal ve eşitlenmiş görüntülerin yan yana yerleştirilmiş hâlini incelemek, kontrastın nasıl değiştiğini daha rahat anlamamızı sağlar.
plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1)
plt.imshow(image, cmap='gray')
plt.title('Orijinal Görüntü')
plt.axis('off')
plt.subplot(1, 2, 2)
plt.imshow(equalized_image, cmap='gray')
plt.title('Eşitlenmiş Görüntü')
plt.axis('off')
plt.show()
Bu görselleştirme ile, histogram eşitlemenin nasıl bir sonuç ortaya koyduğunu açık bir şekilde görebilirsiniz. Orijinal görüntüdeki detaylar daha fazla görünür hale gelirken, eşitlenmiş görüntüde daha geniş bir kontrast aralığı elde etmemiz mümkün olacaktır.
Uygulama Alanları
Histogram eşitleme, birçok alanda sıklıkla kullanılmaktadır. Örneğin, tıbbi görüntüleme, uzaktan algılama, ve sanayi uygulamaları gibi farklı sektörlerde bu teknik sayesinde görüntü kalitesi iyileştirilmektedir. Düşük kontrastlı görüntülerde uygulandığında, gidişatı daha belirgin hale getirmekte ve gerekli ayarlamaların daha iyi analiz edilmesine olanak tanımaktadır.
Özellikle tıbbi görüntülerde, belirli patolojilerin ve anormalliklerin daha net görünmesini sağladığı için histogram eşitleme, sağlık alanında büyük bir öneme sahiptir. Akciğer radyografileri ve MRI görüntüleri gibi farklı görüntü türlerinde bunun avantajları görülmektedir. Aynı zamanda, makine öğrenmesi alanında da veri ön işleme aşamasında görüntülerin daha iyi kullanılmasını sağlar.
Alternatifler ve Gelişen Yöntemler
Histogram eşitlemenin yanı sıra, gelişmiş yöntemler de mevcuttur. Örneğin, adaptif histogram eşitleme (CLAHE), daha iyi sonuçlar elde etmek için kullanılabilir. Bu yöntem, görüntünün yalnızca belirli bölgelerine eşitlenmiş histogram uygulanarak kontrast iyileştirmesi yapmaktadır. Türkiye genelinde oldukça popüler bir uygulama olan bu ortalamalar, konvansiyonel histogram eşitlemenin getirdiği aşırı parlaklık ve gölgeler problemini minimize etmektedir.
Sonuç olarak, histogram eşitleme güçlü bir görüntü iyileştirme tekniğidir ve Python gibi dillerde kolayca uygulanabilir. Bu yazıda sunduğumuz örnek ile, kendi projelerinizde görüntü işlemenin nasıl kolay ve etkili bir şekilde yapılabileceğini görebilirsiniz. Yeni teknolojilere açık olmak ve denemelerinize devam etmek, bu alandaki becerilerinizi artıracaktır.
Sonuç
Umarım bu yazı, histogram eşitleme konusunu anlamanıza ve Python ile nasıl pratik yapabileceğinizi keşfetmenize yardım etmiştir. Görüntü işleme, geniş ve sürekli gelişen bir alandır; bu nedenle öğrendiklerinizle kendi projelerinizi geliştirmenizi bekliyoruz. Tüm bu bilgiler ışığında, Python ile histogram eşitleme işlemini etkin bir şekilde kullanarak, düşük kontrastlı görüntülerinizi iyileştirebilir ve gelişmiş bir görüntü kalitesi elde edebilirsiniz.
Yeni projeleriniz ve çalışmalarınız için başarılar dilerim!