Как работает многоуровневая петля обнаружения в обнаружении HOG в OpenCV?

В статье Далала и Триггса о HOG, кажется, что многомасштабное обнаружение работает путем сканирования через пирамиду изображения. Но я не могу найти, какая часть модулей / objdetect / src / hog.cpp выполняет сканирование пирамиды / цикл. Мое понимание неверно, или я прочитал неверный исходный файл?

0

Решение

Если вы посмотрите на исходный код для этой функции

void HOGCache::init(const HOGDescriptor* _descriptor,
const Mat& _img, Size _paddingTL, Size _paddingBR,
bool _useCache, Size _cacheStride)

Вы увидите следующие комментарии

// Initialize 2 lookup tables, pixData & blockData.
// Here is why:
//
// The detection algorithm runs in 4 nested loops (at each pyramid layer):
//  loop over the windows within the input image
//    loop over the blocks within each window
//      loop over the cells within each block
//        loop over the pixels in each cell
//
// As each of the loops runs over a 2-dimensional array,
// we could get 8(!) nested loops in total, which is very-very slow.
//
// To speed the things up, we do the following:
//   1. loop over windows is unrolled in the HOGDescriptor::{compute|detect} methods;
//         inside we compute the current search window using getWindow() method.
//         Yes, it involves some overhead (function call + couple of divisions),
//         but it's tiny in fact.
//   2. loop over the blocks is also unrolled. Inside we use pre-computed blockData[j]
//         to set up gradient and histogram pointers.
//   3. loops over cells and pixels in each cell are merged
//       (since there is no overlap between cells, each pixel in the block is processed once)
//      and also unrolled. Inside we use PixData[k] to access the gradient values and
//      update the histogram
//

Как поясняется в комментариях, циклы развернуты в целях оптимизации, поэтому, возможно, поэтому их трудно найти с помощью быстрого сканирования исходного кода.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]