home archives github knives links
tags cpp opencv stitch
categories
only title title and content
stitch笔记

代码分析

特征点查找

默认使用orb算法,默认情况下还能够支持akaze算法.在安装了扩展模块后还能选择surfsift算法

computeImageFeatures

特征点匹配

匹配方法的选择

默认调用BestOf2NearestMatcher,可选BestOf2NearestRangeMatcher

调用AffineBestOf2NearestMatcher.使用该方法进行匹配时会多丢弃一些图片

舍弃认为不属于同一张全景图的图片

leaveBiggestComponent

相机参数评估

estimate::estimate

焦距评估:当评估计算得到多个焦距f时,可取这些f的中位数作为所有相机的焦距

计算最大生成树:以中心节点的图像为基准,计算其他图像与该图像的旋转矩阵

BundleAdjusterBase::estimate

基于以上方法,我们得到了相机的内外参数,但这样得到的参数忽略了多个图像间的约束,而且会产生累计误差.这时,我们就需要用到光束平差法(Bundle Adjustment)来精确化相机参数

细化相机参数

波形矫正

光束平差法会引起波形效应,即拼接的图像会呈现蛇形分布,这是因为真实拍摄相片时不大可能都保持水平而不倾斜的

waveCorrect

图像投影变换

曝光补偿

对每幅图像进行曝光补偿,来使所有图像具有相同的曝光程度

ExposureCompensator

寻找接缝线

重叠部分最相似的像素的连线

接缝线有三个限制条件

  1. 如果重叠区域是宽大于高,则接缝是横向走向的,而如果重叠区域是宽小于高,则接缝是纵向走向的.所以要保证接缝线要有一定的长度
  2. 如果是横向的接缝,则不允许有绝对垂直的接缝线,而如果是纵向的接缝,则不允许有绝对水平的接缝线
  3. 三是重叠区域是矩形,接缝线从矩形的一边出发,必须到达与该边平行的另一边结束。

逐点法,动态规划法和图割法

图片融合

羽化

多频段融合

参数说明

matcher:匹配方式?
rangewidth:限制图片匹配的数目?
ba:拼接图像时的cost函数?
warp:投影变换
wave_correct:波形矫正
seam:寻找接缝线的方法
blend:图像融合方式