2016-08-19 85 views
0

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

用户将看不到此图像,所以我会就像我的软件为我识别这一点。从这个分析中我不需要任何太复杂的东西 - 只是布尔值是否在场景中发生了变化。

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

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

+0

也许你也可以在这里问这个问题:https://www.imagemagick.org/discourse-server/index.php – dlemstra

回答

0
  1. 阈值的图像,使黑色像素将有价值1非黑色将有零。
  2. 使用连接组件标签来查找所有连接的黑色像素组。 http://www.imagemagick.org/script/connected-components.php
  3. 过滤出的元件太小或者没有正确的形状(例如,你可以在两侧有一条长线,这样他们有很多黑色像素,但你不希望看到一条长线作为一组有效的黑色像素)
0

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

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

即,像这样一个规律:

enter image description here

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

一旦你有积极的结果,(像素=黑色),调查在这些部门。