Macademia'nın robotik ve mühendislik programı · ücretsiz seviye tespiti ve kişisel öğrenme yolu

2. ünite / 12

Nokta işlemleri ve histogram: parlaklık, karşıtlık, gama, eşitleme

g = α·f + β, gama düzeltmesi, bakış tablosu (LUT), histogram, eşitleme ve CLAHE.

Bu ünitenin sonunda

  • Parlaklık, karşıtlık ve gamayı bir piksel dönüşümü olarak yazmak
  • Histogramdan bir görüntünün karanlık, aydınlık ya da düşük karşıtlıklı olduğunu okumak
  • Histogram eşitlemenin birikimli dağılımla nasıl çalıştığını açıklamak
  • Global eşitleme ile CLAHE arasında seçim yapmak

Ders notları

Nokta işlemi, her pikselin yeni değerinin yalnız kendi eski değerine bağlı olduğu dönüşümdür. Komşulara bakılmaz; bu yüzden 256 girişlik bir bakış tablosu (LUT) ile çok hızlı yapılır.

g(x, y) = doyur(α · f(x, y) + β)    gama: g = 255 · (f / 255)γ

α karşıtlığı (eğim), β parlaklığı (kaydırma) belirler. Sonuç 0–255 dışına çıkarsa doyurulur (kırpılır): bilgi kaybolur. Gama doğrusal değildir: γ < 1 koyu tonları açar, açıkları az değiştirir. Kameralar ve ekranlar zaten gama ile çalışır.

Histogram

Histogram her gri değerden kaç piksel olduğunu sayar. Sola yığılmış histogram karanlık, sağa yığılmış aydınlık, dar bir tepe düşük karşıtlıklı görüntü demektir. Histogram konumu söylemez: iki çok farklı görüntünün histogramı aynı olabilir.

Eşitleme

Histogram eşitleme, birikimli dağılımı (CDF) dönüşüm olarak kullanır: g = 255 · (CDF(f) − CDFmin) / (N − CDFmin). Sık görülen değerler arasına daha çok aralık açılır, dar histogram yayılır. Gürültüyü de büyütür. CLAHE görüntüyü karolara bölüp her karoda sınırlandırılmış eşitleme yapar; yerel ayrıntı için daha iyidir.

Oyun alanı

Parlaklık, karşıtlık, gama ve histogram

Her piksel kendi başına dönüşür: g = α·f + β, sonra gama. Histogram altta: önce (gri) ve sonra (renkli). Histogram eşitlemeyi açıp dar bir histogramın nasıl yayıldığını gör.

Önce
Sonra
Gri histogram: önce (gri) ve sonra (renkli)
önce: ort 73.2, std 14.9 sonra: ort 73.2, std 14.9 std × 1.00

Kendin dene

Loş sahneyi aç: histogram nerede yığılmış? Önce yalnız α ve β ile şekilleri seçilir yap, sonra sıfırla ve yalnız gama ile dene. Son olarak eşitlemeyi aç: önce/sonra histogramlarını karşılaştır ve sağ alttaki standart sapma değerinin kaç kat arttığını yaz. α = 3 yapınca açık şekillerde ne kayboldu?

Kod

Python: parlaklık, karşıtlık, gama, histogram ve eşitleme
import cv2
import numpy as np

img = cv2.imread('girdi.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

alpha, beta = 1.4, -30                            # karşıtlık ve parlaklık
lin = cv2.convertScaleAbs(gray, alpha=alpha, beta=beta)   # doyuma kırpar, taşmaz

gamma = 0.6                                       # < 1 karanlıkları açar
lut = np.array([((i / 255.0) ** gamma) * 255 for i in range(256)]).astype(np.uint8)
gam = cv2.LUT(gray, lut)                          # 256 girişlik tablo: hızlı

hist = cv2.calcHist([gray], [0], None, [256], [0, 256]).ravel()
print('en sık gri değer:', int(hist.argmax()))
eq = cv2.equalizeHist(gray)                       # birikimli histogramı düzleştirir
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8)).apply(gray)
for name, im in [('gray', gray), ('lin', lin), ('gamma', gam), ('eq', eq), ('clahe', clahe)]:
    print(f'{name:6s} min={im.min():3d} max={im.max():3d} std={im.std():5.1f}')
cv2.imwrite('cikti.png', np.hstack([gray, eq, clahe]))

Sık yapılan hatalar

  • NumPy ile img * 1.5 yapıp uint8'e çevirmek: 255'i aşan değerler sarar. cv2.convertScaleAbs ya da np.clip kullan.
  • Eşitlemeyi renkli görüntünün üç kanalına ayrı ayrı uygulamak: renk dengesi bozulur. Parlaklık kanalında (YCrCb'de Y, LAB'de L) eşitle.
  • Histogram aynıysa görüntülerin benzer olduğunu sanmak: histogram uzamsal bilgi taşımaz.
  • Her probleme eşitleme uygulamak: zaten iyi pozlanmış görüntüde gürültüyü büyütür; ölçüm yapacaksan karşılaştırılabilirliği bozar.

Yazılım mühendisliği bağlantısı

Bakış tablosu klasik bir ön hesaplama örneğidir: pahalı bir fonksiyonu (üs alma) 256 kez hesapla, milyonlarca kez oku. Bu desen gömülü ve gerçek zamanlı yazılımda her yerdedir.

  • LUT'u saf bir fonksiyonla üret ve test et: monotonluk, uç değerler (0 → 0, 255 → 255 γ için).
  • Parametreleri (α, β, γ) koda gömme, yapılandırmaya taşı; sahadaki kamera değişince yeniden derlemek gerekmesin.

Kendini sına

  1. g = 2·f + 10 dönüşümünde f = 130 olan bir pikselin uint8 sonucu nedir (doyurmalı)?

  2. Histogramın tamamı 20–70 arasında olan bir görüntü için en doğru tarif hangisi?

  3. γ = 0,5 olan gama dönüşümü (g = 255·(f/255)^γ) ne yapar?

  4. CLAHE'nin global eşitlemeye göre üstünlüğü nedir?

Esc
  • PanelAna sayfaSayfa
  • ModüllerTüm modüllerSayfa
  • ParçalarParça ansiklopedisiSayfa
  • Mühendislik yoluBüyükler için robotik: 128 parça, 7 seviyeSayfa
  • Robotik dersi (ESOF 323)Üniversite robotik dersi, 14 haftaSayfa
  • Drone dersiBüyükler için: parça, simülasyon, yazılım; 10 üniteSayfa
  • Blok atölyesiSerbest blok programlamaAraç
  • Devre laboratuvarıSanal Arduino ve devreAraç
  • Robot arenasıSanal robot sürüşüAraç
  • OyunlarBloklarla 8 öğretici oyunAraç
  • Mikro Kart atölyesiSanal LED kartı bloklarla programlaAraç
  • Robot atölyesiMikro Kart'ı robota tak, bloklarla görev yapAraç