matlab中的连接组件ocr(图像处理)

时间:2015-06-30 14:41:27

标签: matlab image-processing

我正在尝试获取图像的连接组件,然后为每个连接的组件运行ocr。这是我的代码 -

clc
image=imread('im.png');
image=imcomplement(image);

[imx imy]=size(image);
n1=zeros(imx,imy);
symb=zeros(imx,imy);
lin=zeros(imx,imy);
L = bwlabel(image,8) ;%Calculating connected components
mx=max(max(L));
for i=1:mx
    [r,c] = find(L==i);
    n1=zeros(imx,imy);
    rc = [r c];
    [sx sy]=size(rc);

    for j=1:sx
        x1=rc(j,1);
        y1=rc(j,2);
        n1(x1,y1)=1;
    end

    figure,imshow(n1);title('components');
    r = ocr(n1,'TextLayout','Word')
    n=strtrim(r.Text); 
end 

这是我输入的图像 - enter image description here

我得到的一个连接组件是 - enter image description here

当我在最后一行显示组件时,我得到了这个。但是在下一行我没有得到这个组件的ocr的任何结果。所以我的问题是为什么我没有得到ocr这个组件而所有其他组件都在ocr中给出了一些结果。

如果代替im.png我在代码的第一行使用此组件作为输入 - 我得到了一个ocr。为什么会发生这种情况?

编辑 - 如果我使用此组件作为输入,我会得到ocr。 enter image description here

1 个答案:

答案 0 :(得分:0)

我不知道你想要达到什么目的(你的帖子里不是很清楚)。但如果你想要的是提取化学式中的字母,下面的代码就可以了。

I = imread('6oua6.png');
s = regionprops(~I,{'BoundingBox'});
for ii=1:numel(s)
  bb = s(ii).BoundingBox;
  if bb(4)<30 % enforce a limit to discard non-letters
    ocr(I,s(ii).BoundingBox, 'TextLayout', 'Block' )
    rectangle('Position',s(ii).BoundingBox+[-1 -1 2 2 ],'Edgecolor','y')
    pause
  end
end   

ocr将正确识别字母(至少从您提供的图像中)。 将它们进一步绑定只需要您构建一些规则。

享受。