3

我正在研究一种显微镜,它通过内置摄像机将实时图像流式传输到 PC,在那里可以对流式传输的图像进行进一步的图像处理。对流图像进行的任何处理都必须“实时”完成(丢帧最少)。

我们取一系列静态图像的平均值来对抗来自相机的随机噪声,以改善我们的一些图像处理程序的输出。我的问题是:我怎么知道图像是否不再是静态的——被检查的样本已经移动或旋转/相机放大或缩小——所以我可以重置用于平均的图像系列?

我浏览了一些线程,以及一些看起来很有趣的想法: 注意:使用 Windows、C++ 和英特尔 IPP。使用 IPP,图像是一个字节数组 (Ipp8u)。1. 散列图像,并比较散列(普通散列或感知散列?) 2. 使用归一化互相关(IPP 有很多变体 - 使用哪个?)

你们觉得哪个适合我的情况(速度)?

4

5 回答 5

4

如果你的相机没有抖动,你可以像 inVader 所说的那样,减去图像。然后,差异图像的所有像素的绝对值之和有时足以判断图像是相同还是不同。但是,如果您的噪音、照明水平等...变化,这将无法为您提供足够好的 S/N 比。在嘈杂的条件下,普通的哈希值甚至更没用。

最好的办法是确定对象的某些特征发生了变化,比如它的边界(如果它是规则的)或它的质心(如果它是不规则的)。如果您有边界位置,则只需分析垂直于该边界的一行像素,即可判断该边界已移动。质心位置可能会经常出现假阴性反应,但增加总质量和/或转动惯量可能会有所帮助。

如果相机抖动,您可能必须在比较之前对齐图像(取决于比较方法和所需的精度,单个像素未对齐可能很大),这就是互相关帮助的地方。

此外,您不必分析每个图像。您可以跳过一个,如果下一个不同,则丢弃它们。在这里,您有两倍的时间来分析图像。如果您正在平均图像,您可能只需定义所需的最佳图像数量,并仅比较序列中的第一张和最后一张图像。

于 2012-08-03T10:20:20.583 回答
1

因此,最简单的尝试是拍摄后续图像,将它们彼此相减并查看差异。然后定义一些规则,包括两个图像被认为相等的差异的局部和全局阈值。位图/数组数据的简单减法,寻找最大值并计算整个事物的平均差异应该是实时完成的问题。

于 2012-08-03T09:41:38.120 回答
0

首先,我会以较慢的 fps 速率拍摄一系列图像,然后对这些图像进行下采样以使它们更小,不会太多但足以加快处理速度。

现在你有几个选择:

您可以通过减去它们来对两个图像的绝对差求和,并使用阈值来评估图像是否发生了变化。

如果您想进一步加快速度,我建议使用小内核进行渐进式 SAD,并从图像顶部移动到底部。您可以在此过程中重视差异的综合数量,并最终在您满意时停止。

于 2012-08-10T09:17:52.890 回答
0

如果有不同的光照条件或以可预测的方式移动的东西(如门的打开和关闭),那么功能更强大但速度较慢的东西(如用于背景建模的高斯混合模型)可能值得研究,请单击此处。它是计算密集型的,但可以很容易地并行化。

于 2012-08-03T10:31:01.233 回答
0

使用的是运动检测算法。

http://www.codeproject.com/Articles/10248/Motion-Detection-Algorithms

http://www.codeproject.com/Articles/22243/Real-Time-Object-Tracker-in-C

于 2012-08-07T05:37:33.657 回答