1

如附图所示[仅用于澄清],有三排随机长度的线。我想删除比恒定 N 像素短的线。

假设:

  1. 行都在行中
  2. 线条宽度为 1 像素
  3. 线可以连接到边界。

我正在寻找任何可以帮助我的想法/指南。谢谢。在此处输入图像描述

4

1 回答 1

2

跳过直接处理底层图像的二进制表示的可能性,从而允许对这个特定任务进行非常快速的实现,让我们使用数学形态学来(有效地)解决它。

你需要的只是一个具有水平长度线的侵蚀,n然后是形态重建。前者将完全删除长度小于 < 的行n。后者将完全恢复未被删除的侵蚀线。

这是一个例子n = 25。我使用ones(1, 25)而不是strel('line', 25, 0)作为结构元素,因为后者不能保证实际的行长是指定的。

f = im2bw(imread('http://i.stack.imgur.com/1Uw0x.png'), 0);
g = imerode(f, strel('arbitrary', ones(1, 25)));
h = imreconstruct(g, f);

侵蚀和重建的图像:

在此处输入图像描述 在此处输入图像描述

于 2012-12-13T20:25:55.483 回答