1.一种基于同步积分SURF算法的多路视频拼接方法,其特征在于,其包括如下步骤:步骤1:进行多路视频采集;
步骤2:对多路视频数据进行同步;
步骤3:对多路视频数据进行图像矫正;
步骤31:利用摄像头标定软件获得视频数据的图像矫正映射表;所述映射表包含水平方向映射表map_x和垂直方向映射表map_y,分别以数组map_x(i,j)和map_y(i,j)的形式写入单独的头文件,包含进ARM端工程中,并将map_x、map_y的数组首地址传递到FPGA端;所述map_x(i,j)和map_y(i,j)分别表示矫正后的图像的(i,j)处像素在原图像中横坐标和纵坐标;
步骤32:传递所述映射表到FPGA端;FPGA端通过AXIMaster端口从map_x、map_y数组地址读取数据并分别存储在两个hls::Mat对象中;
步骤33:缓存待矫正区域;
读取一帧视频缓存到hls::Mat对象src_Mat中;若要矫正src_Mat中第r行像素,需要将src_Mat中第r‑m到第r+n行像素读取到二维数组tmp_Array中,其中,n和m需根据不同摄像头图像的垂直偏差确定;若输入图像水平尺寸小于1024个像素,则使用ARRAY_PARITION指令将二维数组tmp_Array中的元素存储到寄存器中;
步骤34:矫正图像;
当src_Mat对象的前n+m行图像读取到二维数组tmp_Array中后,开始依序从水平方向映射表map_x、垂直方向映射表map_y中读取映射坐标,并将像素值写入结果图像dst_Mat;
当第一行像素矫正完成,继续从src_Mat读取一行像素并分别写入到tmp_Array[row%(m+n)][col]位置,其中,row从0开始,每从src_Mat中读取一行,row值加1;
步骤35:重复步骤34直到一帧图像矫正完成;
步骤4:对矫正后的图像进行图像裁剪;
使用流水线算法将矫正后的图像四周未填充像素数据的行和列所对应的像素有效信号和行同步信号置低,形成新的像素有效信号和行同步信号;
步骤5:对矫正后的图像进行图像拼接;
该步骤包括如下具体操作:
步骤51:拆分图像;
采用遍历hls::Mat对象的方法,拆分出来包含交叉范围的图像,交叉范围以坐标LUij(x0,y0),RBij(x1,y1)表示,其中LUij表示第i个摄像头与第j个摄像头图像间,包含交叉范围的图像的左上角坐标;RBij为第i个摄像头与第j个摄像头图像间,包含交叉范围的图像的右下角坐标;将这部分图像存储到hls::Window对象image_ij_c中;
步骤52:对图像像素点进行积分;
以步骤51中的坐标LUij和RBij为边界,以像素有效信号为驱动时钟,每个时钟上升沿计算一次积分,每个场同步信号上升沿到来时置零,计算公式如下:I(x,y)=I(x‑1,y)‑I(x‑1,y–1)+I(x,y–1)+P(x,y);
式中,I(x,y)表示坐标为(x,y)的像素与图像左顶点之间像素的积分,P(x,y)表示图像坐标为(x,y)处的像素值;
步骤53:计算Hessian响应矩阵;
将步骤52中计算的图像积分缓存到hls::Window对象I_W中,将不同尺寸的盒式滤波器数组通过AXIMaster端口读入FPGA端并缓存到hls::Window对象中,使用不同尺寸滤波器与image_ij_c图像进行卷积,计算出各Hessian响应矩阵;使用LOOP_MERGE指令实现同时计算不同滤波器尺寸的Hessian响应矩阵,并将结果分别缓存在hls:Window对象中;
步骤54:寻找特征点;
使用3×3×3的模板分别遍历同一组,相邻3层的Hessian响应矩阵;
若中心点的值大于预设的阈值,且比相邻的26个点的值都大,则选为特征点;同时将此特征点的索引存储到vector对象中,索引信息包括所在的组号、在组中的层号及(x,y)坐标;
步骤55:计算特征点主方向;
从步骤54中的vector对象中读取特征点索引信息,并以每个特征点为中心,用张角为
50°~70°的扇形滑动窗口,以60°为步长旋转这个滑动窗口;并对窗口内的图像Harr小波的响应值进行累加,主方向为最大的Harr响应累加值对应的方向;
步骤56:计算特征矢量;
继续以每个特征点为中心,将20s×20s邻域沿主方向划分为4×4的子块,每个子块利用尺寸为2s的Harr模板进行响应值计算,s=1.2*L/9,其中L为Hessian矩阵的尺寸,然后对响应值进行统计∑dx、∑|dx|、∑dy、∑|dy|形成特征矢量;
步骤57:特征点匹配;
通过计算两个特征点间特征向量的欧氏距离来确定匹配度,欧氏距离越短,代表两个特征点的匹配度越好;此外,如果两个特征点的Hessian矩阵迹正负号相同,代表两个特征点具有相同方向上的对比度变化,如果不同,说明这两个特征点的对比度方向相反,直接剔除;
步骤58:计算最佳坐标变换矩阵;
随机抽取4对匹配的特征点,利用这4对特征匹配坐标计算出透视矩阵H1,假设待拼接的图像为第i个摄像头与第j个摄像头的图像imagei和imagej的包含交叉区域的图像image_ij_c和image_ji_c,将image_ji_c中所有特征匹配点经过该透视矩阵H1映射到image_ij_c的坐标空间,然后与image_ij_c匹配点实际坐标求欧氏距离;
之后再随机抽取不同的四组特征匹配坐标,再计算透视矩阵H2,再求欧氏距离,如此重复多次,直到所有组合方式都用完;最后以欧氏距离最小的那个透视矩阵作为最佳透视矩阵,同时将欧氏距离过大的匹配特征点剔除;
步骤59:图像拼接;
使用最佳坐标变换矩阵将imagej的坐标空间转换到imagei的坐标空间,将图像平移并映射到新的hls::Mat对象中完成拼接;
步骤6:将结果图像裁剪为预设大小;
步骤7:利用VDMA技术,将拼接完成的图像通过AXI4总线,以乒乓操作写入DDR3存储器相应的帧缓存地址所对应的存储区域中;
步骤8:使用UDP协议通过千兆以太网将DDR3存储器中的图像发送到上位机,发送时,每个数据包包含4字节数据包编号,1024字节图像数据,上位机根据数据包号将数据放入缓存区的固定位置以解决丢包造成整幅画面混乱的问题。
2.根据权利要求1所述的基于同步积分SURF算法的多路视频拼接方法,其特征在于,所述步骤2包括如下具体操作步骤:步骤21、使用流水线算法统计时钟周期计数器记录的N路视频的第一个场同步信号上升沿到来的时间N1、N2…、Na、…NN,其中Na表示第a个上升沿到来的时间,并比较出最大值Nmax;
步骤22、从N路视频数据的第二帧开始,将N路视频数据分别延时Nmax‑N1、Nmax‑N2…、Nmax‑NN个时钟周期;
步骤23、构建一个N*Pix_W位寄存器buf,其中Pix_W为一个像素点所对应的数据的位数,如果某一路视频需要延时b个时钟周期,b≤N,则在每个驱动时钟的上升沿,将buf内数据左移Pix_W位,同时将新的像素数据写入buf的末尾,buf的输出位段为buf[b*Pix_W:(b‑
1)*Pix_W]。
3.根据权利要求1所述的基于同步积分SURF算法的多路视频拼接方法,其特征在于,所述步骤4中,使用流水线算法将矫正后的图像四周未填充像素数据的行和列所对应的像素有效信号和行、场同步信号置低,形成新的像素有效信号和行、场同步信号。
4.根据权利要求1所述的基于同步积分SURF算法的多路视频拼接方法,其特征在于,首次开机,系统执行一次完整流程后,默认不再执行步骤53至步骤56,使用首次计算出的相关参数拼接图像,若发生相机偏移导致图像拼接错误,用户选择校准模式,系统将重新执行一次完整流程计算相关参数,进行系统校准。
5.根据权利要求1所述的基于同步积分SURF算法的多路视频拼接方法,其特征在于,所述步骤55中,将每步所需的像素相对圆心的坐标索引构建成查找表后,通过将原图像素坐标变换到圆心的相对坐标,能够通过同一个查找表进行窗口滑动。