0

我正在为 c# 使用 EMGU OpenCV 包装器。我已经很好地创建了一个视差图。但是对于我的特定应用程序,我只需要很少像素的视差值,并且我需要它们实时。现在计算大约需要 100 毫秒,我想通过获得数百个像素值而不是数千个像素值的差异,事情会大大加快。我不太了解立体求解器代码的“幕后”发生了什么,有没有办法通过只计算我需要的像素的差异来加快速度?

4

1 回答 1

0

首先,您没有提及您真正想要完成的工作,以及您正在使用的算法。例如,与 StereoSGBM 和 StereoBM 相比,StereoGC 非常慢(即不是实时的),但通常更准确。如果满足以下几个条件,则可以实时使用最后两个:

  • 输入图像的尺寸相当小;
  • 您没有使用过多的参数集(例如,较大的值numberOfDisparities会增加计算时间)。

不过,在准确性方面不要指望奇迹。

除此之外,还有“只有几个像素”的问题。据我了解,OpenCV 中实现的算法通常依赖于超过 1 个像素的信息来确定视差值。例如,它需要一个邻域来检测图像 A 中的哪个像素映射到图像 B 中的哪个像素。因此,通常不可能只丢弃图像的每个其他像素(顺便说一下,如果您已经知道位置在这两个图像中,您根本不需要立体方法)。因此,除非您可以丢弃您知道永远不会在那里找到感兴趣的像素的输入图像的大边框,否则我会说您问题的这一部分的答案是“否”。

如果您碰巧知道您感兴趣的像素将始终位于输入图像的某个矩形内,您可以将输入图像的 ROI(感兴趣区域)指定到该矩形。假设 OpenCV 在这里不包含错误,这应该会加快计算速度。

通过一些谷歌搜索,您可以找到使用 Youtube 上的 GPU 使用 EmguCV(或普通 OpenCV)查找立体对应的实时示例。也许这可以帮助你。

免责声明:如果您的问题包含更多细节,这可能是一个更完整的答案。

于 2012-03-19T17:51:12.517 回答