Matlab 逐行字符提取
我正在研究从输入图像中识别手写字符。下面是从输入图像中提取字符的代码Matlab 逐行字符提取,matlab,image-processing,image-segmentation,Matlab,Image Processing,Image Segmentation,我正在研究从输入图像中识别手写字符。下面是从输入图像中提取字符的代码 %% Label connected components [L Ne]=bwlabel(Ifill); disp(Ne); %% Measure properties of image regions propied=regionprops(L,'BoundingBox'); hold on %% Plot Bounding Box for n=1:size(propied,1) rec
%% Label connected components
[L Ne]=bwlabel(Ifill);
disp(Ne);
%% Measure properties of image regions
propied=regionprops(L,'BoundingBox');
hold on
%% Plot Bounding Box
for n=1:size(propied,1)
rectangle('Position',propied(n).BoundingBox,'EdgeColor','g','LineWidth',2)
end
hold off
%% Characters being Extracted
figure
for n=1:Ne
[r,c] = find(L==n);
n1=imagen(min(r):max(r),min(c):max(c));
imshow(~n1);
end
但这段代码是从输入图像中随机提取字符。谁能告诉我如何逐行提取字符
假设:字符行之间有足够的间隔,因此至少有一个图像行在两行字符之间完全空白 代码
%%// Input binary image
BW = Ifill;
%%// Label connected blobs
[L,NUM] = bwlabel(BW);
%%// Find centroid points for each blob
cc = bwconncomp(BW);
stats = regionprops(cc, 'Centroid');
cent_rowcol = vertcat(stats.Centroid);
%%// Find transitions of characters starts and ends along the rows
trans1 = [0 ;diff(sum(BW,2)>0)];
%%// Find row midpoints for each row
row_midpts = (find(trans1==1) + find(trans1==-1))/2;
%%// Find the new labels based on row by row sorting
[~,row_id] = min(abs(bsxfun(@minus,cent_rowcol(:,2),row_midpts')),[],2); %%//'
[~,sortedInd] = sort((row_id-1)*size(BW,1)+cent_rowcol(:,1));
%%// Assign the new labels
L1 = zeros(size(L));
for k=1:numel(sortedInd)
L1(L==sortedInd(k))=k;
end
%%// Testing: Show all the characters one by one row by row
figure,
for k=1:numel(sortedInd)
imshow(L1==k);
pause(0.2);
end
如何使用输出,L1:您可以使用
L1==1
获取第一个字符,使用L1==2
获取第二个字符,依此类推,如代码末尾的测试部分所示。这不是随机的-bwlabel
基本上是从最左边到最右边对对象进行编号。您需要根据它们的位置将它们排序为“行”。实际上,这是简单的y值组合还是更复杂的聚类取决于图像。