L2Hys Normalization

void HOGCache::normalizeBlockHistogram(float* _hist) const
{
    float* hist = &_hist[0];
    size_t i, sz = blockHistogramSize;
    
    float sum = 0;
    for( i = 0; i < sz; i++ ) // 각 bin의 element의 제곱 값을 누적합한다.
        sum += hist[i]*hist[i];
    float scale = 1.f/(std::sqrt(sum)+sz*0.1f), thresh = (float)descriptor->L2HysThreshold; // 먼저 normalization을 해주고, 만약 그 값이 0.2(L2HysThreshold값) 를 넘어가면 0.2로 바꿔서 다시 한 번 더 normalization 수행
// 그런데 여기서 sz*.0.1f 는 왜 하는지?? 모르겠다

    for( i = 0, sum = 0; i < sz; i++ )
    {
        hist[i] = std::min(hist[i]*scale, thresh);
        sum += hist[i]*hist[i];
    }
    scale = 1.f/(std::sqrt(sum)+1e-3f);
    for( i = 0; i < sz; i++ )
        hist[i] *= scale;
}

덧글

  • 도움 2015/07/25 20:23 # 삭제 답글

    L2-norm 을 보시면 0.1f를 곱해주신 것을 알 수 있으실 겁니다. 프로그래머가 정한 임의의 값입니다.
  • 도움 2015/07/25 20:23 # 삭제 답글

    L2-norm 을 보시면 0.1f를 곱해주신 것을 알 수 있으실 겁니다. 프로그래머가 정한 임의의 값입니다.
댓글 입력 영역


Google Analysis