2016-12-13 10 views
0

Я пытаюсь написать простую программу распознавания людей с использованием алгоритма k-NN. Я считаю, что эта проблема классическая, но мне нужна помощь. Классификатор k-NN должен вычислить некоторые расстояния, поэтому мой вопрос заключается в том, как сравнить или как вычислить расстояние между двумя изображениями (я упоминаю, что мне нужно использовать L2-норму в качестве метрического расстояния) Спасибо !OPEN CV C++ person Recognition K-nn

ответ

0

Итак, k-NN работает как, вам сначала нужны функции, с некоторыми значениями. Например, если у вас есть, скажем n количество функций для изображения, вы сделаете из этих функций n-мерный вектор. Что-то вроде: F (x1, x2, x3, x4, .... xn), где x1, x2, x3 ... xn - значения для признаков. Теперь, если вы вычисляете функции, преобразуйте их в векторную форму, тогда вы можете просто рассчитать расстояние между этими векторами, используя формулу знакового расстояния. И как только вы вычисляете/сохраняете все расстояния в списке/массиве, вы сортируете его и вынимаете k верхних значений с наименьшим расстоянием, и это будут ваши рассчитанные k ближайших соседей. Еще раз, извлечение объектов - это то, что вы ищете.

+0

В моем случае я считаю, что интенсивность изображения в изображении в полутоновом формате представляет мои особенности. Говорят, у нас есть изображения X, Y: расстояние между X и Y может быть представлено нормой L2 этих двух наборов значений пикселей , для X и Y? – Elneny

+0

@ Элнен, не могу сказать о вашем конкретном случае. В прошлый раз, когда мне приходилось сравнивать два изображения в оттенках серого, я рассматривал каждый пиксель как уникальную особенность. Это означает, что если бы у меня было это изображение 28x28, у меня было 784 функции, каждая из которых имела значение от 0 до 255. И, хотите ли вы пойти с нормой L2 на расстояние, то есть на вас, я бы рекомендовал формулу евклидовой дистанции. –

+0

Хорошо, спасибо, что-то вроде этого мне тоже нужно – Elneny