2015-06-30 40 views
2

我想获得的图像的连接组件,然后为每个连接component.This运行ocr是我的代码 -连接的部件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

我得到这个,当我在显示去年第四组件line.But在下一行我没有得到这个组件的ocr任何结果。所以我的问题是为什么我没有得到这个组件ocr,而所有其他组件在ocr给一些结果。

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

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

+0

当我使用二进制图像(对应于你的“Component”图像)时,我需要对'ocr'进行一个细微的形态学操作来实际检测某些东西(字母I)。否则我什么都没得到。你是说在你的情况下,它确实发现了一封没有任何操纵的信件? –

+0

我已经编辑了我的问题。实际上,我使用外部软件从组件图像中删除了白色边框,然后使用它。然后'ocr'检测到这个“|” – Noober

+0

OCR:光学字符识别。除非你正在检测的是字符(例如“H”,“L”,“|”,...),否则它对你无用。 –

回答

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将正确识别字母(至少从您提供的图像中)。 将它们绑定为进一步只需要您构建一些规则。

享受。