我想在Visual Studio 2008上使用OpenCV 2.3.1实时拼接来自2个或更多(当前可能是3或4个)相机的图像.
但是,我很好奇它是如何完成的.
最近我研究了一些基于特征的图像拼接方法.
其中大多数至少需要以下步骤:
1.特征检测2.特征匹配3.Finding Homography 4.目标图像转换为参考图像等
现在我阅读的大多数技术只处理"ONCE"图像,而我希望它处理从几个摄像头捕获的一系列图像,我希望它是"实时".
到目前为止,它可能仍然令人困惑.我正在描述细节:
将3个摄像机放在不同的角度和位置,同时每个摄像机必须与相邻的摄像机重叠,以构建实时视频拼接.
我想要做的是与以下链接中的内容类似,其中使用了ASIFT.
http://www.youtube.com/watch?v=a5OK6bwke3I
我试图咨询该视频的所有者,但我没有收到他的回复:(.
我可以使用图像拼接方法来处理视频拼接吗?视频本身由一系列图像组成,所以我想知道这是否可行.但是,无论您使用哪种特征检测器(SURF,SIFT,ASIFT等),检测特征点似乎都非常耗时.这让我怀疑进行实时视频拼接的可能性.
我正在使用Visual Studio 2010上的OpenCV 2.3.1进行图像拼接项目.
我目前有2个问题.
(我的声誉不超过10,所以我只能在这篇文章中发布2个超链接.我会在评论区发布另外2个)
我按照以下链接中提到的步骤 在opencv中拼接2个图像
以下图片是我目前的结果:
使用相机在相同位置但在不同方向拍摄两张图像(我使用三脚架).

然后我尝试了另一个测试.这次我仍然使用相同的相机拍摄2张图像.但是,我将相机从原来的位置移开了一点,然后拍了第二张照片.结果如下所示:

问题1:**这是否意味着**如果2个摄像机处于不同的位置,标准的全景拼接技术(基于单应性或相机旋转模型)将不起作用?
我试图缝在不同位置拍摄的图像,因为在未来,我想实现对2台相机在不同位置的拼接算法,以拓宽视野,排序是这样的:(我会发布的图片在评论, plz检查加宽FOV)
但现在看起来我的方向错了:(.
我刚刚发现在算法期间,特征查找和匹配占用了大部分时间.
问题2:我可以只计算2幅图像的某个部分(重叠区域)中的特征并仍使用Homography执行变换吗?即,不计算整个图像.
我想是这样的,因为我认为如果我指定2个图像之间的重叠区域的数量,则不必计算整个图像中的特征.如果我可以计算和匹配重叠区域中的特征,它应该大大提高速度.
下面显示的第一个代码是原始代码,用于计算整个图像的特征.
int minHessian = 3000;
SurfFeatureDetector detector( minHessian );
vector<KeyPoint> keypoints_1, keypoints_2;
detector.detect( frm1, keypoints_1 );
detector.detect( frm2, keypoints_2 );
//-- Calculate descriptors (feature vectors)
SurfDescriptorExtractor extractor; ///
Mat descriptors_1, descriptors_2;
extractor.compute( frm1, keypoints_1, descriptors_1 );
extractor.compute( frm2, keypoints_2, descriptors_2 );
Run Code Online (Sandbox Code Playgroud)
我做了以下事情,试图减少运行整个算法所需的时间:
//detector.detect( frm1(Rect(0.5*frm1.cols,0,0.5*frm1.cols,frm1.rows)), keypoints_1 );
//detector.detect( frm2(Rect(0,0,0.6*frm2.cols,frm2.rows)), keypoints_2 );
//-- Calculate descriptors …Run Code Online (Sandbox Code Playgroud) 我一直在运行一个拼接多个摄像头图像的项目,但我认为我遇到了瓶颈......我对这个问题有一些疑问.
我想在将来尝试将它们安装在车辆上,这意味着相机的相对位置和方向是固定的.
此外,由于我正在使用多个摄像头并尝试使用HOMOGRAPHY来拼接图像,我会尽可能地将摄像头放在一起以便出现错误(由于摄像机的焦点不在同一位置而且这是不可能的,因为相机占据一定的空间.)可以减少.
这是我的一个简短的实验视频. http://www.youtube.com/watch?v=JEQJZQq3RTY
如图所示,拼接结果非常糟糕......即使摄像机拍摄的场景是静态的,单应性仍然会变化.
以下链接是我到目前为止所做的代码,code1.png和code2.png是显示我在Stitching_refind.cpp中的部分代码的图片.
https://docs.google.com/folder/d/0B2r9FmkcbNwAbHdtVEVkSW1SQW8/edit?pli=1
我几天前在代码中更改了一些内容,比如执行第2,3和4步(请查看上面提到的2张图片)JUST ONCE.
总之,我的问题是:
1.在计算特征之前是否可以找出重叠区域? 我不想计算整个图像的特征,因为它会导致更多的计算时间和不匹配.我想知道是否可以在2个相邻图像的重叠区域中使用JUST计算机功能?
2.我能做些什么来使得到的单应性更准确? 有人谈到CAMERA CALIBRATION并尝试其他一些匹配方法.我还是计算机视觉的新手...我试着研究一些关于相机校准的材料,但我仍然不知道它是什么.
大约2个月前,我在这里问了一个类似的问题: 使用OpenCV在图像拼接方面遇到一些困难
,其中一位回答者克里斯说:
听起来你理智地谈论这个问题,但是如果你可以访问这两个摄像头,并且它们将相互保持静止,那么离线校准,只需在线应用转换就可以提高你的应用效率.
"离线校准"是什么意思?它有什么帮助?
感谢您的任何建议和帮助.