Как использовать классификацию K ближайших соседей для предсказания символов

Я использовал приведенный выше код для сегментации и извлечения изображений, но как мы можем использовать knn для классификации? Мне нужна помощь с кодом. Я искал knn classify в mathworks, но не могу понять синтаксис. Любая помощь с кодом будет оценена по достоинству.

Я получил результат ниже после выполнения:

введите здесь описание изображения

Если я прав, моя цель - предсказать символы в компиляторе Matlab или в блокноте после классификации с использованием knn, но я не могу закодировать ближайшего соседа k после приведенного выше кода.

%% Image segmentation and extraction
%% Read Image
imagen=imread('C:\Documents and Settings\vijaykumar\Desktop\v.jpg');
%% Show image
figure(1)
imshow(imagen);
title('INPUT IMAGE WITH NOISE')
%% Convert to gray scale
if size(imagen,3)==3 % RGB image
    imagen=rgb2gray(imagen);
end
%% Convert to binary image
threshold = graythresh(imagen);
imagen =~im2bw(imagen,threshold);
%% Remove all object containing fewer than 30 pixels
imagen = bwareaopen(imagen,30);
pause(1)
%% Show image binary image
figure(2)
imshow(~imagen);
title('INPUT IMAGE WITHOUT NOISE')
%% Label connected components
[L Ne]=bwlabel(imagen);
%% Measure properties of image regions
propied=regionprops(L,'BoundingBox');
hold on
%% Plot Bounding Box
for n=1:size(propied,1)
    rectangle('Position',propied(n).BoundingBox,'EdgeColor','g','LineWidth',2)
end
hold off
pause (1)
%% Objects extraction
figure
for n=1:Ne
    [r,c] = find(L==n);
    n1=imagen(min(r):max(r),min(c):max(c));
    imshow(~n1);
    pause(0.5)
end

person user3253365    schedule 10.03.2015    source источник
comment
k ближайших соседей — это алгоритм машинного обучения с учителем, который означает, что вам понадобится обучающий набор данных для обучения. У тебя есть?   -  person eigenchris    schedule 10.03.2015
comment
Некоторые комментарии: (1) Этот код никоим образом не выполняет KNN. Все, что вы делаете, это извлекаете объекты (2). Если вы хотите использовать KNN, вам нужно иметь набор достоверных данных или некоторые данные, с которыми вы хотите сравнить запрос, чтобы сопоставить символы. (3) Какие именно данные вы сравниваете здесь? Ваши данные пиксели? Особенности, которые вы извлекли из пикселей? Некоторые параметры, которые описывают, как определяется форма каждого символа, например дуги? круги? На ваш вопрос нельзя ответить, пока вы не предоставите больше информации о своих данных.   -  person rayryeng    schedule 11.03.2015


Ответы (1)


Итак, что вы здесь сделали, так это взяли изображение слова и успешно разделили его на несколько меньших изображений отдельных символов.

Это важный первый шаг, но предстоит сделать еще несколько шагов, прежде чем вы сможете подумать о применении KNN для распознавания символов.

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

  2. Вам нужно будет вручную определить правильный символ для каждого изображения.

Если вы делаете это как упражнение в самообучении, то вместо того, чтобы делать 1 и 2 самостоятельно, я уверен, что в Интернете есть бесплатные наборы данных, содержащие большие наборы предварительно помеченных изображений персонажей, которые люди могут использовать. при тестировании новых алгоритмов.

  1. Вам нужно будет выполнить извлечение признаков для каждого изображения. Это означает, что вам нужно придумать несколько характеристик, которые вы измеряете для каждого изображения — характеристики, которые, вероятно, сильно коррелируют с тем, что вы пытаетесь предсказать (в данном случае, с каким персонажем изображено изображение). Я вообще не эксперт в распознавании символов, но я бы предположил, что полезными функциями могут быть такие вещи, как количество отверстий в символе, количество прямых линий в символе, горизонтальные или вертикальные линии и длина строк по отношению к общему персонажу.

  2. Вам нужно будет оценить эти особенности на каждом изображении вашего персонажа. Чтобы автоматизировать это, вам нужно будет написать еще немного кода обработки изображений для обнаружения и измерения каждой из функций.

  3. Когда вы все это сделаете, у вас будет один набор данных, который выглядит примерно так:

______feature1 feature2 feature3 feature4 ... class image1 1 2 1 0 P image2 3 4 0 0 R image3 2 1 1 0 P image4 5 3 0 3 A image5 1 6 0 0 D ... image5768 2 3 1 1 Z image5769 1 6 0 0 D

К этому набору данных вы применяете KNN. Обычно вы разделяете набор данных на две части: одну для обучения и одну для тестирования. Передайте обучающие и тестовые наборы данных вместе с обучающими метками в команду MATLAB knnclassify. Результатом являются прогнозируемые метки для тестового набора данных. Сравните их с фактическими этикетками, чтобы увидеть, насколько вы были точны.

Я надеюсь, что это поможет - удачи!

person Sam Roberts    schedule 13.03.2015
comment
Спасибо за информацию, мне нужна ваша информация, спасибо еще раз - person user3253365; 14.03.2015