3

我正在编写一个matlab程序来检测自然场景图像中的文本。我正在接受这个视频讲座和论文的帮助。我理解了前几个步骤并进行了边缘检测(我在下面添加图像)。现在我想从最终图像中仅提取(分离)文本。我怎么做?

我的代码:

i = imread('f:\new.jpg');
i1 = rgb2gray(i);
imshow(i1);

i2 = edge(i1,'canny',0.3);
imshow(i2);

se = strel('square',2);
i3 = imdilate(i2,se);
imshow(i3);

i4 = imfill(i3,'holes');
imshow(i4);

[Ilabel num] = bwlabel(i4);
disp(num);
Iprops = regionprops(Ilabel);
Ibox = [Iprops.BoundingBox];
Ibox = reshape(Ibox,[4 92]);
imshow(i);

hold on;
for cnt = 1:92
    rectangle('position',Ibox(:,cnt),'edgecolor','r');
end

最终图像: 在此处输入图像描述

4

1 回答 1

1

裁剪图像的一部分是从矩阵中获取子矩阵,知道它的边界索引。例如,如果子矩阵从y1行延伸到y2行,从x1列延伸到x2列(包括所有边界),您将获得子矩阵:

submat = mainmat(y1:y2,x1:x2);

在提取子矩阵之前,您必须获取每个字母的边界坐标。如果你有一个字母yx坐标;无论是图像区域的所有坐标,还是区域边缘的坐标,您都可以获得边界坐标:

% x-coordinates of the region are in the vector x
x1 = min( x(:) );
x2 = max( x(:) );
% y-coordinates of the region are in the vector y
y1 = min( y(:) );
y2 = max( y(:) );

在对所有字母执行上述过程之后,您可以一个接一个地分离字母,但是如果您想分离出字母的连接区域,则必须检查字母边界矩形的重叠。

于 2013-03-29T08:44:56.233 回答