如何在matlab中使用“bwlabel”分别标记图像中的单独线条(文本图像)?

时间:2017-12-07 14:19:25

标签: matlab image-processing text label

我在图像中识别并标记了完全由文本组成的对象。您可以看到附加图像中的对象标记为红色。所以,我想从第一行 分离 第二行中的对象(或更多行),并为它们提供不同的颜色(每行会有不同的颜色)但我不能这样做。你有什么主意吗?谢谢你的所有答案。 这是我执行标记的 matlab 代码的一部分:

%% Label connected components
[L, Ne]=bwlabel(imagen);
%% 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','r','LineWidth',2)
end

这是标记为不同行中的所有对象具有相同标签(相同颜色=红色)的图像。 enter image description here

1 个答案:

答案 0 :(得分:1)

我认为如果线条不太弯曲,以下方法应该有用。

  • 找到边界框的质心,或从regionprops本身获取质心,然后使用k = 2的kmeans对其y坐标进行聚类。 结果并不完美,但很好。然后,您可以将曲线拟合到聚类点,并删除异常值(例如RANSAC)

cluster

OR

  • 填写边界框准备新图像。 filled

  • 准备一个矩形结构元素,其高度为1,宽度为最宽边界框的宽度。

  • 使用此结构元素执行填充图像的形态学关闭。这将水平连接区域。现在你得到一个分隔两个区域的面具。 closed

结果图像是使用opencv获得的(我没有发布代码,因为它太不整洁了。希望说明足够清楚。)