AI 그게 뭔데
끄적끄적 개발일지
AI 그게 뭔데
전체 방문자
오늘
어제
  • 분류 전체보기 (342)
    • 논문 (5)
    • DL(Deep-Learning) (34)
      • 개념 (14)
      • Python 기초 (14)
      • Tensorflow (6)
      • Pytorch (0)
    • NLP (10)
    • OpenCV (53)
    • DevOps (10)
      • AWS (2)
      • Docker & Kubernetes (4)
      • Spark (3)
      • SQL (1)
    • MacOS (1)
    • React-Native (2)
    • BI (3)
      • GA(Google Analytics) (3)
      • Tableau (0)
    • 알고리즘 (221)
      • 백준 (76)
      • 프로그래머스 (108)
      • 기타 알고리즘 (37)

인기 글

태그

  • 연습문제
  • LEVEL2
  • 알고리즘
  • 파이썬
  • 백준
  • Python
  • level1
  • 이코테
  • 프로그래머스
  • OpenCV

최근 글

hELLO · Designed By 정상우.
AI 그게 뭔데

끄적끄적 개발일지

[OpenCV with Python] 영상 분할과 객체 검출 : HOG 알고리즘 - 보행자 검출
OpenCV

[OpenCV with Python] 영상 분할과 객체 검출 : HOG 알고리즘 - 보행자 검출

2022. 2. 5. 01:15

HOG(Histogram of Oriented Gradients) 란?

  • 영상의 지역적 그래디언트 방향 정보를 특징 벡터로 사용
  • 2005년 CVPR학회에서 보행자 검출 방법으로 소개되어 널리 사용되기 시작함
  • 이후 다양한 객체 인식에서 활용됨

 

 

HOG 알고리즘

전체 영상에서 부분 영상을 추출해서 부분 영상의 특징을 추출하여 전신을 판단하는 알고리즘이다.

 

작동 순서

  1. 임의의 크기의 사각형을 정의해서 부분 영상을 추출
  2. 추출한 부분 영상의 크기를 정규화 (64X128)
  3.  64X128 영상의 그래디언트를 계산하여 방향 성분과 크기 성분을 파악
  4.  64X128 영상을 8X8 크기의 셀(cell)로 분할
  5. 각 셀마다 방향과 크기 성분을 이용하여 방향 히스토그램을 계산
  6. 각각의 셀에서 방향 성분을 9개로 구분하여 9가지 방향에 대한 히스토그램을 생성
    (180도를 20도씩 9가지 방향, 대칭하면 360도)

 

블록 히스토그램 구하기

8X8 셀 4개를 하나의 블록으로 지정한다.

즉, 블록 하나의 크기는 16X16이며, 8픽셀 단위로 이동한다. (stride = 8) (블록 반칸씩 겹쳐서 이동)

각 블록의 히스토그램 빈(bin) 개수는 4X9 = 36개 이다. (방향 성분 조합 36가지)

 

 

특징 벡터의 차원

하나의 부분 영상 패치에서의 특징 백터 크기는 7 X 15 X 36 = 3780이 되며, 여기에 특징 벡터이므로 또 4를 곱하게 된다.

 

 

 

✔︎  HOG 기술자 객체 생성 및 보행자 검출을 위해 학습된 분류기 계수 불러오기 - cv2.HOGDescriptor

cv2.HOGDescriptor()  ->  <HOGDescriptor object>
retval = cv2.HOGDescriptor_getDefaultPeopleDetector()
  • retval : 미리 훈련된 특징 벡터. numpy.ndarray.
    shape=(3781, 1). dtype=numpy.float32.

 

✔︎  SVM 분류기 계수 등록하기 - cv2.HOGDescriptor.setSVMDetector

cv2.HOGDescriptor.setSVMDetector(svmdetector) -> None
  • svmdetector: 선형 SVM 분류기를 위한 계수

 

✔︎  HOG 멀티스케일 객체 검출 함수 - cv2.HOGDescriptor.detectMultiScale

foundLocations, foundWeights = cv2.HOGDescriptor.detectMultiScale(img, 
																hitThreshold=None, 
																winStride=None, 
                                                                  padding=None, 
                                                                  scale=None, 
                                                                  finalThreshold=None, 
                                                                  useMeanshiftGrouping=None)
  •  img : 입력 영상 . cv2.CV_8UC1 또는 cv2.CV_8UC3. 
  • hitThreshold: 특징 벡터와 SVM 분류 평면까지의 거리에 대한 임계값 
  • winStride: 셀 윈도우 이동 크기 . (0, 0) 지정 시 셀 크기와 같게 설정 
  • padding: 패딩 크기 
  • scale: 검색 윈도우 크기 확대 비율 . 기본값은 1.05. 
  • finalThreshold : 검출 결정을 위한 임계값 
  • useMeanshiftGrouping : 겹쳐진 검색 윈도우를 합치는 방법 지정 플래그 
  • foundLocations (출력) 검출된 사각형 영역 정보 
  • foundWeights : (출력) 검출된 사각형 영역에 대한 신뢰도

 

💬  HOG 보행자 검출 예제

import sys
import numpy as np
import cv2


src = cv2.imread('lenna.bmp')

if src is None:
    print('Image load failed!')
    sys.exit()

classifier = cv2.CascadeClassifier('haarcascade_frontalface_alt2.xml')

if classifier.empty():
    print('XML load failed!')
    sys.exit()

faces = classifier.detectMultiScale(src)

for (x, y, w, h) in faces:
    cv2.rectangle(src, (x, y, w, h), (255, 0, 255), 2)

cv2.imshow('src', src)
cv2.waitKey()
cv2.destroyAllWindows()

 

'OpenCV' 카테고리의 다른 글

[OpenCV with Python] 특징점 검출과 매칭 : 특징점 검출  (0) 2022.02.05
[OpenCV with Python] 특징점 검출과 매칭 : 코너 검출  (0) 2022.02.05
[OpenCV with Python] 영상 분할과 객체 검출 : 캐스케이드 분류기 - 얼굴 검출  (0) 2022.02.05
[OpenCV with Python] 영상 분할과 객체 검출 : 템플릿 매칭2 - 인쇄체 숫자 인식  (0) 2022.02.04
[OpenCV with Python] 영상 분할과 객체 검출 : 템플릿 매칭 1  (0) 2022.02.04
    AI 그게 뭔데
    AI 그게 뭔데
    공부와 개발 그리고 AI가 약간 첨가된 흔적 남기기

    티스토리툴바