C 同步来自两个不同摄像机的图像

C 同步来自两个不同摄像机的图像,c,synchronization,camera,C,Synchronization,Camera,我从两台不同的相机接收图像,它们的帧速率和分辨率都不同。其中一个摄像头(智能摄像头)用作控制器。它从其他摄像头和自己的图像传感器接收图像,然后将图像对保存在车载存储器中。这里,我有个问题。我必须对每一对图像进行立体匹配。因此,图像应该完全同步(仅相隔几毫秒)。我将两台摄像机指向屏幕上的秒表,并拍摄图像,只是为了及时了解它们之间的距离。结果令人失望的是,它们都不是同步的,单个对之间的时间偏移也不是恒定的。我正在linux上工作,并用C语言编程。我尝试了两个posix线程来从各个摄像头捕获图像。第一

我从两台不同的相机接收图像,它们的帧速率和分辨率都不同。其中一个摄像头(智能摄像头)用作控制器。它从其他摄像头和自己的图像传感器接收图像,然后将图像对保存在车载存储器中。这里,我有个问题。我必须对每一对图像进行立体匹配。因此,图像应该完全同步(仅相隔几毫秒)。我将两台摄像机指向屏幕上的秒表,并拍摄图像,只是为了及时了解它们之间的距离。结果令人失望的是,它们都不是同步的,单个对之间的时间偏移也不是恒定的。我正在linux上工作,并用C语言编程。我尝试了两个posix线程来从各个摄像头捕获图像。第一个线程cam1()在开始图像捕获之前向另一个线程cam2()发出信号。因此,两个图像捕获应该同时开始。但这也不行。我非常感谢在这方面的任何解决方案。

时钟同步在每个传感器网络中都是一个非常具有挑战性的问题。我不是专家,但是你可以尝试一些解决方案

首先!在高FPS的情况下,软件同步非常困难,在这种情况下,您需要控制两台摄像机的图像采集之间的FPS(您需要具有相同的FPS)、曝光、时间戳等。摄像头同步通常在外部完成,称为外部触发器和同步I/O

在外部同步相机中,两个时钟并不总是相同的。相机时钟晶体总是有一个设计规定的漂移。您可以计算两幅图像以可分辨的方式漂移所需的时间,并重置时钟。我使用AVT相机已经有一段时间了

有兴趣将相机时间戳同步到另一个时钟的用户 应注意相机时钟将从另一个时钟漂移,以及 因此,需要通过重置 时间戳

如果FPS较低,并且可以随时知道丢弃的帧数,则可以与每个帧的(增加的)名为Frame count的注释同步


如果您有经过立体校准的图像,则默认相机图像中的某些功能(任意定义一个或仅定义触发另一个的功能)可能位于/靠近穿过另一个相机的图像。因此,极线可能会在程序逻辑中引入某种不变量来配对特征(检测到的斑点)。

我不是相机专家,所以下面的内容只是我无知的观点。这并不简单,因为涉及内核驱动程序。你不知道他们会造成什么样的延误。此外,硬件本身可能会引入延迟。我认为您必须使用相同的帧速率从两个摄像头传输视频,并找到流之间的最佳时间偏移(并且可能会继续重新评估偏移,因为帧速率可能会漂移)。感谢您提供如此详细的答案。我的问题是,我有两个完全不同的相机,具有不同的帧速率、曝光时间、捕获机制等。不知何故,我设法使用两个不同的线程来同步图像进行捕获。其中一个摄像头,GigE,现在在触发模式下工作。另一个摄像头,智能摄像头,向GigE摄像头发送一个触发器,然后从它和它自己的传感器接收图像。但是,为了匹配帧,我必须跳过智能相机中的一些帧。由于帧速率漂移,跳过有时不准确。现在,90%的图像完全同步。其余部分具有恒定的偏移量。问题是,我无法确定漂移发生的程度和时间。所以,有时候,当我跳过两帧时,我会得到一个偏移量。所有的相机都有这种帧速率漂移吗?