Использование алгоритма ближайшего соседа для распознавания образов изображений - PullRequest
10 голосов
/ 02 мая 2010

Итак, я хочу иметь возможность распознавать шаблоны на изображениях (например, число 4), я читал о различных алгоритмах и мне очень хотелось бы использовать алгоритм Nearest Neighbor, он выглядит простым, и я понимаю, что он основан на на этом уроке: http://people.revoledu.com/kardi/tutorial/KNN/KNN_Numerical-example.html Проблема в том, что, хотя я понимаю, как использовать его для заполнения пропущенных наборов данных, я не понимаю, как я мог бы использовать его в качестве инструмента распознавания образов для нацеливания на распознавание фигур. Может ли кто-нибудь пролить свет на то, как этот алгоритм может работать для распознавания образов? Я видел учебники, использующие OpenCV, однако я не очень хочу использовать эту библиотеку, поскольку у меня есть возможность выполнять предварительную обработку самостоятельно, и кажется глупым, что я реализовал бы эту библиотеку только для того, что должно быть простым ближайшим соседом алгоритм.

Ответы [ 3 ]

9 голосов
/ 02 мая 2010

Вы просто (просто?) Должны определить меру "расстояния" для ваших данных.

Позволяет предположить, что вы уже сегментировали большое изображение на маленькие изображения, каждое из которых соответствует текстовому символу, который вы хотите классифицировать. Предположим, что мы имеем дело с цифровыми монокромными изображениями, поэтому каждое изображение представляется в виде прямоугольной матрицы значений (пикселей) в (скажем) целочисленном диапазоне 0-255 (яркость). Также предполагается (NN - «контролируемый алгоритм классификации»), что у вас есть много уже хорошо классифицированных изображений (ваш тренировочный набор).

Учитывая новое маленькое изображение, вы должны определить расстояние между двумя изображениями, чтобы выбрать наиболее близкое в обучающем наборе, а его «метка» была выбрана в качестве распознанного текстового символа.

Одним из наивных подходов было бы использование разности пикселей (например, суммы квадратов). Но эта мера расстояния будет чувствительна к сдвигам (и поворотам, и масштабированию), и мы обычно этого не хотим. Альтернативой может быть вычисление модуля преобразования Фурье, которое является трансляционно-инвариантным (но этого недостаточно). Отсюда вы можете начать - и оценить, что проблема сложная, и для такого рода классификации требуется много работы для приемлемого выполнения.

2 голосов
/ 09 мая 2011

Я использовал алгоритм K-Nearest-Neighbor для распознавания поз в режиме реального времени Pose-Recognition с видеокамерой.Я бы порекомендовал вам использовать Matlab для обучения и тестирования наборов данных, так как он имеет PRToolbox для этой цели, и там много помощи и примеров.Самое важное, что вы правильно выбираете функции, которые позволят надежно представлять каждый класс.После того, как у вас есть функции (это будет набор значений, таких как цвет, площадь, позиции ...) и классы, вам понадобятся образцы для обучения классификатора (например, KNN).Так же важно, как классификатор, как вы выбираете образцы для обучения.Тогда вам придется проверить классификатор.

Попробуйте разные тренировочные наборы, разные функции, разные классификаторы, потому что, возможно, KNN - не самый подходящий метод для вашего типа данных.

Я надеюсь, вы найдете это полезным.

1 голос
/ 25 сентября 2014

Вот простая реализация с использованием Python http://shyamalapriya.github.io/digit-recognition-using-k-nearest-neighbors/

...