2012-02-21 133 views
3

我已经构建了一个具有网络摄像头和功能匹配的成像系统,因此当我移动相机时;我可以跟踪相机的动作。除了网络摄像头帧作为输入外,我正在做类似here的操作。噪声图像中的特征检测

它对于“好”图像非常有用,但是在真正低光照下拍摄图像时会出现很多噪点(相机高增益),并且会因特征检测和匹配而混乱。基本上,它没有检测到任何好的功能,当它发生时,它不能在帧之间正确匹配它们。

有没有人知道一个很好的解决方案呢?还有哪些其他方法用于查找和匹配功能?

这里有两个例子图像具有非常低的特点:

Frame 1

Frame 2

+0

你能张贴一张图片显示我们在这里说的“低光”吗? – mevatron 2012-02-22 16:56:44

+0

添加图像。非常低的对比度 – Jason 2012-02-23 22:52:47

+0

我不明白,我们应该在图像中看到什么? – jlengrand 2012-02-23 22:59:24

回答

3

我认为phase correlation将是这里最好的选择。它旨在告诉您两幅图像之间的相移(即平移)。它比特征检测更有弹性(但不是免疫),因为它工作在频率空间;而特征检测器在空间上运行。另一个好处是,与特征检测方法相比,它是非常快速的。我在OpenCV trunk中有一个子像素精确的实现,位于here

然而,除了中间的折痕之外,你的图像几乎是“无特征的”,所以即使是相位相关也可能会有一些麻烦。想想它就像试图在暴风雪中检测翻译一样。如果你能看到的只是白色的,你根本不知道你有翻译,因此术语whiteout。在你的情况下,该算法可能遭受“绿灯”:)

你可以调整相机设置,以在低光照条件下更好地工作。你有没有完全打开虹膜?你能忍受较低的framerate?设置较长的曝光时间将允许相机收集更多光线,从而以增加运动模糊为代价为您提供更多功能。或者,如果低照度是您的默认环境,您可能需要像红外相机那样为此设计一些东西,但这些可能会很昂贵。除此之外,一个大镜头和长时间曝光是你的朋友:)

Histogram equalization可能是在改善图像对比度感兴趣。但是,有时它可能会增加噪音。 OpenCV具有称为equalizeHist的全局直方图均衡功能。对于更加本地化的实现,您需要查看Contrast Limited Adaptive Histogram Equalization或简称为CLAHEHere是一篇很好的文章。 This页面有一些很好的例子和一些代码。

+0

昨天我正在下载最新的OpenCV SVN,只是为了你写的功能。 (谢谢!:)) openCV的安装很好,但是在x64体系结构上运行它有很多障碍 - 其中大部分都是用cMake查找并使用正确的文件。 但是非常感谢!我会尽快尝试。 – Jason 2012-02-24 21:58:24

+0

我想知道你是否可以帮助我。我正在使用phaseCorrelation代码在openCV中工作,我试图找到找回矩阵C的方法 - 我想看看C的外观。 我已将此代码添加到您的方法中(_result现在是函数参数): _result.create(C.size(),C.type()); \t Mat result = _result.getMat(); \t uchar * data = result.ptr (); (int i = 0; i Jason 2012-03-05 21:25:31