Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 实时检测图像是否不同_C++_C_Image Processing - Fatal编程技术网

C++ 实时检测图像是否不同

C++ 实时检测图像是否不同,c++,c,image-processing,C++,C,Image Processing,我正在研制一种显微镜,它通过内置摄像机将实时图像传输到PC,在PC上可以对流式图像进行进一步的图像处理。对流式图像进行的任何处理都必须“实时”完成(丢弃的帧数最少) 我们对一系列静态图像进行平均,以抵消来自相机的随机噪声,从而提高一些图像处理例程的输出。 我的问题是:我如何知道图像是否不再是静态的-被检查的样本已经移动或旋转/相机放大或缩小-以便我可以重置用于平均的图像序列 我浏览了一些线索和一些似乎很有趣的想法: 注意:使用Windows、C++和英特尔IPP。对于IPP,映像是一个字节数组(

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

我们对一系列静态图像进行平均,以抵消来自相机的随机噪声,从而提高一些图像处理例程的输出。 我的问题是:我如何知道图像是否不再是静态的-被检查的样本已经移动或旋转/相机放大或缩小-以便我可以重置用于平均的图像序列

我浏览了一些线索和一些似乎很有趣的想法: 注意:使用Windows、C++和英特尔IPP。对于IPP,映像是一个字节数组(Ipp8u)。 1.对图像进行散列,并比较散列(普通散列还是感知散列?) 2.使用标准化互相关(IPP有许多变体-使用哪种?)


你们认为哪一种适合我的情况(速度)?

所以,最简单的尝试就是拍摄后续图像,将它们相互减去,然后看看它们之间的差异。然后定义一些规则,包括局部和全局阈值的差异,其中两个图像被视为相等。简单地减去位图/数组数据,寻找最大值并计算整个过程中的平均差值应该是实时完成的一个问题。

如果你的相机没有抖动,你可以像入侵者说的那样减去图像。然后,差分图像的所有像素的绝对值之和有时足以判断图像是相同的还是不同的。但是,如果您的噪音、照明水平等。。。不同,这将无法提供足够好的信噪比。 在嘈杂的环境中,正常的散列甚至更无用

最好是确定对象的某些特征已更改,如边界(如果是规则的)或质心(如果是不规则的)。如果你有一个边界位置,你只需要分析一行垂直于边界的像素,就可以知道边界已经移动了。 质心位置可能是经常出现的假阴性响应的对象,但添加总质量和/或惯性矩可能会有所帮助

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

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

如果光照条件不同或某个物体以可预测的方式移动(如开门和关门),则可以选择更强大的,尽管速度较慢,像背景建模的高斯混合模型一样,可能值得研究。它计算量很大,但可以很容易地并行化。

使用的是运动检测算法


首先,我会以较慢的fps速率拍摄一系列图像,并对这些图像进行下采样,使其变小,不会太大,但足以加快处理过程

现在您有几个选项:

您可以通过减去两幅图像的绝对差值来求和,如果图像已更改,则使用阈值来确定其值


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

您考虑过使用OpenCV吗?