Histogram of Gradient (HoG)

December 6, 2017    Object Detection

어떻게 edge를 검출 할 수 있을까?

  • 픽셀의 변화량이 가장 큰 이웃($k=1$)을 고려할 경우
  • 아래의 그림과 같이 변화량이 threshold이상인 것만 고려 할 경우 edge를 검출 할 수 있음


Histogram of Gradient

Histogram of Gradient은 픽셀의 변화량의 각도와 크기를 고려하여 히스토그램 형태의 feauture를 추출하는 방법

  • Histogram of Gradient (Keypoint Descriptor)는 픽셀값의 변화량을 나타내는 척도로 주로 이미지의 texture를 표현
  • 위 그림은 가우시안 필터($\sigma=0.1$)를 사용해서 weighted magnitude를 표현한 그림을 나타냄

가우시안 필터란?

아래의 그림과 같이 커널의 weights가 중심점에서 부터 가우시안 분포를 따르는 것임

  • $\sigma = 2$ 인 30x30 Gaussian kernel(왼쪽그림)
  • $\sigma = 5$ 인 30x30 Gaussian kernel(오른쪽 그림)


Histogram of Gradient: 이미지 안의 픽셀들의 방향의 변화(intensity)를 나타냄

  • 3 x 3 kernel를 주로 사용

  • 커널이 움직일때 마다 다음과 같은 연산이 이루어 지며, 커널의 중심점을 기준으로 인접한 행과 열의 차이를 $dx$, $dy$라고 정의
  • 아래의 식 $I(c,r)$은 RGB값을 intensity로 바꿔주는 식을 나타냄

$$I(c,r)=0.2125*r+0.7152*g+0.0722*b$$

  • 1번 픽셀은 중심점$(c,r)$으로 부터 한 칸 위쪽인 ($c$, $r-1$)인 곳에 위치함
  • 2번 픽셀은 중심점$(c,r)$으로 부터 한 칸 왼쪽인 ($c-1$, $r$)인 곳에 위치함
  • 3번 픽셀은 중심점$(c,r)$으로 부터 한 칸 아래쪽인 ($c$, $r+1$)인 곳에 위치함
  • 4번 픽셀은 중심점$(c,r)$으로 부터 한 칸 오른쪽인 ($c+1$, $r$)인 곳에 위치함 앞에서 설명한 $dx$, $dy$를 이용하여 Gradient orientation과 Gradient magnitude를 구하고자 함
  • Gradient orientation: 그래디언트의 방향

$$\theta = tan^{-1}(\frac{dy}{dx})$$

  • Gradient magnitude: intensity의 변화량(크기)

$$magnitude = \sqrt{dy^2+dx^2}$$

아래의 그림처럼 픽셀들의 값에 따라 다양한 Gradient orientation(기울기)를 가질 수 있다는 것을 확인 할 수 있음


Gradient의 크기와 방향을 구하는 예제

  • 예제 1) Gradient orientation & Gradient magnitude

  • 예제 2) Gradient orientation & Gradient magnitude


Histogram for gradients

그럼, 최종적으로 Gradient orientation & Gradient magnitude을 이용해서 히스토그램 (HoG)를 구하는 방법을 살펴보자.

  • 첫번째 이미지을 살펴보면 object(사람)의 경계면을 따라 gradient orientation이 다르다는 것을 확인 할 수 있음
  • 3x3 필터가 슬라이딩 하면서 각 픽셀마다 gradient orientation을 구함
  • 두번째 그림의 격자는 수는 히스토그램의 수를 의미
  • 위 예제는 3x3 local image를 하나의 히스토그램으로 생성
  • 일반적으로 8x8 local image에 대해서 생성 (e.g. 아래의 그림)
  • 각 히스토그램을 Concatenation하여 하나의 벡터로 만듬 (vectorization)
  • 그 벡터는 Keypoint Descriptor로 이미지 분석의 설명변수로 사용됨

구체적으로, 히스토그램의 각 Bin에 어떤 값들이 채워지는지 확인해 보자.

  • 왼쪽 예제
    • 위에서 언급한거와 같이 한 이미지에 대해서 Gradient orientation과 Gradient magnitude를 구할 수 있음
    • 구간의 범위가 [0,20,40,…,100]으로 쪼개져 있으며, 총 구간의 수(Bin)은 8개임
    • 특정 픽셀이 Orientation: $80$, Magnitude: $2$ 이면, Bin구간의 범위 중 80에 해당하는 계급구간에 Magnitude: 2를 채움
    • 특정 픽셀이 Orientation: $10$, Magnitude: $4$ 이면, Bin구간의 범위 중 0과 20 계급구간 사이에 10이 해당하므로, Magnitude를 각각 $2$($=\frac{20}{10}$)를 가져감
  • 오른쪽 예제
    • 특정 픽셀이 Orientation: $165$, Magnitude: $85$ 이면, Bin구간의 범위 중 160과 0(180) 계급구간 사이에 165가 해당하므로 Magnitude를 가까운 계급에 가중치를 반영하여 $63.75$($=85 \times \frac{3}{4}$)를 160 Bin에 나머지 Magnitude $21.25$($=85 \times \frac{1}{4}$) 를 0 bin에 채움

DSBA