OCR low-res image from specified set of characters

14 ビュー (過去 30 日間)
Amit
Amit 2016 年 2 月 8 日
回答済み: Amit 2016 年 2 月 21 日
Hello all:
Is there a way in which I provide the super set of characters (no characters to be expected outside the set) to the OCR. I mean to say for example if I know that my images has only [U, T, C, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, :, space] as the only characters, can I feed it to matlab OCR and thus expect better predictions.
Can this help somehow on low res image to increase the accuracy?
Kindly see the attached image I am struggling to get good results with.
Thanks much for your attention. Any thoughts will be immensely helpful.
Regards,
Amit

採用された回答

Image Analyst
Image Analyst 2016 年 2 月 8 日
For something like that you can probably just crop out each character and find the area. Then, assuming each character has a unique area, have a look up table where a certain area means the character must be a certain character.
  2 件のコメント
Image Analyst
Image Analyst 2016 年 2 月 10 日
Right. Something like
measurements = regionprops(labeledImage, 'Area');
allAreas = [measurements.Area];
% Define character areas
characterAreas = [300,410,130,500,........] % Whatever they are.
for k = 1 : length(allAreas)
differences = abs(measurements(k).Area - characterAreas);
[~, closestCharacterIndex] = min(differences);
% Now you know what character it is....
end

サインインしてコメントする。

その他の回答 (2 件)

Anand
Anand 2016 年 2 月 8 日
編集済み: Anand 2016 年 2 月 8 日
This exact functionality is available in the ocr function. Use the 'CharacterSet' Name-Value pair to achieve this. Something like this:
ocrResults = ocr(yourImage,'CharacterSet','UTC1234567890')
In your case, you may have even more information that you can supply to the ocr function. If it's a valid assumption that the left half of the image only contains characters, you could have two calls to ocr with different ROI's.
For example (this is pseudo-code),
leftROI = [1 1 floor(size(im,2)/2) size(im,1)-1];
ocrLeftResults = ocr(im, leftROI, 'CharacterSet','UTC');
rightROI = [floor(size(im,2)/2)+1 1 floor(size(im,2)/2) size(im,1)-1];
ocrRightResults = ocr(im, rightROI, 'CharacterSet', '0123456789');
  5 件のコメント
Amit
Amit 2016 年 2 月 10 日
Hello Anand, thank you. Its very helpful, though the low resolution of my image I guess is resulting in very bad quality of predictions.
Any thoughts.
Thanks again indeed.

サインインしてコメントする。


Amit
Amit 2016 年 2 月 21 日
Dear all:
Opening the question again. I have 2864 files such as one attached. I have not been able to find anything, MATLAB or otherwise that works reliably to give me the OCR out. That was my Sunday.
Any of your kind suggestions/directions will be immensely helpful.
Thanks much.
Amit

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by