我有一个MATLAB代码,可以在每个字母周围绘制边界框。
我想在每个单词而不是每个字符周围绘制这些框。
我想到了
怎么办呢?
这是到目前为止的图像:
到目前为止,这是我的代码:
%CLEAR EVERYTHING
clear all;
close all;
%SET FOLDER AND FILE LOCATION
folder = 'H:\Miscellaneous\Work\Project';
baseFileName = 'lorem-ipsum.jpg';
fullFile = fullfile(folder, baseFileName);
%CONVERT TO GRAYSCALE
normal = imread(fullFile);
gray = rgb2gray(normal);
%CONVERT TO BINARY IMAGE
binary = im2bw(gray);
%INVERT IMAGE
binary = ~binary;
%FILL HOLES
ifill=imfill(binary,'holes');
figure,imshow(ifill)
%COUNT LETTER IN TEXT
[Ilabel num]=bwlabel(ifill);
disp(num)
%CALCULATE REGION PROPERTIES
Iprops=regionprops(Ilabel);
%SET BOX PROPERTIES INTO VARIABLE
Ibox=[Iprops.BoundingBox];
%RESHAPE 1-D ARRAY
Ibox=reshape(Ibox,[4 num]);
%DRAW BOUNDING BOXES FOR EACH LETTER
for cnt=1:num
rectangle('position',Ibox(:,cnt),'edgecolor','r');
end
hold off
我想你有个好主意。您将信箱分组为单词,然后计算每组的边界框。
在您的特定示例中,您可以通过形态学闭合非常快地完成此操作。我在这里不解释如何计算单词间距,您只需要字符间距,它是所使用字体的参数。我将此参数称为Sp。在您的图像上,Sp大约为4像素。
因此,首先获取您的二进制映像;请注意,在此处填充孔非常有趣。使用形态学封闭,您可以直接处理字母,而无需使用其边界框。
binclosed = imclosed(binary, strel('rectangle',[2 ceil(Sp/2)]));
在这里,我用一个高度为2的矩形关闭,以捕捉例如“ i”的点。
然后,您可以标记已连接的组件并像对待字符一样绘制其边界框。
[Ilabel,num] = bwlabel(binclosed);
Iprops = regionprops(Ilabel, 'BoundingBox');
Ibox = reshape([Iprops.BoundingBox],[4 num]);
for cnt=1:num
rectangle('position',Ibox(:,cnt),'edgecolor','r');
end
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句