Как создать признаки Хаара для распознавания лиц?
Я пытаюсь понять как создать самостоятельно признаки такие как эти:
, самое неприятное, что в статье никаких объяснений нет
И я даже нашёл код: но, я абсолютно не понимаю как оно будет выглядеть в итоге. Код из вопрос про количество признаков:
const int frameSize = 24;
const int features = 5;
// All five feature types:
const int feature[features][2] = {{2,1}, {1,2}, {3,1}, {1,3}, {2,2}};
int count = 0;
// Each feature:
for (int i = 0; i < features; i++) {
int sizeX = feature[i][0];
int sizeY = feature[i][1];
// Each position:
for (int x = 0; x <= frameSize-sizeX; x++) {
for (int y = 0; y <= frameSize-sizeY; y++) {
// Each size fitting within the frameSize:
for (int width = sizeX; width <= frameSize-x; width+=sizeX) {
for (int height = sizeY; height <= frameSize-y; height+=sizeY) {
count++;
}
}
}
}
}
Ссылка на оригинальную статью: http://lear.inrialpes.fr/people/triggs/student/vj/viola-ijcv04.pdf
Ссылка на вопрос из которого взял код для вопроса: https://stackoverflow.com/questions/1707620/viola-jones-face-detection-claims-180k-features
Помогите, пожалуйста, разобраться как сгенерировать все признаки и как их хранить. Спасибо за любую помощь :)
Ответы (1 шт):
Что тут происходит: Для получения значения признака вычисляется разность между суммированной интенсивностью пикселей темных и светлых областей.
Что это даёт: Если значение признака ближе к 0, то значит пиксели в областях имеют сходную интенсивность. Если оно дальше от 0, то значит между областями имеется контраст. Таким образом, большие значения признака для блоков вида A и B говорят о наличии в блоке границы темных и светлых областей, а для блоков вида C и D - о наличии в блоке линии.
Почему блоки протяженные: Во-первых, вычисление суммарной интенсивности - это быстрая операция. Во-вторых, увеличение размера блока позволяет обрабатывать большие области не требуя четкого соответствия обнаруживаемых особенностей изображения расположению блока, т.е. например обнаруживаемая граница темных и светлых областей может быть не строго вертикальная или горизонтальная, или может иметь дефекты.
Откуда берутся конкретные размеры и расположение этих блоков: В простейшем случае они расставляются вручную, подгоняясь под особенности целевого (участка) изображения, чтобы накрывать области, в которых ожидаются границы областей или линии.
