如何使用K最近邻分类进行字符预测

时间:2015-03-10 18:22:58

标签: matlab image-processing classification nearest-neighbor knn

我已经使用上面的代码进行图像分割和提取,但我们如何使用knn进行分类?我需要有关代码的帮助。我在mathworks中搜索过knn classify,但我无法理解语法。任何有关代码的帮助都将不胜感激。

执行后我得到了以下结果:

enter image description here

如果我是正确的,我的目标是在使用knn分类后预测matlab编译器或记事本中的字符,但我无法在上述代码之后编码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

1 个答案:

答案 0 :(得分:2)

所以你在这里所做的就是拍摄一个单词的图像,并成功地将图像分成一些较小的单个字符图像。

这是重要的第一步,但在考虑将KNN应用于字符识别之前,还有很多步骤要做。

  1. 您需要获得更大的角色图像集。我之前从未亲自完成过字符识别,但根据我在其他分类任务中的经验,我估计为了获得好的结果,你可能需要至少几千个字符图像。

  2. 您需要手动确定每张图片的正确字符。

  3. 如果你这样做是为了自己教一个练习,那么你不是自己做1和2,我相信互联网上有免费的数据集,包含大量预先标记的字符图像,人们用来尝试新的算法。

    1. 您需要在每张图片上执行一些特征提取。这意味着您需要为每个图像提供多种功能 - 这些功能可能与您要预测的事物(在这种情况下是图像所属的字符)高度相关。我根本不是角色识别的专家,但我建议有用的功能可能是角色中的洞数,角色中的直线数,线是水平还是垂直,以及相对于整体角色的线条长度。

    2. 您需要在每个角色图像上评估这些功能。为了实现自动化,您需要编写更多图像处理代码来检测和测量每个功能。

    3. 完成所有这些操作后,您将拥有一个大致如下的数据集:

    4. ______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中。输出是测试数据集的预测标签。将这些与实际标签进行比较,看看你有多准确。

      我希望这有帮助 - 祝你好运!