train.m
上传用户:zslfgd
上传日期:2010-04-06
资源大小:115k
文件大小:3k
源码类别:

图形/文字识别

开发平台:

Matlab

  1.      %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  2.    %%                                                            %%
  3.  %%       Prof. Sclaroff's CS585 Image avd Video Processing       %%
  4. %%                         Project  ONE                            %%
  5. %%           C H A R A C T E R   R E C O G N I T I O N             %%
  6. %%                                                                 %%
  7. %%                    by Stanislav Rost                    %%
  8.  %%                       ID:  31764117                           %%
  9.   %%                                                             %%
  10.    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  11. % TRAIN.M
  12. %
  13. % The training program of the letter recognition project.  Loads the
  14. % training data, the shows the user each letter and asks the user what
  15. % the letter is.  Then it calculates parameters (momnets, compactness, 
  16. % top-to-bottom area ratio) for each letter.  In the end, the parameters
  17. % for all instances of each vowel are used to calculate the mean vector
  18. % and the covariance matrix.
  19. trainData = im2bw(imread('training.tif','tif'),0.5);
  20. trainData = ~trainData;
  21. figure;
  22. imshow(trainData);
  23. colormap(gray);
  24. % Label letters
  25. figure;
  26. trainData = bwlabel(trainData, 4);
  27. imagesc(trainData);
  28. % Extract letters
  29. letters = imfeature(trainData,'Image', ...
  30. 'Area', 'BoundingBox');
  31. numLetters = max(trainData(:));
  32. numAs = 0;
  33. numOs = 0;
  34. numUs = 0;
  35. numEs = 0;
  36. fhandle = figure;
  37. disp('Enter - for non-letters and non-inportant letters');
  38. for i = 1:numLetters,
  39. imshow(letters(i).Image);
  40. letterName = ...
  41. input('Which letter is this ?','s');
  42. if ~strcmp(letterName, '-')
  43. curMoments = invmoments(letters(i).Image);
  44. perImg = bwperim(letters(i).Image);
  45. perArea = bwarea(perImg);
  46. compactness = perArea^2/letters(i).Area;
  47. % Do ratios of top to bottom
  48. midpoint = floor(letters(i).BoundingBox(4) /2);
  49. topPart = letters(i).Image(1:midpoint,:);
  50. bottomPart = letters(i).Image((midpoint+1):end,:);
  51. partRatio = bwarea(topPart)/bwarea(bottomPart);
  52. % Add the vector to arrays of info for each vowel
  53. if strcmp(letterName, 'a')
  54. numAs = numAs + 1;
  55. ainfo(numAs,:) = [ curMoments(1) curMoments(2) curMoments(3) compactness partRatio  ];
  56. elseif strcmp(letterName, 'o')
  57. numOs = numOs + 1;
  58. oinfo(numOs,:) = [ curMoments(1) curMoments(2) curMoments(3) compactness partRatio ];
  59. elseif strcmp(letterName, 'u')
  60. numUs = numUs + 1;
  61. uinfo(numUs,:) = [ curMoments(1) curMoments(2) curMoments(3) compactness partRatio ];
  62. elseif strcmp(letterName, 'e')
  63. numEs = numEs + 1;
  64. einfo(numEs,:) = [ curMoments(1) curMoments(2) curMoments(3) compactness partRatio ];
  65. end
  66. end
  67. end
  68. close(fhandle);
  69. meanA = mean(ainfo, 1)
  70. meanU = mean(uinfo, 1)
  71. meanE = mean(einfo, 1)
  72. meanO = mean(oinfo, 1)
  73. covA = cov(ainfo)
  74. covU = cov(uinfo)
  75. covE = cov(einfo)
  76. covO = cov(oinfo)
  77. % Write out information for letter A
  78. save 'a.mat' meanA covA
  79. % Write out information for letter O
  80. save 'o.mat' meanO covO
  81. % Write out information for letter E
  82. save 'e.mat' meanE covE
  83. % Write out information for letter U
  84. save 'u.mat' meanU covU