Итак, я хочу, чтобы иметь возможность распознавать шаблоны в изображениях (например, число 4), я читал о разных алгоритмах, и мне бы очень хотелось использовать алгоритм Nearest Neighbor, он выглядит просто и я понимаю его на основе в этом учебнике: http://people.revoledu.com/kardi/tutorial/KNN/KNN_Numerical-example.html Проблема в том, что, хотя я понимаю, как использовать ее для заполнения отсутствующих наборов данных, я не понимаю, как я мог бы использовать ее в качестве инструмента распознавания образов, чтобы прицелиться в Image Shape Recognition. Может кто-то пролить свет на то, как этот алгоритм может работать для распознавания образов? Я видел учебники с использованием OpenCV, однако я не хочу использовать эту библиотеку, поскольку у меня есть возможность сделать предварительную обработку самостоятельно, и мне кажется глупо, что я буду реализовывать эту библиотеку только для того, что должно быть простым ближайшим соседом алгоритм.
Использование алгоритма Nearest Neighbor Algorithm для распознавания образов
Ответ 1
Вы просто (просто?) должны определить меру "расстояния" для ваших данных.
Предположим, что вы уже сегментировали большое изображение на небольших изображениях, каждое из которых соответствует текстовому символу, который вы хотите классифицировать. Предположим, что мы имеем дело с цифровыми монохромными изображениями, поэтому каждое изображение представлено в виде прямоугольной матрицы значений (пикселей) в (скажем) диапазоне целых чисел 0-255 (яркость). Также предполагается (NN - "контролируемый алгоритм класификации" ), что у вас много уже хорошо классифицированных изображений (ваш набор для обучения).
Учитывая новое маленькое изображение, вы должны определить расстояние между двумя изображениями, чтобы выбрать наиболее близкое в обучающем наборе, и его "метку", выбранную как признанный текстовый символ.
Один наивный подход состоял бы в том, чтобы взять разницу в пикселях (например, сумму квадратов). Но эта дистанционная мера будет чувствительна к переводам (и вращениям и масштабированию), и мы обычно этого не хотим. Альтернативой могло бы быть вычисление модуля преобразования Фурье, которое является инвариантом переноса (но этого недостаточно). Отсюда вы можете начать - и оценить, что проблема сложная, и для такой классификации требуется большая работа, чтобы выполнить ее приемлемо.
Ответ 2
Я использовал алгоритм K-Nearest-Neighbor для распознавания позы в режиме Pose-Recognition в режиме реального времени с видеокамерой. Я бы рекомендовал вам использовать Matlab для обучения и тестирования наборов данных, поскольку для этой цели PRToolbox и много справок и образцов. Самое главное, что вы правильно выбираете функции, которые позволят эффективно представлять каждый класс. Когда у вас есть функции (это будет набор значений, таких как цвет, область, позиции...) и классы, вам нужны образцы для обучения классификатора (например, KNN). Важным, как классификатор, является то, как вы выбираете образцы для обучения. Затем вам придется протестировать классификатор.
Попробуйте разные наборы обучения, различные функции, разные классификаторы, потому что, возможно, KNN - не самый подходящий метод для вашего типа данных.
Надеюсь, вы сочтете это полезным.
Ответ 3
Вот простая реализация с использованием Python http://shyamalapriya.github.io/digit-recognition-using-k-nearest-neighbors/