Объяснение в основном основано на литературе (Bay et al. 2004) а>.
Допустим, у нас есть изображение с обнаруженными ключевыми точками. Чтобы дескриптор был рассчитан для ключевой точки, вокруг нее определяется квадратная область (согласно статье используется окно размером 20s
, где s
— масштаб, на котором была обнаружена ключевая точка). Затем эта область делится на квадратные подобласти 4X4=16 (см. изображение). Для каждого из этих субрегионов вычисляются значения дескриптора 4, что приводит к 4-мерному вектору vi=[a1i,a2i,a3i,a4i]
для i=[1:16]
(см. документ или здесь, чтобы понять, что это за значения). Следовательно, конечный вектор дескриптора аккумулирует значения этих 16 4-мерных векторов одно за другим. Следовательно, дескриптор приводит к вектору размером 16 * 4 = 64-dim.
Подводя итог: каждая ключевая точка описывается 64-вектором. Каждые 4 значения в этом векторе описывают одну из 16 подобластей в окрестностях ключевой точки. (это также может быть 128 для расширенной версии SURF-128)
![введите здесь описание изображения](https://i.stack.imgur.com/vx1Kx.png)
Итак, если вы видите общий код C++, вход этой функции — это всего один дескриптор (одна ключевая точка) от объекта (d1) и один дескриптор от изображения (d2). В основном сравнение ведется между 2 64-мерными векторами (или 128 в случае расширенной версии). Утверждение, что длина вектора должна быть кратна 4, подтверждает, что эти дескрипторы образованы 4-мерными векторами, добавленными один за другим.
Чтобы определить, похожа ли ключевая точка объекта на ключевую точку изображения, вы сравниваете одни и те же субрегионы вокруг них. По этой причине каждые 4 значения сравниваются вместе (вычисляется их разница/расстояние), и общая стоимость увеличивается (в зависимости от того, насколько они отличаются). Если общая стоимость становится больше порогового значения (лучшее), то нет смысла продолжать сравнение, баллы не похожи!
Надеюсь, это помогло, и я не запутал вас еще больше!
person
GStav
schedule
03.03.2016