Давайте с первым блоком:
<internalNodes>
0 -1 13569 2.8149113059043884e-003</internalNodes>
<leafValues>
9.8837211728096008e-002 -8.5897433757781982e-001</leafValues></_>
Он описывает один из слабого классификатора. В этом случае он основан на пне, т. Е. Дерево с максимальной глубиной равно 1. 0
и -1
это индексы левого и правого дочерних элементов корневого узла. Если индексы меньше или равны нулю, это указывает на то, что это узлы листа. Обратите внимание, что для расчета индекса листа вам необходимо его отменить. Следующее число (13569) является индексом функции в разделе <features>
. И следующий номер (2.8149113059043884e-003) является порогом узла. В разделе leafValues
представлен листы листьев в каскадном дереве.
Например, в этом слабом классификаторе нам нужно вычислить значение функции 13569. Затем сравните это значение с порогом (2.8149113059043884e-003), и если он меньше этого порога, чем вам нужно добавить первое значение листа (9.8837211728096008e-002), вам нужно добавить второе значение листа (-8.5897433757781982e-001) ,
Следующий раздел описывает одну из функции Хаара:
<rects>
<_>
0 0 3 1 -1.</_>
<_>
1 0 1 1 3.</_></rects>
<tilted>0</tilted></_>
Это, очевидно, описывает параметры прямоугольника (х, у, ширина, высота) и вес прямоугольника. Он также может быть наклонен, что указывает на <tilted>0</tilted>
флаг.
Надеюсь, это поможет.
Есть ли какой-либо компрессионный учебник или книга, объясняющая все эти вычисления и алгоритм? – Gokhan
@Gokhan Не уверен, что существует. Я просто изучил [этот код] (https://github.com/akarsakov/opencv/blob/master/modules/objdetect/src/cascadedetect.cpp#L1396), чтобы понять это. – akarsakov
Все еще оставляет много открытых вопросов, но, поверьте, хотите или нет, ваше настоящее пока лучшее описание, которое я могу найти в Интернете. Спасибо, что объяснили! – user1932890