Обнаружение поверхности Виол - Джонса требует 180k функций

Используя Вруб для декомпиляции его является, вероятно, наилучшим вариантом. Если код не был запутан, он произведет хорошо результат.

78
задан Amro 18 April 2014 в 00:55
поделиться

4 ответа

При ближайшем рассмотрении ваш код мне кажется правильным; что заставляет задуматься о том, были ли у первоначальных авторов отдельные ошибки. Я думаю, кто-то должен посмотреть, как OpenCV реализует это!

Тем не менее, одно предложение, чтобы упростить понимание, - это изменить порядок циклов for , сначала перебрав все размеры, а затем перебрав цикл возможные местоположения с учетом размера:

#include <stdio.h>
int main()
{
    int i, x, y, sizeX, sizeY, width, height, count, c;

    /* All five shape types */
    const int features = 5;
    const int feature[][2] = {{2,1}, {1,2}, {3,1}, {1,3}, {2,2}};
    const int frameSize = 24;

    count = 0;
    /* Each shape */
    for (i = 0; i < features; i++) {
        sizeX = feature[i][0];
        sizeY = feature[i][1];
        printf("%dx%d shapes:\n", sizeX, sizeY);

        /* each size (multiples of basic shapes) */
        for (width = sizeX; width <= frameSize; width+=sizeX) {
            for (height = sizeY; height <= frameSize; height+=sizeY) {
                printf("\tsize: %dx%d => ", width, height);
                c=count;

                /* each possible position given size */
                for (x = 0; x <= frameSize-width; x++) {
                    for (y = 0; y <= frameSize-height; y++) {
                        count++;
                    }
                }
                printf("count: %d\n", count-c);
            }
        }
    }
    printf("%d\n", count);

    return 0;
}

с теми же результатами, что и предыдущий 162336


Чтобы проверить это, я протестировал случай окна 4x4 и вручную проверил все варианты (легко подсчитать, поскольку 1x2 / 2x1 и Формы 1x3 / 3x1 такие же, только повернуты на 90 градусов):

2x1 shapes:
        size: 2x1 => count: 12
        size: 2x2 => count: 9
        size: 2x3 => count: 6
        size: 2x4 => count: 3
        size: 4x1 => count: 4
        size: 4x2 => count: 3
        size: 4x3 => count: 2
        size: 4x4 => count: 1
1x2 shapes:
        size: 1x2 => count: 12             +-----------------------+
        size: 1x4 => count: 4              |     |     |     |     |
        size: 2x2 => count: 9              |     |     |     |     |
        size: 2x4 => count: 3              +-----+-----+-----+-----+
        size: 3x2 => count: 6              |     |     |     |     |
        size: 3x4 => count: 2              |     |     |     |     |
        size: 4x2 => count: 3              +-----+-----+-----+-----+
        size: 4x4 => count: 1              |     |     |     |     |
3x1 shapes:                                |     |     |     |     |
        size: 3x1 => count: 8              +-----+-----+-----+-----+
        size: 3x2 => count: 6              |     |     |     |     |
        size: 3x3 => count: 4              |     |     |     |     |
        size: 3x4 => count: 2              +-----------------------+
1x3 shapes:
        size: 1x3 => count: 8                  Total Count = 136
        size: 2x3 => count: 6
        size: 3x3 => count: 4
        size: 4x3 => count: 2
2x2 shapes:
        size: 2x2 => count: 9
        size: 2x4 => count: 3
        size: 4x2 => count: 3
        size: 4x4 => count: 1
38
ответ дан 24 November 2019 в 10:40
поделиться

Я не прочитал всю статью, поэтому формулировка вашей цитаты мне бросается в глаза

Учитывая, что базовое разрешение детектор 24x24, исчерпывающий набор прямоугольных элементов довольно большой, более 180 000. Обратите внимание, что в отличие от Базис Хаара, множество прямоугольников

«Набор функций прямоугольника переполнен» «Исчерпывающий набор»

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

edit: или с использованием какого-либо алгоритма машинного обучения, как намекает абстракция. Исчерпывающий набор подразумевает все возможности, а не только «разумные».

3
ответ дан 24 November 2019 в 10:40
поделиться

Нет никакой гарантии, что любой автор любой статьи прав во всех своих предположениях и выводах. Если вы считаете, что предположение №4 верно, оставьте это предположение и попробуйте свою теорию. Вы можете быть более успешными, чем первоначальные авторы.

2
ответ дан 24 November 2019 в 10:40
поделиться

все. В статьях Виолы и Джонса все еще есть некоторая путаница.

В их статье CVPR'01 четко указано, что

«Более конкретно, мы используем три виды функций. Ценность двухпрямоугольник - это разница между суммой пикселей в двух прямоугольных областях. Регионы имеют одинаковый размер и формы и горизонтально или вертикально смежные (см. рисунок 1). Элемент с тремя прямоугольниками вычисляет сумму внутри двух вне прямоугольников, вычтенных из суммы в центральный прямоугольник. Наконец a четырехпрямоугольник ».

В статье IJCV'04 сказано то же самое. Итак, всего 4 функции . Но, как ни странно, на этот раз они заявили, что исчерпывающий набор функций - 45396! Это не похоже на окончательную версию. Здесь я предполагаю, что там были введены некоторые дополнительные ограничения, такие как min_width, min_height, соотношение ширины / высоты и даже положение.

Обратите внимание, что оба документа можно загрузить на его веб-странице .

8
ответ дан 24 November 2019 в 10:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: