Yönlendirilmiş Gradyanların Histogramı (HOG) -Machine Learning

Burak Özdemir
3 min readMar 17, 2021

--

Bu yazıda HOG özellik tanımlayıcısından bahsedeceğim…,

İlk olarak özellik tanımlayıcı, bir görüntüden gereksiz bilgileri atarak görüntüyü basitleştiren bir görüntü yamasıdır.

HOG, nesne tespit amacıyla görüntü işlemede kullanılan bir özellik tamamlayıcısıdır. Bir nesnenin yapısına ve şekline odaklanır. Yani görüntünün renk tonu , doygunluğu gibi kısımlar ile ilgilenmez. Bu algortima pikselin bir kenar olup olmadığını belirleyebildiği gibi kenar yönünü de belirleyebilir. Bu belirleme işlemi çerçeve(ROI) içerisindeki piksellerin gradyanı çıkarılarak yapılır. Bu yöntem ‘yerelleştirilmiş bölümler’ (yani beli bir alan alınarak) halinde uygulanır. Son olarakda algoritma tüm bu bölgeler için ayrı ayrı (piksellerin gradyanları ve yönleri kullanılarak) histogram oluşturur.

HOG Algoritmasının Çalışma Mantığı;

1- Verilerin İşlenmesi;

Bu adımda görüntü önceden işlenir ve genişlik yükseklik oranı 1:2 olarak ayarlanır. Böyle bir zorunluluk olmamakla birlikte yamaların boyutları genelde 8*8 , 16*16 olduğu için görüntü boyutu olarak 64*128 tercih edilir.

2- Degradeleri (Yönleri X-Y) Hesaplama;

Bu adımda görüntüdeki her piksel için gradyan hesaplanır. Gradyanlar, x ve y yönlerindeki değişikliklerdir. Bu gradyan hesaplamalarından sonra sonuç olarak elimizde biri x yönündeki, biri y yönündeki gradyanları depolayan iki yeni matris bulunacaktır.

3- Büyüklüğü ve Yönü Hesaplama;

Bu adımda ise hesaplanan gradyan değerleri kullanılarak her piksel değerinin büyüklüğü ve yönü belirlenir. Bu hesaplama için pisagor teoremi kullanılır. Yani basit bir şekilde elimizdeki Gx ve Gy vektörlerinin kareleri toplamlarının karekökü bize piksel büyüklüğünü verecektir. Artanjant Gy/Gx ise bize piksel yönünüverecektir.

4- Gradyanların Histogramını Küçük Bölgelerde Hesaplama;

HOG algoritmasında histogramlar görüntünün tamamı için uygulanmaz. Bunun yerine görsel 8*8 tarzı oluşturulmuş küçük hücrelere ayrılarak her hücre için ayrı ayrı uygulanır.

5- Degradeleri Normalleştirme;

Görüntünün gradyanları genel aydınlatmaya duyarlıdır. Yani işlemlerden sonra görüntünün bir kısmı başka bir kısmından çok daha parlak olabilir. Bu sorunu 16*16 lık bloklar halinde gradyanları normalleştirerek çözebiliriz.

Poython ile HOG;

Şimdide bu algortima python yardımı ile örneklendirilmeye çalışılsın.

#kütüphanler eklenir
from skimage.io import imread, imshow
from skimage.transform import resize
from skimage.feature import hog
from skimage import exposure
import matplotlib.pyplot as plt
#görüntü okunur ve bastırılır
img = imread(‘/home/burakzdd/Desktop/BB-8.png’)
imshow(img)
#resmin boyutları bastırırlır
print(img.shape)

Görüntünün boyutları 500*350 olarak bulunur. Bu boyturlar yeniden istenilen boyurlarda şekillendirilebilir.

#görsel yeniden boyutlandırılır, görsel ve boyutları bastırılır
resized_img = resize(img, (128,64))
imshow(resized_img)
print(resized_img.shape)

Artık görsele rahatlıkla HOG işlemleriuygulanabilir.

#Görselin HOG özelliikleri oluşturuluyor
fd, hog_image = hog(resized_img, orientations=9, pixels_per_cell=(8, 8), cells_per_block=(2, 2), visualize=True, multichannel=True)
fd.shape
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(16, 8), sharex=True, sharey=True)
#Yeniden boyutlandırılan görsel bastırılır
ax1.imshow(resized_img, cmap=plt.cm.gray)
ax1.set_title(‘Giren Görsel’)
#Görüntüyü iyileştirmek için histogramı yeniden ölçeklendirilir
hog_image_rescaled = exposure.rescale_intensity(hog_image, in_range=(0, 10))
#HOG uygulanmış görsel bastırılır
ax2.imshow(hog_image_rescaled, cmap=plt.cm.gray)
ax2.set_title(‘HOG Uygulanmış Görsel’)
plt.show()

!Yararlanılan Kaynak[1]

--

--