输入图像序列 lists:
- 读取第一帧图像,灰化,并且框定ROI区域
- 以ROI中心(center)点为中心,计算第一帧图像的高斯响应图g(整幅图计算,距离ROI中心越远响应值越小)
- 将步骤2中计算得到的高斯响应图对应于ROI区域的部分取出来,记为g1
- 取第一帧图像中ROI区域,进行预处理(均值化为0,归一化),记为f1
- 将g1,f1进行快速傅里叶变换,训练,得到Ai ,Bi
- 如果是第一帧:
Ai Bi 乘学习率进行Ai,Bi更新,用pos存下跟踪位置(x ,y的起始坐标和宽带、高度),clip存下更详细的跟踪位置(上下左右四个坐标),即为第一帧的目标定位。 - 如果不是第一帧,记当前帧为f:
计算滤波器Hi =Ai/Bi,f进行灰化,取f对应clip的区域进行预处理(均质化为0,归一化等),得到fi(fi是clip大小的区域,位置以pos为中心)
对fi进行FFT变换得到Fi,再求响应图:
Gi = Hi * Fi
Gi进行反FFT变换,得到gi
在gi中找出响应值最大的点maxg,用maxg的位置更新pos和clip
再取当前帧目标位置(pos区域),更新Ai ,Bi ,
画出跟踪结果,之后进行下一帧跟踪。
这里说一下我的疑惑:
代码中,clip基本只用来检测ROI是否超出图像范围。但是其实用pos也可以达到同样的目的。不知道这个clip_pos的变量作用到底是什么。
还有一个问题,pre_training中,更新了num_pretrain次Ai,Bi ,我看不懂这是什么原理。用一帧图像多次计算就可以提升性能?
希望懂的大佬不吝赐教。
附上MOSSE代码,可直接运行:
https://download.csdn.net/download/qq_32048913/11644401