Какой алгоритм обнаружения признаков наиболее прост для изучения?
Я оборачиваюсь вокруг алгоритмов определения функций. Я изучил варианты, которые у меня есть: SIFT, SURF, BRISK, FREAK и т. Д. Все они кажутся довольно сложными с точки зрения основополагающей математики. Наоборот, я хочу сделать один шаг за раз, поэтому я ищу простой метод, который не должен быть таким же хорошим, как SURF, например. Какой алгоритм вы бы порекомендовали изучить и реализовать?
4 ответа
Первое, что также следует иметь в виду, это разница между детектором и дескриптором. Детектор - это алгоритм обнаружения точек интереса на изображении, которые обычно являются углами или центрами каплеобразных структур. Затем, если вам нужно сопоставить эти точки на изображениях, вы вычисляете дескрипторы, которые являются своего рода векторами значений, представляющими участки вокруг точек интереса.
Это должно помочь прояснить ситуацию. Например, "детектор полезных функций", также известный как детектор минимального собственного угла, является детектором точек интереса. FREAK - это дескриптор функции. SIFT, SURF и BRISK включают в себя как детектор, так и дескриптор. В целом, однако, вы можете смешивать и сопоставлять детекторы и дескрипторы.
Итак, для начала, вы должны взглянуть на угловые детекторы, такие как GFTT и Harris, а также на детектор Laplacian blob. Большинство более современных детекторов, представляющих интерес, представляют собой более быстрые способы обнаружения углов или пятен.
Для дескрипторов, начните с SIFT. Это может показаться немного пугающим, но это был первый дескриптор, который сработал, и это вдохновение и ориентир для всех остальных.
Если вы пытаетесь начать с простого, то, возможно, самый простой дескриптор объекта - это взять квадрат NxN вокруг обнаруженного объекта и объединить все значения пикселей. На практике это не очень хорошо работает, потому что оно очень чувствительно к небольшим изменениям освещения, поворота, масштаба и т. Д., Но вы можете проверить свою реализацию с двумя переведенными версиями изображения.
Самым простым дескриптором функции, который "действительно работает", кажется, является дескриптор BRIEF ( http://cvlabwww.epfl.ch/~lepetit/papers/calonder_eccv10.pdf), который случайным образом сравнивает пары значений соседних пикселей для создания двоичного дескриптора., Обратите внимание, что он не зависит от масштаба или вращения: для этого вам потребуется одно из многих расширений, таких как AKAZE, BRISK, FREAK или ORB.
На мой взгляд, SIFT. Смотрите vlfeat.org для кода, который они разработали, который можно использовать бесплатно, и у них есть несколько учебных пособий для легкой реализации.
Я думаю, что вы можете попробовать GFTT: хорошие возможности для отслеживания, основанные на определениях и уравнениях ши-томази. Он очень старый, и я думаю, что легко читать.