简单的文本阅读器(OCR)在Matlab [英] Simple text reader (OCR) in Matlab
本文介绍了简单的文本阅读器(OCR)在Matlab的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我试图写一个简单的程序来读取灰度一个BMP图像。我有一组模式(除了'我'全字母),我想与它们匹配。我有问题,这样做在Matlab。
I am trying to write a simple program to read a bmp image in gray scale. I have a set of patterns (the whole alphabet except for 'I') and I want to match them. I have problems doing this in Matlab.
我得到了什么至今:
clear
clc
%set of patterns
BW1 = imread('alphabet.bmp');
patterns = bwlabel(~BW1);
patternStats = regionprops(patterns,'all');
patternNumber = size(patternStats);
imagePatternArray = cell(patternNumber);
%make cell array of pattern vectors
for i = 1:1:patternNumber
imageMatrix = patternStats(i).Image;
imageVector = imageMatrix(:);
imagePatternArray{i} = imageVector;
end
%set of chars
BW2 = imread('text.bmp');
text = bwlabel(~BW2);
textStats = regionprops(text,'all');
letterNumber = size(textStats);
imageLetterArray = cell(letterNumber);
%make cell array of text vectors
for i = 1:1:letterNumber
imageMatrix = textStats(i).Image;
imageVector = imageMatrix(:);
imageLetterArray{i} = imageVector;
end
%lookup table
charSet =['A','B','C','D','E','F','G','H','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'];
现在我想给定的载体比较模式矢量,但他们有不同的大小。
Now I would like to compare the pattern vectors with the given vector, but they have different sizes.
我怎样才能做到这一点?是否有一些特殊的比较功能?我应该添加0到最后,然后计算与 pdist
?
How can I do this? Is there some special compare function? Should I add 0s to the end and then calculate the distance with pdist
?
推荐答案
在soultion
clear
clc
%set of patterns
BW1 = imread('alphabet.bmp');
patterns = bwlabel(~BW1);
patternStats = regionprops(patterns,'all');
patternNumber = size(patternStats);
imagePatternArray = cell(patternNumber);
%make cell array of pattern Matrices
for i = 1:1:patternNumber
imageMatrix = patternStats(i).Image;
imageMatrix = imresize(imageMatrix, [25 20]);
imagePatternArray{i} = imageMatrix;
end
%set of chars
BW2 = imread('kol_2.bmp');
BW2Gray = rgb2gray(BW2); %convert text to grayscale bmp - 0 OR 1
text = bwlabel(~BW2Gray);
textStats = regionprops(text,'all');
letterNumber = size(textStats);
imageLetterArray = cell(letterNumber);
%make cell array of text Matrices
for i = 1:1:letterNumber
imageMatrix = textStats(i).Image;
imageMatrix = imresize(imageMatrix, [25 20]);
imageLetterArray{i} = imageMatrix;
end
%white spaces
whiteSpacesIndexes = [];
for i = 1:letterNumber - 1
firstLetterBox = textStats(i).BoundingBox;
positionFirstVector = [firstLetterBox(1), firstLetterBox(2)];
secondLetterBox = textStats(i+1).BoundingBox;
positionSecondVector = [secondLetterBox(1), secondLetterBox(2)];
distanceVector = positionSecondVector - positionFirstVector;
distance = norm(distanceVector)
% if the distance between is bigger that letter width plus 1/3 of width, it is a whitespace
bothLettersSize = firstLetterBox(3) + secondLetterBox(3);
noSpaceDistance = bothLettersSize - bothLettersSize * 0.25; % - 25 per cent (heuristic value)
if (distance > noSpaceDistance) %&& (abs(distanceVector(2)) > 1.0)
whiteSpacesIndexes = [whiteSpacesIndexes, i + 1];
end
end
compareVector = size(patternNumber);
indexArray = size(letterNumber);
for i = 1:1:letterNumber
for j = 1:1:patternNumber
correlationMatrix = normxcorr2(imagePatternArray{j},imageLetterArray{i});
compareVector(j) = max(abs(correlationMatrix(:)));
end
[correlationMax,correlationIndex] = max(compareVector);
indexArray(i) = correlationIndex;
end
%lookup table
charSet = ['A','B','C','D','E','F','G','H','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'];
%outPut stream
outPut = size(letterNumber);
for i = 1:1:letterNumber
outPut(i) = charSet(indexArray(i));
end
whiteSpaceNumber = size(whiteSpacesIndexes,2);
whiteSpacesIndexes = whiteSpacesIndexes + (0:numel(whiteSpacesIndexes)-1)
nFinal = numel(outPut)+numel(whiteSpacesIndexes ); %# New length of result with blanks
newstr = blanks(nFinal); %# Initialize the result as blanks
newstr(setdiff(1:nFinal,whiteSpacesIndexes )) = outPut
我很简单,有一些缺点,如
I fairly simple and have some drawback like
- 在不读我在
- 读取文本仅horizonatal条
- 在空白的检测应该改进
这篇关于简单的文本阅读器(OCR)在Matlab的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文