相机固定在一个点,旋转相机得到4幅图:img_A、img_B、img_C、img_D 相互之间有点重叠,整体景象覆盖360度。使用PTGuiViewer观察首尾是否相接,很多人写拼接融合但很少人写首尾相接问题。故研究下。
参考:
OpenCV Stitching Module によるパノラマ画像合成の解説 【カメラの話】 - Qiita
OpenCV总结6——stitcher_windxgz的博客-CSDN博客_opencv stitcher
Opencv 使用串联匹配图像拼接_Enjoy lab and life的博客-CSDN博客
1、我以前读研时搞的东西都只是考虑拼接成一幅完整图片,而从来没考虑过使用PTGuiViewer查看是否img_A和img_D之间是否可以无缝巡航。因为以前只是将img_D拼接到img_C,再将结果拼接到img_B,再将新结果拼接到img_A,形成的最终结果可以通过PTGuiViewer看到一个很大的缝隙:
如上图看到很大的一条裂缝!!!这说明首尾并不相接。
2、针对上述情况,我查了些资料,发现很少资料阐述。首先要进行处理选择一幅图信息最少的地方作为首和尾,因为信息少所以肉眼看起来无缝感更强。
如上所述,我选的是img_D,将img_D从中央一分为二:img_D_left、img_D_right。所以此时的顺序就是img_D_right、img_A、img_B、img_C、img_D_left,此时如果将这5幅图从右到左拼接起来,发现还是有缝隙:
可以看到这条缝隙。其实即使不用PTGui也可猜到不会无缝,因为下图右上角和右边有缝,这是因为累积误差所致!
opencv中是:
A、估计完相机参数CameraParams 、
B、然后用光束平差法BundleAdjusterRay对相机参数进行调整、并得到每幅图的焦距
C、对焦距排序,取中值作为调整参数来再次调整相机参数,并得到每幅图的新尺寸和中心
D、然后对每幅图变换。
可以看到缝隙的确改善很大,但是仍有缝隙。
3、然后我又查了资料,将结果图的四个顶点计算新的变换矩阵,以弥补这条缝隙:
可以看到虽然没缝隙了,但不能这样强制拉扯!!!
4、然后查资料发现只有img_D_right、img_D_left之间完全对齐即首尾必须完全对齐时,如下图,通过PTGui可看出整组图之间已无缝,也无错位,实现了360度无缝首尾巡航!!!
img_D_right放在result最左端一直不动,然后将result的右端完全和img_D_left匹配才会有上图的结果!!!才能达到完全无缝。
5、在进行上个步骤时,发现为什么有很多将右边图拼到左边,但很少有人将左边图拼到右边的情况???我发现我把左图拼到右边时不能达到上图的完全无缝,而是会有缝如下图:
可以看到有细缝,从下到上慢慢变大!!!是不是因为这样所以才没人这样做??我查了下:
但我试了下翻转图像,然后始终用右边拼到左边,可发现并不对,缝很大!为什么不能flip然后按常规的右图拼到左图,再flip回来?!!!有大神的话麻烦告知。
但第一个回答那种方法我还没空试,偶尔周末才有时间搞。