【问题标题】:connected components labelling连接组件标记
【发布时间】:2013-11-12 17:47:44
【问题描述】:

我的任务是使用连接组件标签对相似像素进行分组并为其分配一个唯一的 int 标签,最后得出图像中对象的总数。

这将在我使用适当的阈值算法和值将给定图像从灰度图像转换为二值图像后完成。我已经这样做了。

我的问题是在连接组件标签中,我可以使用现有的将灰度图像转换为二进制图像的程序来计算对象吗?如果是,我会标记高于阈值的对象吗?

【问题讨论】:

  • 您能否进一步澄清这个问题?不太清楚你在问什么。
  • 我想知道如何实现连接组件标签来计算图像中的对象数量。我已经更新了我的问题以使其更清楚。我通过复制 imageOne 的像素并对其进行操作,将图像从灰度阈值设置为二进制,现在使用 imageOne(binary) 的像素我想执行连接的组件标记...请帮助我,我不'不知道如何开始,我知道我必须一次从左到右扫描图像,从上到下扫描每个单独的像素。但我不知道如何检查邻居以及如何标记它们。 @RyanCarlson
  • 我的问题始于 PNGImage imageThree = new PNGImage(imageTwo.getWidth(), imageTwo.getHeight()); ,在我从 imageTwo 中提取像素后,我不知道该怎么办

标签: java image-processing


【解决方案1】:

正如您所提到的,您应该使用两遍连接组件标记算法。具有 4 连接或 8 连接。可以在 this Wikipedia page 上找到对该算法的简单说明性解释,其中包含伪代码,所有这些都应该相当直接地转换为 Java。

您应该从那里开始,如果您有任何具体的实施问题,例如“如何检查相邻像素值?”,您应该在 StackOverflow 上发布问题。诸如“显示算法 X 的代码”之类的问题有点过于笼统,无法提供简明的答案。即使我尝试过,答案也永远不会像维基百科条目那样简单、说明性或解释性。

我希望这会有所帮助,如果您对任何特定于实现的细节有任何疑问,请回复。

【讨论】:

  • 我怎么知道像素是前景还是背景?...我正在尝试第一遍 atm...:)
  • 我该如何分配标签?...如果 (imageTwo.getRed(x-1, y)==imageTwo.getRed(x, y)){ 那么我该如何分配标签?
  • 代码中的阈值将低于阈值的所有值设置为 255。那么我假设暗像素表示原始图像中的前景?
  • 我假设imageThree 是您的标签图像。然后您只需将imageThree 中的当前位置设置为标签值,例如imageThree.setRGB(x, y, label, label, label)。您还需要跟踪相同的标签。
  • 请注意,在维基百科页面上的条件检查中,第一个和第二个条件检查的顺序似乎是错误的。请参阅this answer 了解更多信息。
猜你喜欢
  • 2010-11-06
  • 1970-01-01
  • 1970-01-01
  • 2014-02-16
  • 2021-10-11
  • 2018-01-16
  • 2012-12-31
  • 1970-01-01
  • 2017-07-19
相关资源
最近更新 更多