MATLAB: Image recognition: extracting numbers from white paper

computer visionComputer Vision Toolboximage recognitionocr

I have a large dataset of coloured images, all with one person holding a white piece of paper with a printed number. I am trying to extract the number as a class label for each person. By binarizing the image and removing small areas I can create an image as shown. But from here, all implementations of the ocr function I have attempted fail to extract the number. I have also attempted using corner extraction, but this does not work easily as some candidates are obscuring the corners of the paper with their hands. Could anyone provide some tips on how to achieve this?
Code:
clc
clear all
close all
% Load an image
rgbImage = imread('person11.jpeg');
grayImage = rgb2gray(rgbImage);
% Binarize the image.
binaryImage = grayImage > 120;
% Remove small objects.
binaryImage = bwareaopen(binaryImage, 5000);
figure(1)
imshow(binaryImage);
title('Cleaned Binary Image');
% Use the 'CharacterSet' parameter to constrain OCR
results = ocr(binaryImage, 'CharacterSet', '0123456789', 'TextLayout','Block');
results.Text
Output lots of different numbers, not 11!
Image:

Best Answer

Stephanie:
I'm sure you've got it working by now, but for others (or if you want to compare your algorithm to mine), here is how I would do it (attached). You could make it a lot faster if you didn't have the background be the same color as the sheet of paper the subject is holding. That could save us time because we wouldn't have to spend a lot of time to separate the two with an erosion. Have the background be some vivid color - any color except white or black or gray.
0000 Screenshot.png