Histogram Eşitleme

Elbette, histogram eşitleme (histogram equalization) görüntü işlemede kullanılan, görüntünün kontrastını artırmayı amaçlayan bir tekniktir.

İşte temel kavramları ve çalışma prensibi:


🎨 Histogram Eşitleme Nedir?

Histogram eşitleme, bir görüntünün sahip olduğu parlaklık değerlerinin (gri seviyeler) dağılımını daha geniş bir alana yayarak kontrastı artırmak için kullanılan bir yöntemdir.

  • Amaç: Görüntüdeki parlaklık değerlerinin belirli bir aralıkta (örneğin, çok karanlık veya çok aydınlık) yoğunlaşması nedeniyle düşük kontrasta sahip olduğu durumlarda, bu değerleri tüm dinamik aralığa (genellikle 0-255) daha eşit bir şekilde dağıtmaktır.

  • Sonuç: Daha belirgin detaylara sahip, görsel olarak daha çekici bir görüntü elde edilir.


📊 Çalışma Prensibi

Histogram eşitleme, görüntünün kümülatif dağılım fonksiyonu (CDF) kullanılarak bir dönüşüm haritası oluşturulması esasına dayanır.

1. Görüntü Histogramının Hesaplanması

Öncelikle, orijinal görüntünün histogramı hesaplanır. Bu, görüntüdeki her bir gri seviye değerinin (örneğin, 0'dan 255'e) kaç kez bulunduğunu gösteren bir grafiktir.

2. Olasılık Dağılım Fonksiyonunun (PDF) Hesaplanması


Her gri seviyesinin $(r_k)$ görülme olasılığı (PDF) hesaplanır:

$$p_r(r_k) = \frac{n_k}{N}$$

Burada $n_k$, $r_k$ parlaklık değerine sahip piksel sayısı ve $N$, görüntüdeki toplam piksel sayısıdır.

3. Kümülatif Dağılım Fonksiyonunun (CDF) Hesaplanması

PDF'den yola çıkılarak kümülatif dağılım fonksiyonu (CDF) hesaplanır. CDF, belirli bir parlaklık seviyesine kadar olan tüm olasılıkların toplamıdır:

$$CDF(r_k) = \sum_{j=0}^{k} p_r(r_j)$$

4. Dönüşüm Fonksiyonu (Eşitleme)

CDF, parlaklık seviyelerini dönüştürmek için kullanılan dönüşüm fonksiyonunu ($T(r)$) oluşturur. Bu dönüşüm, orijinal gri seviyesini ($r$) yeni, eşitlenmiş gri seviyesine ($s$) eşler:

$$s = T(r) = \lfloor (L-1) \cdot CDF(r) \rfloor$$

Burada:

  • $L$, maksimum gri seviye sayısıdır (örneğin 8-bit görüntüler için $L=256$).

  • Dönüşüm, parlaklık değerlerini $\mathbf{[0, L-1]}$ aralığına sıkıştırır.

5. Yeni Görüntünün Oluşturulması

Son adımda, bu dönüşüm fonksiyonu kullanılarak orijinal görüntüdeki her pikselin değeri değiştirilir ve yeni, eşitlenmiş görüntü oluşturulur. Yeni görüntünün histogramı, ideal olarak tüm dinamik aralığa daha eşit bir şekilde yayılmış olacaktır.


💡 Kullanım Alanları

  • Tıbbi Görüntüleme: Röntgen ve MR gibi görüntülerde kontrastı artırarak tanıya yardımcı olmak.

  • Uydu Görüntüleme: Hava koşulları veya düşük ışık nedeniyle kontrastı azalmış görüntüleri netleştirmek.

  • Fotoğrafçılık: Düşük ışıkta çekilmiş veya gölgeli alanları ortaya çıkarmak için.


# pip install opencv-python matplotlib
import cv2
import numpy as np
import os
from matplotlib import pyplot as plt

def histogram_esitleme_uygula(resim_yolu):
"""
Belirtilen yoldaki resmi yükler, histogram eşitleme uygular
ve orijinal ile işlenmiş resimleri gösterir.
"""
# 1. Resmi Yükle
# cv2.IMREAD_COLOR: Renkli yükler (Varsayılan)
# cv2.IMREAD_GRAYSCALE: Gri tonlamalı yükler
try:
orijinal_resim = cv2.imread(resim_yolu)
if orijinal_resim is None:
print(f"Hata: Resim dosyası bulunamadı veya açılamadı: {resim_yolu}")
return
except Exception as e:
print(f"Resim yüklenirken bir hata oluştu: {e}")
return

# 2. Resmi Gri Tonlamaya Çevir
# Histogram eşitleme, tek kanallı görüntülerde (gri tonlama) en iyi sonucu verir.
gri_resim = cv2.cvtColor(orijinal_resim, cv2.COLOR_BGR2GRAY)

# 3. Histogram Eşitleme Uygula (Equalization)
esitlenmis_resim = cv2.equalizeHist(gri_resim)

# 4. Sonuçları Göster
# Orijinal ve işlenmiş resmi yan yana göster
cv2.imshow("Orijinal Resim (Gri Tonlama)", gri_resim)
cv2.imshow("Esitlenmis Resim", esitlenmis_resim)

# 5. Histogramları Çizdir (İsteğe Bağlı Görselleştirme)
# matplotlib kullanarak orijinal ve eşitlenmiş resmin histogramlarını çizdirelim
plt.figure(figsize=(10, 5))

# Orijinal Histogram
plt.subplot(121)
plt.hist(gri_resim.flatten(), 256, [0, 256], color='r')
plt.title('Orijinal Resim Histogramı')
plt.xlabel('Piksel Değeri')
plt.ylabel('Piksel Sayısı')

# Eşitlenmiş Histogram
plt.subplot(122)
plt.hist(esitlenmis_resim.flatten(), 256, [0, 256], color='b')
plt.title('Eşitlenmiş Resim Histogramı')
plt.xlabel('Piksel Değeri')
plt.ylabel('Piksel Sayısı')
plt.tight_layout()
plt.show()

# Kullanıcı bir tuşa basana kadar bekle
cv2.waitKey(0)
cv2.destroyAllWindows()


# --- Kodu Çalıştırma ---

# Lütfen bu kısmı kendi resim dosyanızın yolu ile değiştirin.
RESIM_DOSYASI_YOLU = '2.jpeg' #'ornek_resim.jpg'

# Not: Eğer renkli resimde eşitleme yapmak isterseniz, genellikle YUV/HSV renk uzayında
# Sadece parlaklık (L veya V) kanalına eşitleme uygulanır.

histogram_esitleme_uygula(RESIM_DOSYASI_YOLU)

Yorumlar

Bu blogdaki popüler yayınlar

2025-2026 Bahar BAUN, Balıkesir MYO, Bilgisayar programcılığı, seçilecek dersler

Dart dilinin değişkenleri