识别相似颜色像素的组

时间:2016-08-19 03:34:19

标签: c# image image-processing

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

用户不会看到此图片,因此我希望我的软件能够为我识别这一点。从这个分析中我不需要任何太复杂的东西 - 只需要一个布尔值来判断场景中是否有某些东西被改变了。

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

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

2 个答案:

答案 0 :(得分:0)

此时我假设您已经了解了您有兴趣捕获的对象的比例。例如,如果你确实有一个完全非黑色的屏幕(让我们忽略噪音,为了讨论的目的),除了你有一个直径大约只有10个像素的黑色像素对象。这似乎非常小,而且没有足够的信息可用。

一旦你确定了你愿意接受的黑色质量的最小尺寸,我就会去查询交错的矩阵。

,例如:

enter image description here

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

一旦获得正面结果(像素=黑色),请调查这些部门。

答案 1 :(得分:0)

  1. 阈值图像,使黑色像素的值为1,非黑色将为零。
  2. 使用连接的组件标签查找所有连接的黑色像素组。 http://www.imagemagick.org/script/connected-components.php
  3. 过滤掉太小或没有正确形状的组件(例如,两侧可能有一条长线,因此它们有很多黑色像素,但您不希望看到长线一组有效的黑色像素)