matlab可以实现OCR吗,Matlab中的简单文本阅读器(OCR)

小编典典

灵魂

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

我很简单,有一些缺点,例如

不读“我”

只读取水平的文本

空白空间检测应改进

2020-07-28

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值