29 Ağustos 2017 Salı

OPENCV DERSLERİ (DERS:23) HİSTOGRAM PART-3-2D HİSTOGRAMLAR

2D HİSTOGRAMLAR

    Daha önceki histogram derslerinde işlenilen konular aslında tek boyutlu histogram olarak adlandırılır.Bunun nedeni ise sadece gri tonlamaları kontrol etmesidir. Fakat 2 boyutlu histogramlarda iki özellik göz önüne alınır.Bu özellikler renk (Hue) ve dolgunluk (saturation) değerleridir. 


     Hue ve Saturation Nedir?
        Öncelikle HSV renk uzayından bahsedecek olursak HSV(Hue,Saturation,Value) renkleri sırasıyla renk özü, doygunluk ve parlaklık olarak tanımlar.
            Hue(Renk Özü): Rengin baskın dalga uzunluğunu belirler.Açısal bir değerdir(0-360). Bazı uygulamalarda 0-100 arası olağanlaştırılır. 
            Saturation(Doygunluk): Rengin canlılığını belirler.Yüksek doygunluk canlı renklere neden olurken,düşük doygunluk resmin gri tonlamaya yaklaşmasına neden olur.
        Aşağıdaki iki resim HSV renk uzaylarını göstermektedir.

       



OPENCV'DE 2D HİSTOGRAM

    OpenCV'de bu işlem oldukça basittir. Bu işlem cv2.calcHist() fonksiyonu kullanılarak yapılır. Renk histogramlarını bulmak için görüntü renklerini BGR formatından HSV formatına çevirmek gereklidir.Bu fonksiyonun parametreleri şunlardır;
    ➤Kanallar: [0,1] çünkü hem H hemde S düzleminde işlemek zorundadır.
    ➤Kutular: [180,256] 180 H düzlemi 256 S düzlemi içindir. Siz bu değerleri gerekli şekilde değiştirebilirsiniz.
    ➤Menzil: [0,180,0,256] Hue değeri 0 ile 180 arasında Saturation değeri 0 ile 256 arasında değişmektedir.

    Kod ile gösterecek olursak;
import cv2
import numpy as np

img = cv2.imread('home.jpg')
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)

hist = cv2.calcHist([hsv], [0, 1], None, [180, 256], [0, 180, 0, 256])


NUMPY'DE 2D HİSTOGRAM

    Numpy 2D histogram için ayrı bir fonksiyon sunar. Bu fonksiyon np.histogram2d() dir.

    Kod ile gösterecek olursak;
import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('home.jpg')
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)

hist, xbins, ybins = np.histogram2d(h.ravel(),s.ravel(),[180,256],[[0,180],[0,256]])
    Burada birinci argüman H düzlemi,ikincisi S düzlemi,üçüncüsü kutu sayısı,dördüncüsü ise aralık derecesidir.

2D HİSTOGRAM ÇİZDİRME YÖNTEMİ

    Matplotlib Kullanımı;
        Örnek Resim:
        Kod:
import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('image.jpg')
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
hist = cv2.calcHist( [hsv], [0, 1], None, [180, 256], [0, 180, 0, 256] )

plt.imshow(hist,interpolation = 'nearest')
plt.show()
        Sonuç:


2 yorum:

  1. udemy de ders vermeyi düşünürmüsünüz. bence çok harika olur

    YanıtlaSil
    Yanıtlar
    1. keşke maalesef vaktim olamadığında burayla bile ilgilenemiyorum.Güzel yorumunuz için teşekkür ederim ilk fırsatta udemy'e geçiş yapacağım

      Sil