如何使用Matlab中的"bwlabel"分别标记图像(文本图像)中的各行?

3

我已经识别和标记了完全由文本组成的图像中的对象。您可以在附图中看到这些对象被标记为红色。因此,我想要将第二行(或更多行)中的对象从第一行中分离出来,并给它们不同的颜色(每行都有不同的颜色),但我无法做到。你有什么想法吗?感谢所有的回答。 以下是我使用的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


请问您能否上传原始图片?您是否事先知道有多少行代码? - Leander Moesinger
@LeanderMoesinger 原始图像没有任何红色矩形。我们可以假设有两条线,就像附图所示。 - amIllusionist
1个回答

1
我认为以下方法在线条不太弯曲的情况下应该可行。
  • 找到边界框的质心,或从regionprops本身获取质心,然后使用kmeans将它们的y坐标聚类为k = 2。 结果并不完美,但还可以。也许您可以对聚类点拟合曲线,并进行异常值删除(例如RANSAC)

cluster

或者

  • 通过填充边界框来准备一个新图像。 filled

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

  • 使用此结构元素对填充图像执行形态学闭运算。这将水平连接区域。现在您获得了分离两个区域的掩码。 closed

所得到的图像是使用opencv获取的(我没有发布代码,因为太杂乱了。希望说明足够清楚)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接