ORB - 物体需要非常靠近相机

ORB - object needs to be very close to camera

我有一个程序可以从 RSTP 获取视频源并检查对象。唯一的问题是物体需要距离摄像头大约 6 英寸,但是当我使用有线网络摄像头时,物体可能在几英尺远。两个摄像头都以相同的分辨率传输,是什么导致了这个问题?

相机传输规格:

    Resolution: 640 * 480 
    FPS: 20 
    Bitrate: 500000
    Focal Length: 2.8mm

编辑: 我使用的算法是 OpenCV ORB 算法,但我之前在 OpenCV 中使用 Haar 分类器方法时也看到了这种行为。

以下是网络摄像头无法再检测到对象的限制。 (约 66 像素)

以下是 Glass 无法再检测到对象的限制。 (约 68 像素)

从图像上看,距离看起来很相似,但距离至少是网络摄像头图像中的距离的两倍,在我看来是相机 属性 导致了此问题?如果是这样,相机的哪个部分会导致这种情况?

正如您自己所认识的,两幅图像中的对象大小非常相似,因此该算法似乎会因某个对象分辨率而停止。

两个相机之间的距离差异(对于相同的物体大小)来自相机的固有参数,如焦距(来自镜头 objective)和传感器芯片的尺寸。

根据您用于检测对象的方法,您可以调整(放大)第二张图像的大小,除非这会导致过多的插值伪像(您的检测方法可能无法处理)。

对于许多具有最小对象大小的检测器来说,放大图像是可以的,直接来自训练数据或训练 window 大小。升级可能会导致额外的(急剧的)速度性能提升。

如果已知两个相机的内在参数并且图像已经不失真,则可以计算两个图像之间的比例因子,即:

ratioX = fx1/fx2
ratioY = fy1/fy2

如果你想放大第二张图片,fx1,fy1是第一张图片的焦距值。 之后您可以以主要点为中心裁剪放大的图像。之后,两个图像区域应该匹配得很好。

希望这对您有所帮助,祝您好运。

编辑:您可以使用 cv::undistort 函数让图像看起来像有另一个相机矩阵,用于测试。