Прежде всего, в этой статье нет такого понятия, как «шаблон» - слово «шаблон (ы)» имеет другое значение в Computer Vision.
Метод, использованный в этой статье, относительно прост. Позвольте мне сломать это для вас. Есть три важных вещей , которые вы должны сделать при выполнении таких задач, как распознавание объектов, согласование изображений, сшивание изображений и аналогичных другие, используя местные особенности
Первая важная вещь - обнаружение; на этом этапе вы хотите определить точки интереса или ключевые точки, и это означает, что вы хотите выбрать локальные точки (в основном небольшие участки), которые, по вашему мнению, интересны на изображении, есть много способов сделать это; этот документ не способствует в этой области. Однако, похоже, что они используют детектор функций SURF и ключевые точки CenSurE (вы можете посмотреть их, если хотите узнать о них больше, я не буду говорить об этом шаге, за исключением того, что они используют такие функции, как градиенты и т. Д., Что означает, что если у вас есть фотография, маловероятно, что точка в центре неба будет выбрана в качестве точки интереса, потому что пиксели вокруг этой точки имеют одинаковую интенсивность, а «занятые» объекты обычно выбираются в качестве точек интереса. (например, стол / края здания / углы).
После обнаружения, описание функцииследующим образом. Вы знаете интересные точки на изображении, и теперь вы хотите описать их (в основном вы хотите описать точки / патч вокруг интересных точек). SIFT - один из популярных дескрипторов функций. В этой статье они придумали новую, называемую КРАТКАЯ. КРАТКОЕ ИЗЛОЖЕНИЕ основано на сравнениях, поэтому, скажем, у нас есть патч (50 на 50 пикселей), мы выбираем две точки и сравниваем интенсивность двух точек, если первая точка больше второй, мы присваиваем значение ' 1 ', иначе' 0 ', мы делаем это для нескольких пар и в итоге получаем строку логических значений. Теперь большой вопрос «как выбрать пару точек?», В статье они объяснили 5 способов, относительно похожих, я опишу первый. То, что вы делаете, вы равномерно (с равной вероятностью) выбираете точку от -S / 2 до S / 2, в нашем примере мы сказали, что размер патча равен 50, поэтому мы выбираем точку между -25 и 25. Предполагая, что координата 0,0 находится в центре патча. Итак, вот пример;
Мы хотим выбрать первую пару, каждая точка состоит из (X, Y) координат, поэтому мы равномерно выбираем X-координату первой точки, а затем Y-координату первой точки, давайте предположим, что это (10, -1) теперь второй пункт; мы равномерно выбираем X-координату для второй точки и Y-координату для второй точки, допустим, что это (-2,20), теперь мы получаем значения интенсивности для каждой точки и видим, какая из них имеет более высокие значения интенсивности - если first больше, мы присваиваем первое логическое значение равным '1', если нет, мы присваиваем '0'. Мы делаем это для многих пар, и в итоге получаем вектор логических значений.
* Очень важный момент: я предполагаю, что для того, чтобы это сработало, вам нужно будет указать начальное значение перед генератором случайных чисел. Это означает, что вы хотите выбирать одинаковые значения для каждого патча - это очень важно, потому что, когда вы сравниваете / сопоставляете патчи, вся система выходит из строя, если они выбраны не одинаково. - надеюсь, это будет иметь смысл, когда вы прочитаете соответствующий шаг.
Итак, мы делаем это для каждой точки интереса, которая была обнаружена детектором. Для каждой точки интереса мы получим вектор логических значений.
Теперь, чтобы сопоставить два изображения ( третий шаг; сопоставление ), мы делаем то же самое для другого изображения, которое мы обнаруживаем, а затем описываем с помощью КРАТКОГО ИЗОБРАЖЕНИЯ. Например, скажем, у нас есть 10 точек интереса на каждом изображении (это всегда может работать, если мы получим 10 самых интересных точек на каждом изображении), мы используем BRIEF для описания каждого патча, используя, например, 50 пар, поэтому каждое изображение будет описано 10 векторов 50 булевых значений.
Чтобы сравнить два изображения, мы находим ближайшего соседа каждого вектора от первого изображения до каждого другого вектора из второго изображения. Мы используем расстояние Хэмминга, которое довольно быстро, пример расстояния Хэмминга
hammingDistance ((0, 1, 1), (0, 0, 0)) = 2
hammingDistance ((0, 1, 1), (0, 1, 1)) = 0
hammingDistance ((0, 1, 1), (1, 0, 0)) = 3
hammingDistance ((0, 1, 1), (1, 1, 1)) = 1
В основном сколько неправильных соответствий
надеюсь, это поможет