· Hakan Çelik · OpenCV / İleri Konular · 3 dk okuma
2B Histogramlar

OpenCV Serisi 25/64
- 1. Boya Fırçası Olarak Fare
- 2. Canny Kenar Algılama
- 3. Görüntü Geçişleri
- 4. Görüntü Piramitleri
- 5. Görüntülerde Aritmetik İşlemler
- 6. Görüntülerle İlgili Temel İşlemler
- 7. Görüntünün Geometrik Dönüşümleri
- 8. Görüntüyü Yumuşatma - ( Smoothing Images )
- 9. Histogramlar
- 10. Konturler ( Contours )
- 11. Morfolojik Dönüşümler
- 12. Opencv Nedir Ve Kurulumu
- 13. Opencv Resim Işlemleri
- 14. Opencv Video Işlemleri
- 15. Opencv'de Çizim Fonksiyonları
- 16. Performans Ölçüm Ve Geliştirme Teknikleri
- 17. Renk Alanlarını Değiştirme
- 18. Renk Paleti Olarak Parça Çubuğu ( Trackbar )
- 19. Resim Eşikleme
- 20. Şablon Eşleştirme
- 21. Hough Doğru Dönüşümü
- 22. Hough Daire Dönüşümü
- 23. Fourier Dönüşümü
- 24. Histogram Eşitleme
- 25. 2B Histogramlar
- 26. Histogram Geri Projeksiyonu
- 27. Kontur Özellikleri
- 28. Kontur Nitelikleri
- 29. Konturlerle Daha Fazla İşlev
- 30. Kontur Hiyerarşisi
- 31. GrabCut ile Etkileşimli Ön Plan Çıkarma
- 32. Watershed Algoritması ile Görüntü Segmentasyonu
- 33. Özellikleri Anlamak
- 34. Harris Köşe Tespiti
- 35. Shi-Tomasi Köşe Dedektörü ve İzlenecek İyi Özellikler
- 36. SIFT'e Giriş (Ölçek Değişmez Özellik Dönüşümü)
- 37. SURF'e Giriş (Hızlandırılmış Sağlam Özellikler)
- 38. Köşe Tespiti için FAST Algoritması
- 39. BRIEF — İkili Sağlam Bağımsız Temel Özellikler
- 40. ORB (Yönlü FAST ve Döndürülmüş BRIEF)
- 41. Özellik Eşleştirme
- 42. Özellik Eşleştirme + Nesneleri Bulmak için Homografi
- 43. Meanshift ve Camshift ile Nesne Takibi
- 44. Optik Akış
- 45. Arka Plan Çıkarma
- 46. Kamera Kalibrasyonu
- 47. Poz Tahmini
- 48. Epipolar Geometri
- 49. Stereo Görüntülerden Derinlik Haritası
- 50. k-En Yakın Komşuyu Anlamak
- 51. kNN ile El Yazısı OCR
- 52. SVM'yi Anlamak
- 53. SVM ile El Yazısı OCR
- 54. K-Ortalamalar Kümeleme'yi Anlamak
- 55. OpenCV'de K-Ortalamalar Kümeleme
- 56. Görüntü Gürültü Giderme
- 57. Görüntü Onarımı (Inpainting)
- 58. Yüksek Dinamik Aralık (HDR) Görüntüleme
- 59. Haar Cascade ile Yüz Tespiti
- 60. pip ile OpenCV Kurulumu
- 61. Ubuntu'da OpenCV-Python Kurulumu
- 62. Fedora'da OpenCV-Python Kurulumu
- 63. Windows'ta OpenCV-Python Kurulumu
- 64. OpenCV-Python Bağlayıcıları Nasıl Çalışır?
2B Histogramlar
Hedefler
Bu bölümde öğrenecekleriniz:
- 2B histogramları bulmak ve çizmek
Giriş
İlk makalede tek boyutlu histogramı hesaplayıp çizdik. Tek boyutlu olmasının nedeni yalnızca bir özelliği — pikselin gri tonlama yoğunluk değerini — dikkate almamızdır. Ancak iki boyutlu histogramlarda iki özelliği göz önünde bulundurursunuz. Genellikle iki özelliğin her pikselin Ton (Hue) ve Doygunluk (Saturation) değerleri olduğu renk histogramlarını bulmak için kullanılır.
OpenCV-Python örneklerinde renk histogramları için hazır bir örnek kod mevcuttur (samples/python/color_histogram.py). Bu renk histogramının nasıl oluşturulacağını anlamaya çalışacağız; bu Histogram Geri Projeksiyon gibi ileri konuları anlamak için de faydalı olacaktır.
OpenCV’de 2B Histogram
Oldukça basittir ve aynı cv2.calcHist() fonksiyonu kullanılarak hesaplanır. Renk histogramları için görüntüyü BGR’den HSV’ye dönüştürmemiz gerekir (1B histogram için BGR’den Gri tonlamaya dönüştürmüştük). 2B histogramlar için parametreler şu şekilde değişir:
- channels = [0, 1] — Hem H hem de S düzlemini işlememiz gerektiği için.
- bins = [180, 256] — H düzlemi için 180, S düzlemi için 256.
- range = [0, 180, 0, 256] — Ton değeri 0-180 arasında, Doygunluk 0-256 arasındadır.
Koda bakın:
import numpy as np
import cv2 as cv
img = cv.imread('home.jpg')
assert img is not None, "Dosya okunamadı, os.path.exists() ile kontrol edin"
hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV)
hist = cv.calcHist([hsv], [0, 1], None, [180, 256], [0, 180, 0, 256])NumPy’da 2B Histogram
NumPy da bunun için özel bir fonksiyon sağlar: np.histogram2d() (1B histogram için np.histogram() kullandığımızı hatırlayın):
import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
img = cv.imread('home.jpg')
assert img is not None, "Dosya okunamadı, os.path.exists() ile kontrol edin"
hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV)
h, s, v = cv.split(hsv)
hist, xbins, ybins = np.histogram2d(h.ravel(), s.ravel(), [180, 256], [[0, 180], [0, 256]])İlk argüman H düzlemi, ikincisi S düzlemi, üçüncüsü her biri için kutu sayısı, dördüncüsü ise aralıklarıdır.
2B Histogramları Çizmek
Yöntem 1: cv2.imshow() Kullanmak
Elde ettiğimiz sonuç 180×256 boyutunda iki boyutlu bir dizidir. Onu cv2.imshow() ile gösterebilirsiniz. Ancak gri tonlamalı bir görüntü olacak ve farklı renklerin Ton değerlerini bilmiyorsanız hangi renklerin mevcut olduğu hakkında çok az fikir verecektir.
Yöntem 2: Matplotlib Kullanmak
Farklı renk haritalarıyla 2B histogramı çizmek için matplotlib.pyplot.imshow() kullanabiliriz. Bu bize farklı piksel yoğunluğu hakkında çok daha iyi bir fikir verir.
Not: Bu fonksiyonu kullanırken, daha iyi sonuçlar için interpolasyon bayrağının
nearestolmasını unutmayın.
Örnek koda bakın:
import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
img = cv.imread('home.jpg')
assert img is not None, "Dosya okunamadı, os.path.exists() ile kontrol edin"
hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV)
hist = cv.calcHist([hsv], [0, 1], None, [180, 256], [0, 180, 0, 256])
plt.imshow(hist, interpolation='nearest')
plt.show()Aşağıda girdi görüntüsü ve renk histogram çizimi yer almaktadır. X ekseni S değerlerini, Y ekseni ise Ton değerlerini göstermektedir:

Histogramda H ≈ 100 ve S ≈ 200 civarında yüksek değerler görebilirsiniz. Bu gökyüzünün mavisiyle örtüşür. Benzer biçimde H ≈ 25 ve S ≈ 100 civarında başka bir zirve görülebilir; bu da sarayın sarısıyla örtüşür. GIMP gibi herhangi bir resim düzenleme aracıyla doğrulayabilirsiniz.
Yöntem 3: OpenCV Örnek Stili
OpenCV-Python örneklerinde renk histogramı için örnek bir kod bulunmaktadır (samples/python/color_histogram.py). Bu kodu çalıştırırsanız histogramın ilgili rengi de gösterdiğini göreceksiniz; yani renk kodlu bir histogram çıktısı üretir. Yazar HSV renk haritası oluşturmuş, bunu BGR’ye dönüştürmüş ve elde edilen histogram görüntüsünü bu renk haritasıyla çarpmıştır. Sonuç, yukarıdakiyle aynı görüntü için aşağıdaki gibidir:

Histogramda hangi renklerin bulunduğunu açıkça görebilirsiniz: mavi var, sarı var ve satranç tahtasından kaynaklanan biraz beyaz da mevcut.
Hakan Çelik


