GUI Application Structure
function character_recognition_gui
mainWindow = figure('Name','Character Recognition System',...
'Position',[150,150,850,650],'MenuBar','none');
inputSelection = uicontrol('Style','popupmenu',...
'String',{'Draw Character','Upload Image'},...
'Position',[120,580,160,25]);
drawingArea = axes('Units','pixels','Position',[70,200,320,320],...
'XTick',[],'YTick',[],'Box','on');
uicontrol('Style','pushbutton','String','Clear Canvas',...
'Position',[420,420,110,35],'Callback',@resetCanvas);
resultDisplay = uicontrol('Style','text','String','',...
'Position',[180,520,240,30],'FontSize',14);
setappdata(mainWindow,'drawnData',[]);
setappdata(mainWindow,'modelData',[]);
end
Preprocessing Operations
function processImage(inputImage)
grayscale = rgb2gray(inputImage);
thresholded = imbinarize(grayscale, 'adaptive','Sensitivity',0.6);
cleaned = bwareaopen(thresholded, 45);
structuralElement = strel('diamond',3);
refined = imclose(cleaned, structuralElement);
boundaries = edge(refined, 'Canny',[0.1,0.3]);
end
Feature Extraction Implementation
function featureVector = extractCharacteristics(imageData)
[gradientX, gradientY] = gradient(double(imageData));
angleMap = atan2(gradientY, gradientX);
featureVector = extractHOGFeatures(imageData,...
'CellSize',[5,5], 'BlockSize',[3,3], 'NumBins',12);
end
Classification Mechanism
function trainClassifier()
[features, labels] = prepareTrainingSet();
partition = cvpartition(labels,'KFold',5);
classificationModel = fitcsvm(features, labels,...
'KernelFunction','polynomial','Standardize',true,...
'CrossVal','on','KFold',partition.NumTestSets);
save('recognition_model.mat','classificationModel');
end
Interactive Drawing Functions
function startDrawing(~,event)
currentAxis = gca;
initialPosition = get(currentAxis,'CurrentPoint');
xStart = initialPosition(1,1);
yStart = initialPosition(1,2);
plotHandle = line([xStart xStart],[yStart yStart],...
'Color','b','LineWidth',3);
end
function continueDrawing(~,event)
currentPosition = get(gca,'CurrentPoint');
xNext = currentPosition(1,1);
yNext = currentPosition(1,2);
line([xCurrent xNext],[yCurrent yNext],...
'Color','b','LineWidth',3);
xCurrent = xNext;
yCurrent = yNext;
end
Recognition Execution Flow
function identifyCharacter(~,~)
drawnImage = getappdata(gcf,'drawnData');
if isempty(drawnImage)
errordlg('No input provided','Detection Error');
return
end
processed = imresize(drawnImage, [32 32]);
grayscale = rgb2gray(processed);
binary = imbinarize(grayscale);
features = extractHOGFeatures(binary,'CellSize',[4 4]);
model = getappdata(gcf,'modelData');
if isempty(model)
load('recognition_model.mat','classificationModel');
end
prediction = predict(classificationModel, features);
character = char(prediction + 'A' - 1);
set(resultDisplay,'String',character);
end