如何拆分具有轻微连接的 2 个连接对象

How to split 2 connected objects with slight connection

我正在处理 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 后

我建议您直接查看图像本身的颜色分布。具体来说,如果您查看原始图像,您会发现与图像的其余部分相比,紫色占主导地位。我建议您通过 rgb2hsv 将彩色图像转换为 HSV 颜色 space,然后对色相分量本身设置阈值。因此,做这样的事情:

%// Read directly from Whosebug
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 颜色 space 中的色相分量,紫色位于 0.6 和 0.8 之间。为了安全起见,我选择了 0.75。

我们得到:

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

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