matlab中的连通分量ocr(图像处理)
我正在尝试获取图像的连接组件,然后为每个连接的组件运行matlab中的连通分量ocr(图像处理),matlab,image-processing,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));
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
这是我的输入图像-
我得到的一个连接组件是-
当我在最后第四行显示组件时,我得到了这个结果。但是在下一行,我没有得到这个组件的ocr的任何结果。所以我的问题是,为什么我没有得到这个组件的ocr
,而所有其他组件在ocr
中给出了一些结果
如果在我的第一行代码中使用这个组件作为输入,而不是im.png
,我会得到一个ocr,为什么会发生这种情况
编辑-如果我使用此组件作为输入,我将获得ocr。
我不知道你到底想要实现什么(从你的帖子上看不是很清楚)。但是如果你想提取化学式中的字母,下面的代码就可以了
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
I=imread('6oua6.png');
s=regionprops(~I,{'BoundingBox'});
对于ii=1:numel(s)
bb=s(ii).边界框;
如果bb(4)当我使用二值图像(对应于您的“组件”图像)时,我需要对ocr
执行轻微的形态学操作,以实际检测某些东西(字母I)。否则我什么也得不到。你是说在你的情况下,它可以检测到一个字母而不需要任何操作?我已经编辑了我的问题。实际上,我使用一个外部软件从元件图像中删除白色边框,然后使用它。ocr
然后检测这个
ocr:光学字符识别。除非您检测的是字符(例如“H”、“L”、“|”和……),否则它对您没有任何用处。