【问题标题】:Identify groups of similar-coloured pixels识别相似颜色的像素组
【发布时间】:2016-08-19 13:26:09
【问题描述】:

我正在编写一些软件,它会定期检查相机图像,以确定对象是否已被引入到所查看的场景中。我在我的 WinForms 软件中使用ImageMagick 来比较两个图像以创建第三个。在第三个图像中,如果前两个图像具有相似颜色的像素,则该像素为白色,如果它们不同,则为黑色。因此,如果用户看到一组黑色像素,他们就会知道场景中放置了一些以前不存在的东西,如下所示:

用户不会看到此图像,因此我希望我的软件能够为我识别此图像。我不需要从这个分析中得到任何太复杂的东西 - 只是一个布尔值,用于判断场景中是否发生了变化。

在我看来,有两种分析方法;计算图像中黑色像素的数量,或者我可以编写一些算法来识别黑色块。我的问题是关于第二种方法,因为它感觉像是更正确的方法。图像有点太吵了(你可以在直边看到误报),让我感觉完全无法计数。

为了识别一个组,我考虑过使用一些 for 循环来查看每个像素周围像素的颜色,但这似乎需要很长时间。我的处理时间不能超过几秒钟,所以我需要警惕这一点。是否有更清洁或更有效的方法来识别颜色相似的像素组?还是我需要运行循环并尽可能高效?

【问题讨论】:

标签: c# image image-processing


【解决方案1】:
  1. 对图像设置阈值,使黑色像素的值为 1,非黑色像素为零。
  2. 使用连通分量标记查找所有连通的黑色像素组。 http://www.imagemagick.org/script/connected-components.php
  3. 过滤掉太小或形状不正确的组件(例如,您可以在侧面有一条长线,因此它们有很多黑色像素,但您不希望看到一条长线一组有效的黑色像素)

【讨论】:

    【解决方案2】:

    在这一点上,我假设您对您有兴趣捕捉的对象的规模有所了解。例如,如果您确实有一个完全非黑色的屏幕(为了讨论的目的,让我们忽略噪声),除非您有一个直径只有大约 10 像素的黑色像素对象。这似乎非常小,而且没有足够的信息有用。

    一旦你确定了你愿意接受的最小黑色块大小是多少,我就会去查询一个交错矩阵。

    即,类似的模式:

    使用一点数学来确定可接受的噪音是什么。

    一旦你得到了积极的结果,(像素 = 黑色),就在这些领域进行调查。

    【讨论】:

      猜你喜欢
      • 2021-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-14
      • 2018-07-14
      • 2015-08-10
      • 1970-01-01
      • 2020-06-19
      相关资源
      最近更新 更多