[Dalal05] N. Dalal and B. Triggs, "Histograms of oriented gradients for human detection," CVPR 2005.
HOG는 대상 영역을 일정 크기의 셀로 분할하고, 각 셀마다 edge 픽셀(gradient magnitude가 일정 값 이상인 픽셀)들의 방향에 대한 히스토그램을 구한 후 이들 히스토그램 bin 값들을 일렬로 연결한 벡터이다. 즉, HOG는 edge의 방향 히스토그램 템플릿으로 볼 수 있다.
사각형 block을 사용하는 R-HOG와 원형 block을 사용하는 C-HOG가 있는데
R-HOG의 경우만 정리한다.
1. cell
- cell은 gradient 계산 단위로 보면 된다.
- rules of thumb으로, 6x6의 cell이 최적이다.
2. gradient(magnitude, orientation) & cell histogram
- 수직엣지(y축 변화량), 수평엣지(x축변화량)을구한다
- atan2()를 이용하여 orientation을 계산.
=> PI ~ PI 이므로, 음수를 +PI 해줘서 0~180으로 만들어준다.
- 제곱루트를 이용하여 magnitude 계산.
- cell chistogram을 구한다.
3. block
- cell에서 계산한 값을 이용하여 histogram을 이어붙이는 단계
- block은 histogram을 이어붙인 단위로 보면 되겠다.
- rules of thumb에서 3X3사이즈가 최적임
4. normalization
- contrast등에 영향을 받지 않도록, gradient를 magnitude로 나누면
크기 1로 정규화된다.
=> 벡터의
각 절대치의 합 = L-1 norm, 제곱 루트한 것 = L-2 norm이라 한다.
from http://karmainearth.tistory.com/162
5. overlapping block
- 계산을 overlapp해준다.
참고 http://hamait.tistory.com/508
from http://darkpgmr.tistory.com/116
1. 이미지를 일정 크기로 분할한다.
2. 각 셀마다 gradient계산
- x( [-1.0.1] ), y([-1,0,1]의 transpose), => x y미분
- 미분한 것을 arctan()를 이용하여 각도계산.
- magnitude = sqrt(dx^2+dy^2) 를 이용하여 magnitude 계산
- quantization(bin)하여 int형 안에서 커버할 수 있게 하자
3. 계산한 Gradient를 이용하여 분할한 영역마다 histogram을 만든다.
4. 모든 영역을 이어 붙인다.
참고 http://jangjy.tistory.com/163
bin이란
histogram의 interval을 cell 또는 bin이라 한다.
참고 http://www.aistudy.co.kr/math/histogram.htm
1. 이미지 일정크기 분할 선택 ex) 8x8 cell
2. 각 pixel의 gradient와 magnitude를 구한다.
- 1D 기울기 커널 사용
- 64개의 gradient가 구해짐
3. histogram bin을 정한다 bin = 9
4. 40도씩 각도를 잘라서 quantize한다.
5. 이 셀(8x8)에 한정하여 histogram을 구한다.
6. 이미지 전체에서 모든셀의 histogram을 구한다.(겹쳐서 하는법 /그냥 8x8로 나눠서하는 법 이있음)
//gradient histograms
// 탐지윈도우 64X128 pixel
// HOG계산 cell size = 8X8 pixel
// 셀 안의 각 pixel gradient 계산 = 64개
// 64 => 9bin histogram 만들기 : 0~180도, 20도간격
//gradient Normalizing
//gradient를 magnitude로 나눠서 크기를 1로 normalize한다.
//이렇게 하면 orientation 영향없이 normalize된다. => float로 하는거 생각해야함
//히스토그램 일반화
//histogram도 gradient의 magnitude를 기준으로함.
//이거 역시 normalize 해줘야함.
//블럭일반화
//히스토그램마다 normalize하지말고
//cell을 묶어서 block으로 정하고,
// block전체의 histogram을 normalize 하자.
// 4cell = 1block으로 정하기. + 4 cell의 histogram 연결하기.
// 9bin * 4 = 36 bin(?)의 histogram 이 나온다
// 이 histogram을 크기로 나눠서 normalize한다.
// overlap 할 경우 :
'전공지식정리 > 영상처리(Image Signal Processing)' 카테고리의 다른 글
3. Binary, Morphology (0) | 2022.01.20 |
---|---|
오버로드된 함수 ~의 인스턴스중 사용할 인스턴스를 확인할 수 없습니다. (0) | 2022.01.20 |
동적할당 (0) | 2022.01.20 |
cvSobel (0) | 2022.01.20 |
machine learning (0) | 2022.01.20 |