Мешок визуальных слов в Opencv

Я использую BOW в opencv для кластеризации функций переменного размера. Однако из документации opencv неясно одно, и я не могу найти причину этого вопроса:

предположим: размер словаря = 100

Я использую surf для вычисления функций, и каждое изображение имеет дескрипторы переменного размера, например: 128 x 34, 128 x 63 и т. Д. Теперь в BOW каждый из них сгруппирован, и я получаю фиксированный размер дескриптора 128 x 100 для изображения. Я знаю, что 100 - это кластерный центр, созданный с использованием кластеров kmeans.

Но я запутался в том, что если изображение имеет 128 x 63 дескрипторов, то как получается, что оно группируется в 100 кластеров, что невозможно с помощью kmeans, ЕСЛИ Я не преобразую матрицу дескрипторов в 1D. Не будет ли преобразование в 1D потерять достоверную 128-мерную информацию об отдельных ключевых точках?

Мне нужно знать, как манипулировать матрицей дескриптора, чтобы получить 100 центров кластера только из 63 объектов.

1 ответ

Решение

Думай так.

Всего у вас есть 10 кластеров и 6 функций для текущего изображения. Первые 3 из этих признаков ближе всего к 5-му среднему значению, а остальные 3 из них ближе всего к 7-му, 8-му и 9-му средним значениям соответственно. Тогда ваша особенность будет как [0, 0, 0, 0, 3, 0, 1, 1, 1, 0] или нормализованная версия этого. Который является 10-мерным, и это равно числу средних кластеров. Таким образом, вы можете создать 100000-мерный вектор из 63 объектов, если хотите.

Но все же я думаю, что что-то не так, потому что после того, как вы применили BOW, ваши функции должны быть 1x100, а не 128x100. Средство кластера имеет размер 128x1, и вы назначаете эти средства размером 128x1 (у вас есть функция 34x128x1 для первого изображения, функция 63x12x1 для второго изображения и т. Д.). Таким образом, в основном вы назначаете 34 или 63 функции 100 средствам, ваш результат должен быть 1x100.

Другие вопросы по тегам