我正在制作一台显微镜,通过内置摄像头将实时图像传输到PC,可以对流式图像进行进一步的图像处理。在流式图像上完成的任何处理都必须“实时”完成(丢失最小帧)。
我们采用一系列静态图像的平均值来对抗来自相机的随机噪声,以改善我们的一些图像处理程序的输出。 我的问题是:我怎么知道图像是否不再是静态的 - 要么检查中的样本已经移动或旋转/相机放大或缩小 - 所以我可以重置用于平均的图像序列?
我浏览了一些线程,以及一些看似有趣的想法: 注意:使用Windows,C ++和Intel IPP。使用IPP,图像是字节数组(Ipp8u)。 1.散列图像,并比较散列(正常散列或感知散列?) 2.使用归一化互相关(IPP有很多变化 - 使用哪些?)
你认为哪个适合我的情况(速度)?
答案 0 :(得分:4)
如果您的相机没有抖动,您可以像InVader所说的那样减去图像。然后,差异图像的所有像素的绝对值之和有时足以判断图像是相同还是不同。但是,如果您的噪音,照明等级......变化,这将无法为您提供足够好的信噪比。 在噪音条件下,正常的哈希更加无用。
最好的方法是确定对象的某些特征已经改变,例如它的边界(如果它是常规的)或它的质量中心(如果它是不规则的)。如果你有一个边界位置,你需要只分析垂直于该边界的一行像素,以告知边界已移动。 质心位置可能会受到频繁的假阴性反应,但增加总质量和/或惯性矩可能会有所帮助。
如果相机抖动,您可能需要在比较之前对齐图像(取决于比较方法和所需的准确度,单个像素未对准可能很大),这就是互相关有用的地方。
此外,您不必分析每个图像。您可以跳过一个,如果下一个不同,则丢弃它们。在这里,您有两倍的时间来分析图像。 如果您要对图像进行平均,您可能只需定义所需的最佳图像数量,并仅比较序列中的第一个和最后一个图像。
答案 1 :(得分:1)
因此,最简单的尝试是拍摄后续图像,相互减去它们并查看差异。然后定义一些规则,包括局部和全局阈值,以确定两个图像相等的差异。简单地减去位图/数组数据,寻找最大值并计算整个事物的平均差异应该是实时的问题。
答案 2 :(得分:0)
如果有不同的光线条件或某些东西以可预测的方式移动(如门打开和关闭),那么更强大的东西,尽管比较慢,如用于背景建模的高斯混合模型,可能值得研究,{{3 }}。它非常容易计算,但可以很容易地并行化。
答案 3 :(得分:0)
运动检测算法就是使用的。
http://www.codeproject.com/Articles/10248/Motion-Detection-Algorithms
http://www.codeproject.com/Articles/22243/Real-Time-Object-Tracker-in-C
答案 4 :(得分:0)
首先,我会以慢fps速率拍摄一系列图像并对这些图像进行下采样,使其变小,不要太多,但足以加快处理速度。
现在你有几个选择:
您可以通过减去它们来计算两个图像的绝对差值之和,并在图像发生变化时使用阈值来估算。
如果你想进一步加快速度,我建议使用一个小内核进行渐进式SAD,并从图像顶部移动到底部。您可以在过程中重视无差异的差异,并在您满意时最终停止。