2013-07-17 3 views
1

Я пытаюсь использовать сортировку объектов для классификации объектов с использованием стандартного байесовского классификатора. Когда я вычисляю дескрипторы для каждого изображения с переменным размером, я получаю различные векторы признаков. Например:Opencv Характеристика векторного размера SiFT

Feature Size: [128 x 39] 

Feature Size: [128 x 54] 

Feature Size: [128 x 69] 

Feature Size: [128 x 64] 

Feature Size: [128 x 14] 

Что касается разработки, я использую 20 учебных изображений, и поэтому у меня есть 20 ярлыков. Моя классификация состоит всего из 3 классов, содержащих автомобиль, книгу и мяч. Таким образом, мой размер вектора метки равен [1 x 20]

Насколько я понимаю, для выполнения машинного обучения размер векторного вектора и размер вектора метки должны быть одинаковыми, поэтому я должен получить векторный размер для данных обучения как [__ x 20], а метка - [1 x 20].

Но моя проблема в том, что sift имеет 128-мерное пространство объектов, поэтому каждое изображение имеет другой размер функции, как показано выше. Как преобразовать все в один размер без потери функций? Или, возможно, я могу сделать это неправильно, пожалуйста, помогите мне в этом?

PS: Фактически, я сделал это с использованием модели BOW, и это работает, но только для моих целей обучения. Я пытаюсь сделать это в этом вопросе, чтобы узнать из интереса, поэтому любые подсказки и рекомендации приветствуются. Спасибо

ответ

3

Вы правы, дескриптор SIFT является 128-мерной функцией.

Дескриптор SIFT вычисляется для каждой точки ключа, обнаруженной на изображении. Перед вычислением дескриптора вы, вероятно, использовали детектор (как Harris, Sift или Surf Detector) для обнаружения интересующих объектов.

Обнаружение ключевых точек и дескрипторов вычислений - два независимых шага!

Когда вы печатаете Feature Size: [128 x Y] в своей программе, Y представляет количество точек ключа, обнаруженных в текущем изображении.

Как правило, использование BOW позволяет назначить для каждого дескриптора ключевых точек индекс ближайшего кластера в BOW. В зависимости от вашего приложения вы можете принять решение ... (голосование за присутствие одного объекта в сцене или ...)

+0

спасибо. На самом деле я выполнил задание, и я использовал BOW, и он работает хорошо. Однако мне так интересно, что я пытаюсь по-разному классифицировать изображения. Я пытаюсь классифицировать без использования модели BOW, поэтому мне интересно, как я могу назначить учебную матрицу. Как вы думаете, я меняю матрицу с [128 x Y] на [1 x Y]. Это означает, что я использую только один размер вектора. Что ты думаешь об этом? – rish

+1

[1 x Y] матрица не имеет смысла. Фактически вы можете использовать отдельные функции SIFT [128 x 1] foreach Y и сравнивать их с извлеченным SIFT с другого изображения. – Eric

+0

Извините, на самом деле это то, что означало .. Большое спасибо. – rish

0

Если вы не хотите использовать BOW, вы можете попробовать подобрать отдельные функции SIFT как описанных в оригинале SIFT paper by Lowe.

Основная идея заключается в том, что вы сравниваете два изображения друг с другом и решаете, похожи они или нет. Вы делаете это, сравнивая отдельные функции SIFT. Вы решаете, совпадают ли они. Затем, чтобы проверить, совместимы ли пространственные позиции, вам нужно проверить, можно ли преобразовать согласованные функции из одного изображения в другое.

Подробнее описано в статье SIFT wikipedia article.

Смежные вопросы