1

我正在从事 OCR 项目,我面临一个问题,即要识别的文本图像可能包含连接的两个字符,所以当我尝试获取每个字符时,它将这两个字符作为一个图像。这是代码

BW1 = imread('test.png');
BW1 = BW1(:,:,1);
BW1=im2bw(BW1,0.9);
imshow(BW1)
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 25]);
  imagePatternArray{i}=imageMatrix;
end  

原始图像 原始图像

转换为 BW 后 处理后的图像

4

1 回答 1

1

我建议您做的是直接查看图像本身的颜色分布。具体来说,如果您查看原始图像,您会发现与图像的其余部分相比,有一个占主导地位的紫色。我建议您rgb2hsv在色调组件本身的阈值之前将您的彩色图像转换为 HSV 颜色空间。因此,请执行以下操作:

%// Read directly from StackOverflow
im = imread('http://i.stack.imgur.com/vu92r.png');

%// Convert image into HSV
hsv = rgb2hsv(im2double(im));

%// Threshold hue component by 0.75
out = im2bw(hsv(:,:,1), 0.75);

%// Show the image
imshow(out);

如果您查看 HSV 颜色空间中的色调分量,紫色位于 0.6 和 0.8 之间。为了安全起见,我选择了 0.75。

我们得到:

在此处输入图像描述

输出非常小,所以让我使用双线性插值将图像大小调整 4 倍:

在此处输入图像描述

由于上采样,您会看到一些混叠,但请忽略它。我想告诉你每个字母肯定是分开的。您可以单独处理这些字母。

于 2015-02-10T23:38:23.087 回答