본문 바로가기
Computer Vision

[CV] Histogram of Oriented Gradients

by hymndaniel 2023. 2. 23.
Feature Descriptor
이미지에 대한 표현 혹은 유용한 정보만을 추출하여 이미지를 단순화한 패치이다. 
그럼 유용한 정보란 무엇인가? 객체 검출 문제에서 단추를 찾아내는 예를 생각해보자. 이 경우, 단추의 형태를 알 수 있는 경계선이 유용한 정보가 될 것이다. 색상은 여기에서 중요한 정보가 아니다. 그리고 다른 동그란 물체(차의 바퀴, 동전 등)와 차별적인 특성을 가지고 있어야 한다.
Gradients of image
이미지에서 기울기는 x, y 방향에서 픽셀 강도(주파수) 차이를 계산한 다음 이 값을 결합해여 각 픽셀에서 기울기 벡터를 형성한다. 기울기를 계산하는 방법으로는 대표적으로 Canny 엣지 검출기, Sobel 필터가 있다.
Sobel 연산자는 두개의 3x3 커널로 이미지를 컨볼루션 연산을 하여 이미지 기울기를 계산하며 세부 단계는 다음과 같다.
1. 이미지를 Gray Scale로 변환(회색조가 아닌 경우).
2. Gx 커널로 이미지를 컨볼루션하여 이미지의 x-derivative를 계산.
3. Gy 커널로 이미지를 컨벌루션하여 이미지의 y-derivative를 계산.
4. 다음 공식을 사용하여 각 픽셀에서 그래디언트의 크기를 계산 : mag = sqrt(Gx^2 + Gy^2)
5. 다음 공식을 사용하여 각 픽셀에서 그래디언트의 방향을 계산 : theta = atan2(Gy, Gx)

결과 이미지는 검정색 배경에 흰색 선으로 원본 이미지의 가장자리를 표시
reference : chatGPT
HOG feature descriptor
HOG 특징 설명자는 이미지에서 기울기 방향의 분포(히스토그램)가 특징으로 사용된다.
이미지의 기울기(x와 y의 도함수)는 가장자리와 모서리 주변에서 가장 크다. 평평한 영역보다 가장자리와 모서리가 물체 모양에 대한 정보를 훨씬 더 많이 담고 있는 유용한 정보이다.
HOG 계산
  1. 이미지의 기울기 계산
    1. opencv의 Sobel 연산자를 사용하면 얻을 수 있음
  2.  8×8 셀에서 그라디언트 히스토그램 계산하기 
    1. 셀을 나누는 이유는 간결한 표현을 하기 위해서이다. 8x8 이미지 패치에는 8x8x3=192개의 픽셀 값이 포함된다. 이 패치의 기울기는 픽셀당 2개의 값(크기와 방향)을 포함하여 총 8x8x2=128개의 숫자를 더한다.
    2. 8x8 셀에 기울기 히스토그램 그리기
      1. 히스토그램에는 각도 0, 20, 40 ... 160에 해당하는 9개의 구간이 있다. 
      2. Gradient Direction 행렬에서 방향이 포함된 구간에 Gradient Magnitude 행렬의 같은 위치의 Magnitude 값을 입력한다(투표한다고 표현한다).  

중앙의 이미지는 기울기를 나타내는 화살표가 겹쳐있는데, 화살표는 기울기의 방향을 나타내고 길이는 기울기의 크기를 나타낸다. 화살표의 방향은 강도의 변화 방향, 크기는 차이가 얼마나 큰지 나타낸다.

 

먼저 파란색으로 둘러싸인 픽셀을 보면, 각도(방향)는 80도, 크기는 2이므로 5번째 빈에 2를 더한다. 빨간색으로 둘러싸인 픽셀의 그라데이션은 각도가 10도이고 크기가 4이다. 10도는 0과 20의 중간이므로 픽셀별 투표는 두 개의 구간차원으로 균등하게 나뉜다.
주의해야 할 세부 사항으로 각도가 160도보다 크면 160도에서 180도 사이이며, 아래 예시에서 각도가 165도인 픽셀은 0도 구간과 160도 구간에 비례하여 더해줘야한다.

 
 
 

8×8 셀에 있는 모든 픽셀의 기여도를 합산하여 히스토그램을 생성

 

Reference

https://learnopencv.com/histogram-of-oriented-gradients/

 

Histogram of Oriented Gradients explained using OpenCV

Histogram of Oriented Gradients (HOG) is a feature descriptor, used for object detection. Read the blog to learn the theory behind it and how it works.

learnopencv.com

 

 
728x90