我一直在阅读有关Matlab中自动文本行识别的信息,尽管每篇论文都提到了许多先进的方法,但最简单的检测文本行的方法是通过水平投影。因此,我决定自己尝试这种方法。
我对此很陌生,碰到了墙,我达到了一个水平,超出这一水平,我不知道该如何进行。这是我到目前为止所取得的成就:
我正在尝试一个独立于语言并且只对文本行感兴趣的系统,所以我选择了阿拉伯文本:
<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS83WENQZy5qcGcifQ==” alt =“在此处输入图像描述”>
我使用功能radon
来获取投影。
img = rgb2gray(imread('arabic.jpg'));
[R, xp] = radon(bw_closed, [0 90]);
figure; plot(xp,R(:,2)); title('at angle 90');
这是情节(投影)
<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9LTzk5Vy5qcGcifQ==” alt =“在此处输入图像描述”>
很明显,这5个峰代表检测到的5条线,但是如何从这里开始分割原始文档?
超出这一点,谁能帮助我?我读过的所有论文都没有提到如何进行此步骤,只是说从预测中我们可以检测到线条。
我想问的是如何从绘图数据中告诉matlab文本行是什么,行之间的间隙是什么?
r = R(:,2);
r=r(92:391); % your image region
blank = r < 3; % region without text
[labeled, n] = bwlabel(blank);
C = regionprops(labeled, 'Centroid'); % find the centers of blank regions
for i=1:length(C)-1
subplot(length(C)-1,1,i)
imshow(img(C(i).Centroid(2):C(i+1).Centroid(2),:));
end
结果: