코딩 및 기타/이미지

HOG ( Histogram of Oriented Gradients )

정지홍 2025. 1. 10. 13:14

서론

  • 이미지를 feature vector로 변환하는것은, 이를 머신러닝 알고리즘에 적용하기 전에 하는 전처리 단계중 하나이다.
    즉, image data를 가지고 ml 알고리즘에 넣기전에 전처리 하는 것은 전형적인 일이며, 그래야 알고리즘이 동작한다.
    • 위와 같은 과정을 거치는 이유는 image를 feature vector로 나타내는 것이 더 효율적이기 때문이다.
    • 이때 자주 사용하는 기법은 HOG , BoW가 존재한다. 
      • Histogram of Oriented Gradients ( 기울기를 지향하는 히스토그램? )
      • Bag-of-Words
  • 만약 20 X 20 pixel image가 있다면 opencv에서는 이를 길이가 400인 1D vector(feature)로 표현한다.
    • 하지만, 위의 과정은 각각의 pixel에 대해서 나타내며, ml알고리즘에서 매번 feedback받기에는 비 효율적이며, 특히 input feature data의 길이가 크면 클수록 더욱이 효율이 감소한다.

 

 

서론에서는 feature가 많아질수록 효율이 감소한다고 했다.

그러면 우리는 이러한 input data에 대해서 feature( 혹은 차원)을 줄여야한다.

  • 그래서 우리는 필요한 feature들이 뽑아내기 위해서 HOG나 Bow와 같은 기법을 사용한다.

 


 

이미지에서 기울기란?

  • 이미지의 색상 or 밝기 변화율을 나타내는 벡터이다.
  • 기울기는 수평,수직으로 나뉜다.
    • Gx가 수평이라면, 이미지의 가로 방향으로 픽셀값의 변화율을 계산한다.
      • sobel kernel을 가지고 계산함
      • 기울기가 작으면 주변 픽셀과 유사하다는것. 기울기가 크면 주변과 차이가 난다는것
    • Gy가 수직이라면, 이미지의 세로 방향으로 픽셀 값의 변화율을 계산한다.
      • 이것두 sobel kernel로 계산...
  • 기울기의 크기는 G = √(Gx² + Gy²) 로 계산됨
  • 기울기의 방향은  θ = arctan(Gy/Gx)로 계산됨

 


 

그래프1

 

HOG

  • 국소적인 기울기 방향을 분석해서 feature를 추출하는 기법
  • 과정
    • 1. 기울기 계산
      • 이미지에서 pixel간의 밝기 차이를 계산해서 edge와 텍스처 정보를 추출한다.
      • 일반적으로 sobel 연산자 를 사용 얻은 sobel filter를 사용해서, 각 픽셀의 기울기 값을 계산
        • 기울기 값에는 크기방향이 존재
          • 기울기의 크기는 경계의 강도를 의미. graident magnitude
          • 기울기의 방향은 경계의 방향을 나타냄. gradient direction
    • 2. 이미지를 작은 구역cell로 나눈다.
      • ex) 8x8 pixel크기의 cell
      • 각 cell에서 위에서 계산한 기울기 방향 정보를 히스토그램 형태로 표현함
    • 3. 히스토그램 계산
      • 각 cell에서 계산된 gradient direction을 여러개의 방향bin으로 나누고, 해당 0° ~ 20°, 20° ~ 40°, ..., 160° ~ 180°로 9개의 방향 bin을 사용할 수 있습니다. 를 누적해서 히스토그램을 만든다.
        • 여러 bin으로 나눈다??? 
          • 그래프1을 보면 기울기의 각도는 총 0~180˚으로 나올것이다. 그러면 예를 들어서 0° ~ 20°, 20° ~ 40°, ..., 160° ~ 180°로 한다면 총 9개의 방향 bin을 만들 것이다.
        • graident magnitude를 누적한다???
          • 각 pixel의 graident magnitude를 해당되는 gradient directionbin에 누적시킨다.
            즉, 기울기의 크기는 히스토그램 값의 가중치로 이용되는거임. ( 맞는 bin이 없다면 인접한 bin에게 비례적으로 분배함)
            • ex) 특정 픽셀이 45° 방향이고 기울기 크기가 10이라면, 40° ~ 60° bin에 10을 더한다.
      • 결과적으로 각 cell에서 방향bin에 따른 히스토그램이 생성된다.
    • 4.  여러 cell을 묶어서 block을 만든다.
      • ex) 2x2 cell을 하나의 블록으로 묶음. 즉, 4개의 cell을 하나의 block으로 만드는 것.
    • 5. block을 가지고 정규화(normalization)를 시켜서 밝기 변화의 영향을 제거한다.
      • 정규화를 통해서 이미지의 명암 차이에 더 강건해짐
    • 6. 특징 vector 생성
      • 모든 block에서 계산된 히스토그램을 하나의 feature vector로 만든다. 이것이 ml의 input data로 사용됨.
        • 하나의 feature vector로 만든다???
          • 여러 block에서 계산된 값들을 하나의 긴 vector로 이어 붙인다는 것.
          • ex) 이 미지에 4개의 블록이 있고 각 블록에 대해 계산된 히스토그램이 9개 값이라면, 그 히스토그램은 4×9 = 36개의 값을 가질 것. 즉, 36차원의 벡터가 만들어짐. 이것이 HOG의 feature vector이다.
        • feature vector는 이미지의 크기 , cell의 크기 , block의 크기 , bin의 개수에 따라 달라진다.
  • 장점: 조명 변화에 강건함, 계산 효율적. 경계기반 특징을 사용하니 객체 검출 성능이 좋다.
  • 단점: 복잡한 배경에 약함.
  • 활용 : 사람 검출 , 얼굴 검출 , 객체 추적

 

입력된 이미지 목록에 대해 각 이미지의 HOG 특징 벡터 를 계산하여 하나의 특징 벡터 배열 을 반환

  •  HOGDescriptor함수
    • 객체( 특히 사람 )을 탐지하는데 사용되는 HOG를 구현한 클래스
    • 이는 이미지의 특징을 추출하고, 이를 바탕으로 물체를 탐지함
cv2.HOGDescriptor

winSize 탐지 윈도우 크기
blockSize 윈도우를 나누는 블록의 크기. HOG 특징이 계산되는 기본 단위를 설정함
blockStride 블록을 이동시키는 간격. 블록 간 겹침을 조절함.
cellSize 블록을 구성하는 셀의 크기. 
nbins 각 셀의 방향 히스토그램에서 사용하는 방향bin의 개수
derivAperture 경사도를 계산할때 사용하는 Sobel 필터의 커널 크기. default = 1
winSigma 가우시안 smoothing에 사용하는 표준편차. default = -1
L2HysThreshold 정규화 수행시 사용하는 임계값. default = 0.2
  • compute함수
    • 특징 이미지에 대해서 HOG 특징을 계산하는 함수

'코딩 및 기타 > 이미지' 카테고리의 다른 글

SURF (Speeded-Up Robust Features)  (0) 2025.01.14
SIFT (Scale-Invariant Feature Transform)  (1) 2025.01.13
canny edge detection  (0) 2025.01.09
가우시안 필터 Gaussian Filter  (0) 2025.01.09
sobel 연산자  (0) 2025.01.09