Если вы могли бы реализовать SVM, вы можете квантовать функции. :)
Как правило, функции квантуется с использованием кластеризации k-средних. Сначала вы решаете, каким должен быть ваш «размер словаря» (скажем, 200 «визуальных слов»), а затем запускаете кластеризацию k-средних для этого количества кластеров (200). Дескрипторы SIFT представляют собой векторы из 128 элементов, то есть точек в 128-мерном пространстве. Таким образом, вы можете попытаться объединить их, как и любые другие точки. Вы извлекаете дескрипторы SIFT из большого количества изображений, аналогичных тем, которые вы хотите классифицировать, используя набор функций. (В идеале это должен быть отдельный набор изображений, но на практике люди часто просто получают функции из своего набора обучающих образов.) Затем вы запускаете кластеризацию k-средних на этом большом наборе дескрипторов SIFT, чтобы разделить его на 200 (или что угодно) кластеров. назначить каждый дескриптор кластеру. k-means даст вам 200 кластерных центров,
Затем вы берете каждый SIFT-дескриптор в вашем изображении и решаете, к какому из 200 кластеров он принадлежит, находя центр кластера, ближайший к нему. Затем вы просто посчитаете, сколько функций в каждом кластере у вас есть. Таким образом, для любого изображения с любым количеством функций SIFT у вас есть гистограмма 200 бинов. Это ваш вектор функций, который вы даете SVM. (Обратите внимание, термин функции сильно перегружен).
Насколько я помню, было проделано много работы относительно того, как эти гистограммы должны быть нормализованы. Возможно, я ошибаюсь, но мне кажется, что я вспоминаю статью, в которой утверждалось, что вектор двоичных объектов (т. Е. 1, если присутствует хотя бы 1 свойство из этого кластера, и 0 в противном случае) работал лучше, чем гистограмма. Вы должны были бы проверить литературу для деталей, и детали важны.
Изменить: Панель инструментов системы Computer Vision для MATLAB теперь предоставляет множество функциональных возможностей .