본문 바로가기
[대학원] AI/Computer Vision

HoG (Histogram of Oriented Gradients)

by 지수토리 2025. 9. 11.
728x90
💡 이미지를 Cell 단위로 나누어, 각 셀에서 edge의 방향과 크기 계산 후, 방향 정보를 담은 히스토그램을 정리해 local shape을 표현하는 것.

 

HoG는 이미지 안의 shape을 "edge direction" 분포 형태의 "압축된 의미있는 특징 벡터"로 표현하는 것.

 

그럼 이걸 왜 구하나?

 

모델에 raw 그대로 넣으면 노이즈도 많고 차원이 큰 문제가 있음.

그래서, 이미지에서 의미 있는 정보를 뽑아 "feature vector"로 변환해서 object detection 등을 수행하면 훨씬 효과적임.

1. Calculate Gradient Images

  • 이미지 각 픽셀의 수직 & 수평 gradient 계산 -> 크기 & 방향 계산.
    $$G_x = I(x+1,y)-I(x-1,y), G_y = I(x,y+1)-I(x,y-1)$$
    $$M(x,y) = \sqrt{G^2_x+G^2_y}, \theta (x,y) = \tan^{-1}(\frac{G_y}{G_x})$$

X-gradient (left), Y-gradient (center), and magnitude, respectively

2. Calculate Histograms of Gradient in 8x8 Cells

  • 이미지를 Cell (e.g., 8x8 픽셀)로 나눔.
    • 이 예시에서는 8x8x2 (magnitude, direction) = 128 값을 생성.
  • 각 셀에서 모든 픽셀 방향을 일정 개수의 bin으로 양자화함.
    • 9 bin으로 나눴을 때, 각 픽셀의 direction 값이 해당되는 구간에 magnitude값을 더함.
    • 보통, bilinear interpolation 써서 값이 해당되는 구간에 비율을 나눠 더함.

3. 16x16 Block Normalization

  • 조명 변화에 강건하기 위해, 여러 cell (e.g., 2x2 셀)을 묶어 Block을 형성하고 정규화 (e.g., L2 norm)함.

4. Calculate HoG Feature Vector

  • 지금까지 구한 히스토그램들을 하나의 큰 벡터로 이어 붙이는 과정.
  • 위 예제에서 한 블록 = 2x2 셀이므로, 한 블록 당 4개의 히스토그램(9개의 bin 구성)을 가짐 -> 블록 하나가 36차원 벡터로 구성.
  • 전체 이미지에서 블록이 총 7x15 = 105개가 있으니, 최종 36x105 = 3780 차원의 최종 HoG 특징 벡터로 표현됨.
  • 이후, 이 feature vector과 label로 이루어진 쌍이 SVM 분류기 등을 통해 학습됨.
반응형

'[대학원] AI > Computer Vision' 카테고리의 다른 글

Intro to Deep Learning  (0) 2025.09.11
SIFT (Scale Invariant Feature Transform)  (0) 2025.09.11