Используя Вруб для декомпиляции его является, вероятно, наилучшим вариантом. Если код не был запутан, он произведет хорошо результат.
При ближайшем рассмотрении ваш код мне кажется правильным; что заставляет задуматься о том, были ли у первоначальных авторов отдельные ошибки. Я думаю, кто-то должен посмотреть, как 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
Я не прочитал всю статью, поэтому формулировка вашей цитаты мне бросается в глаза
Учитывая, что базовое разрешение детектор 24x24, исчерпывающий набор прямоугольных элементов довольно большой, более 180 000. Обратите внимание, что в отличие от Базис Хаара, множество прямоугольников
«Набор функций прямоугольника переполнен» «Исчерпывающий набор»
для меня звучит как установка, в которой я ожидаю, что автор статьи продолжит объяснение того, как они сокращают пространство поиска до более эффективного набора, например, избавляясь от тривиальные случаи, такие как прямоугольники с нулевой площадью поверхности.
edit: или с использованием какого-либо алгоритма машинного обучения, как намекает абстракция. Исчерпывающий набор подразумевает все возможности, а не только «разумные».
Нет никакой гарантии, что любой автор любой статьи прав во всех своих предположениях и выводах. Если вы считаете, что предположение №4 верно, оставьте это предположение и попробуйте свою теорию. Вы можете быть более успешными, чем первоначальные авторы.
все. В статьях Виолы и Джонса все еще есть некоторая путаница.
В их статье CVPR'01 четко указано, что
«Более конкретно, мы используем три виды функций. Ценность двухпрямоугольник - это разница между суммой пикселей в двух прямоугольных областях. Регионы имеют одинаковый размер и формы и горизонтально или вертикально смежные (см. рисунок 1). Элемент с тремя прямоугольниками вычисляет сумму внутри двух вне прямоугольников, вычтенных из суммы в центральный прямоугольник. Наконец a четырехпрямоугольник ».
В статье IJCV'04 сказано то же самое. Итак, всего 4 функции . Но, как ни странно, на этот раз они заявили, что исчерпывающий набор функций - 45396! Это не похоже на окончательную версию. Здесь я предполагаю, что там были введены некоторые дополнительные ограничения, такие как min_width, min_height, соотношение ширины / высоты и даже положение.
Обратите внимание, что оба документа можно загрузить на его веб-странице .