为各层金字塔图像计算梯度makeImages(image->image, &Hcalib):梯度为当前像素上下光强度差方与左右光强差方之和。先计算第0层的梯度,其他层的像素光强通过上一层均值采样得到。
初始化操作大致可分为两个阶段,第一个阶段是第一帧的处理,第二阶段是后续帧的跟踪,跟踪的帧数为5帧,5帧后初始化完毕,流程如下:
在第一帧数据中取点:setFirst(&Hcalib, fh):每层采集密度不一样,取点策略:先将图像划分成32x32的块,计算每块的梯度均值作为选点的阈值makeHists(fh),选点时,第一次选择先把图像分成d*d的块,然后选择梯度最大且大于阈值的点,如果第一次选择结束后选择的点数目未达要求,则分成2dX2d的块,以此类推。
对于除第一帧外的后帧,trackFrame(fh, outputWrapper),直接法(two frame direct image alignment)只利用第一帧与当前帧的数据,用高斯牛顿方法基于最小化光测误差,求解或优化参数,优化之前,变换矩阵初始化为单位阵、点的逆深度初始化为1,在这个过程中,优化的初值都是没有实际意义的,优化的结果也是很不准确的
跟踪了5帧后,调用initializeFromInitializer(fh),把第一帧设置为关键帧,并把该关键帧相关的信息存储起来,其中关键帧存储的点下采样为2000个活动点
调用deliverTrackedFrame(fh, needToMakeKF),将第五帧传入后端,存为关键帧。
网友评论