图像拼接、融合的surf算法流程
图像处理
--SURF算法
完成图像卷积、通过海塞矩阵测特征值、完成特征点的64维描述
精度和稳定性不如sift算法,但综合来看,比较适合处理视频流
1.保证尺度无关性,对像素点进行高斯滤波(高斯平滑处理+二阶导数),再构造海塞矩阵,计算特征值
2.找出特征点
其中0.9是原著作者给的经验值,特征点表示由像素点的海塞矩阵行列式近似值构成
3.构造高斯金字塔
区别于sift,每组图像大小不变,改变滤波器(高斯模糊模板)的尺寸和尺度σ,没有了降采样的步骤,所以提升了速度,精确度相对下降,但对于视频流总体可接受。
4.定位特征点
非极大值抑制。将每个像素点与其三维邻域的26个点进行大小比较,若这个点是极值,则保留用作初步特征点,采用三维线性插值法(根据8个点的像素值得到一个点的像素值)得到亚像素级的特征点,去掉小于一定阈值的点,留下特征最强的点集
5.确定特征点主方向
为保证旋转不变性,不统计其梯度直方图,只统计特征点领域内的Harr小波特征,计算半径为6σ(经验值)的圆形区域内,统计60°扇形内特征点的Harr矢量之和,遍历圆形区域,选择最长harr矢量方向为主方向。
6.构造特征描述子
在特征点周围取一个长方形矢量框,边长20σ ,方向即特征点主方向,分16份,每份统计25个像素的水平、垂直方向(相对于主方向)的haar小波特征(Σdx,Σ|dx|,Σdy,Σ|dy|),即每个特征点是16*4=64维向量。
7.匹配、筛选、拼接
比较最近邻距离与次近邻距离的sift匹配方式:
取图A的一个关键点a,找出其与图B中欧氏距离,最近的前两个关键点b, c之间的距离s1 s2(设s1<s2),则a--b为一对匹配点
ratio=s1/s2,若ratio小于某个阈值T(0.4~0.6),则接受这一对匹配点
通过单应性矩阵进行拼接
A = MB 其中AB是两个图对应点的三位坐标,找出两对对应点即可求出矩阵M,把图2所有像素点进行矩阵变换即可。
8.融合
加权平均法。简单的使用加权的方式从左边过渡到右边,匹配点的像素值为A*05+B*0.5
视频流处理
任务需求:
摄像头图像大小为640*512,fps为25
- 通过对视频流的帧处理得到图像,fps在10-20左右可以满足一般的监控需求,但估算算法的执行效率平均大概在0.7左右甚至更慢。fps想要达到25,需要控制处理帧的数量和使用多线程并行处理。
- 临近几帧的图像基本相同,可以隔几帧调用一次算法。
- Fps为25,意味着效率要在0.04,再算上网络延时,很难达到效果,采用多线程并行执行算法,理论上,(单次调用算法执行时间 / 线程数量 < 0.04) 就能满足要求,但是多线程会打乱帧顺序,考虑用队列控制