Developing MATLAB-Based Character Recognition with Graphical Interface

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

Tags: MATLAB gui ImageProcessing PatternRecognition HOG

Posted on Sun, 05 Jul 2026 17:00:57 +0000 by Noggin