C#:快速智能算法比较两个字节数组(图像)

时间:2013-08-12 23:12:19

标签: image algorithm c#-4.0 kinect

我在WebCam Image上运行一个进程。只有在发生重大变化时,我才想唤醒这个过程。

  • 图像中移动的东西
  • 灯开启
  • ...

所以我在C#中寻找一种快速有效的算法来比较相同大小的2字节[](kinect图像)。

  • 我只需要一种带有threashold的“diff size”
  • 我找到了一些运动检测算法,但它“太多了”
  • 我发现了一些XOR算法,但它可能太简单了?如果我可以忽略阳光,振动等微小变化,那就太棒了......

2 个答案:

答案 0 :(得分:1)

概念:MPEG标准涉及运动检测。也许你可以监控MPEG流的带宽。如果没有运动,则带宽非常低(除了关键帧(I帧)之外)。如果某些事情发生变化并且正在进行任何移动,则带宽会增加。

所以你可以做的就是抓取JPEG并将其输入MPEG编码器编解码器。然后你可以看看编码流。您可以在一个范围内调整帧速率和带宽,再加上您决定编解码器输出流的阈值是什么,这意味着“运动”。

优点:非常通用,并且有可用的库,通常它们提供硬件加速(VGA / GPU有助于JPEG en /解码和一些或多个MPEG)。它也很标准。 缺点:计算要求比XOR要多。

答案 1 :(得分:1)

  1. 标记与之前图像不同的所有像素(基于阈值,即Pixel是否仅略微更改 - 将其视为噪点),标记为“已更改

  2. 过滤掉噪点像素 - 即,如果像素被标记为已更改但其所有邻居都未被标记为 - 将其视为噪音并将取消标记为已更改

  3. 计算图像上更改的像素数,并与阈值进行比较(需要手动校准)

  4. 确保您使用的是灰度图像(非RGB)。即转换为YUV图像空间,仅在Y上进行比较。

  5. 这将是最简单,最快速的算法 - 您只需要调整这两个阈值。