1.一种基于DSP的实时视频拼接方法,其特征在于,包括如下步骤:步骤1:ORB特征提取:采用select操作方式定向选择数据,借助gather和scatter指令将不连续RAM地址中的数据加载到向量寄存器中;
首先使用FAST算子检测特征点并确定特征点的主方向,最后创建BRIEF描述子,具体步骤如下:步骤1.1:FAST特征检测;
步骤1.2:确定特征点的方向;
ORB算法中采用灰度质心法确定特征点的方向;
步骤1.3BRIEF特征描述;
采用FAST算子检测出带有方向的特征点后,对这些特征点进行描述;
步骤2:特征匹配:在匹配前设定阈值预筛选特征点,基于汉明距离进行特征点匹配,算法均使用SIMD指令集并行处理多数据;
基于汉明距离来判断,任何小于阈值的汉明距离对应的点对判定为匹配点,汉明距离是两个字符串中对应位置的不同字符的个数;
基于DSP对ORB特征点先进行预筛选,并在匹配过程中并行优化,具体过程如下:步骤2.1:筛选出感兴趣域内的特征点,减少汉明距离的计算,感兴趣域为一对图像中任意两个特征点同时满足以下条件:其中,X和Y分别是特征点的横、纵坐标值,A是特征点的角度,TX,TY,TA分别是横、纵坐标和角度的阈值,i和j表示两幅图像中全部特征点;步骤2.2:通过PING‑PONG操作传送数组中的描述子到64‑way、8bit寄存器中,对于大小为256‑bit的描述子,采用XOR操作并行计算汉明距离;步骤2.3:对步骤2.2中的结果利用查表法得到汉明距离,查表过程如下:a)构建一个含有256元素的表Table[i],其中,i是二进制8bit对应的十进制数,Table[i]是此二进制中“1”的个数;
b)描述子中每8位二进制和0xff作与运算,得到步骤a)中的i值;
c)使用b)中i值查表得“1”的个数,累加得到描述子汉明距离;
d)判定汉明距离小于阈值所对应的点对为一对匹配点;
步骤2.4:反向匹配,消除误匹配点,仅对正向匹配:获得的匹配点再次判断;
步骤3:系统级优化:采用PING‑PONG方式传输数据,隐藏视频拼接过程中外部存储器访问的周期;基于DAG生成算法调度表,在双DSP平台上并行执行ORB特征提取算法;
所述步骤3DSP上系统级优化分为两部分:在数据传输部分,利用PING‑PONG缓冲器传输tile,已提供数据计算的效率;在算法处理调度部分,整个视频拼接过程基于DAG在双DSP平台上高度并行化,具体步骤如下:步骤3.1:图像数据PING‑PONG传输;
基于DSP和iDMA设计一种PING‑PONG双缓存模式并行传输tile,这些缓存区分别存储tile中待处理信息,当DSP内核处理PING缓存中tile 0(in 0)数据时,tile(in1)在PONG缓存中通过iDMA传输,之后iDMA传输延迟被tile的处理过程隐藏;
步骤3.2:算法在双DSP并行实现;
将FAST‑9、NMS、BRIEF算法在两个DSP上做并行处理;
DAG是一种数据结构,也是描述系统进行过程的有效工具,表示为G=(V,E),其中,G表示一个有向无环图;V是G中节点的集合,表示具体的算法;E是G中边的集合,表示各个算法间的逻辑关系,首先将算法根据依赖关系映射到二维平面上,并依次对算法编号;然后使用DAG表示拼接算法的执行流和它们之间的约束关系;根据逻辑关系为特征检测、特征点匹配、图像融合以及它们之间的数据流向创建对应的DAG;
基于DAG生成对应的算法调度表后,对算法相关性和双DSP结构分析,采用双DSP将两张图像FAST特征点提取部分算法的串行操作转换为并行,为了实现各DSP之间的数据共享,采用共享存储器的方式;
实时视频拼接过程在DSP串行模式上实现分为五步:tile数据初始化,ORB特征提取,特征点匹配,图像融合,结果写入tile并保存到内存中,由于是两张图像进行视频拼接,FAST‑
9、NMS、BRIEF算法过程循环计算两次,采用双DSP并行实现;
步骤4:图像拼接:对待匹配图像做透视变换,利用单应性矩阵,由RANSAC算法筛选后匹配点经过计算得出,最后,两张待拼接图像通过直接拼接得到全景图像。
2.根据权利要求1所述的基于DSP的实时视频拼接方法,其特征在于,所述步骤1.1的FAST是一种快速检测特征点算法,具体步骤如下:步骤1.1.1:建立图像金字塔;
在图像金字塔建立这一部分,通过图像缩放的方式实现特征点的尺度不变特性,采用Q21.10数据格式,通过左移10位的定点化方法计算;
步骤1.1.2:特征点粗提取;
对图像中的像素点进行粗提取,过滤掉大部分像素点;
步骤1.1.3特征点精提取;
采用FAST‑9特征点检测,即计算得到特征点P与16个点差的绝对值中,有连续9个绝对值都大于或小于阈值TH,判定为FAST特征点,此外,基于DSP对特征点提取计算过程优化;
步骤1.1.4:特征点的非极大值抑制;
针对提取后的FAST特征点存在过度密集的现象,采用非极大值抑制算法解决,非极大值抑制算法并行优化和FAST特征点检测并行实现的过程相同,在3×3邻域进行处理,将特征点和周围8个对应点并行比较,保留响应值最大的特征点。
3.根据权利要求2所述的基于DSP的实时视频拼接方法,其特征在于,所述步骤1.1.2先对图像中的像素点进行粗提取,过滤掉大部分像素点的具体步骤如下:步骤1.1.2.1:计算待检测点P与周围16个点差的绝对值;
步骤1.1.2.2:比较对称点之间的绝对值,规则如下:ξi=MAX(|P‑Pi|,|P‑Pi+8|)
其中,i∈[0,7],ξi为两个绝对值中的最大值;
步骤1.1.2.3:若步骤2中的ξi都大于阈值T,保留点P作为候选特征点,接着进行精提取过程;
粗体取的过程是遍历图像中每一个点,像素数据连续分布,为了实现64路并行计算,首I先分析待检测点P与周围像素点Pi的位置关系,以P为中心对应的P6像素点,同时也是以P为j中心对应的 像素点,按照此规律,推断出任何一个Pi后的像素点与下一个中心点P相对j j应,以这种方式对相邻像素Pi和对应的中心点P进行64路SIMD比较;
采用DSP平台select操作中的ROTATE_RIGHT模式发送64B数据到DSP中SIMD比较,其中,select操作是从两个输入向量4N元素中提取2N元素,两组串联64位输入向量的元素向右移动固定数量,结果是移位后的最右边向量。
4.根据权利要求2所述的基于DSP的实时视频拼接方法,其特征在于,所述步骤1.1.3中基于DSP对特征点提取计算过程优化的详细步骤如下:步骤1.1.3.1:在向量寄存器中对[P0,P1]、[P2,P3]…[P14,P15]这8组相邻的像素比较,得到两者最大值Max0,1、Max2,3…Max14,15;
步骤1.1.3.2:对步骤1.1.3.1中8组最大值相邻两者依次比较,得到四个连续像素点的最大值Max0,1,2,3、Max2,3,4,5…Max14,15,0,1;
步骤1.1.3.3:对步骤1.1.3.2中连续像素点的两个最大值比较,得到八个连续像素点的最大值Max0,1,2,3,4,5,6,7、Max2,3,4,5,6,7,8,9…Max14,15,0,1,2,3,4,5;
步骤1.1.3.4:对步骤1.1.3.3中8组最大值分别与两端相邻像素点比较,得到连续九个像素点中的最大值,采用数据复用,先得到P8和P15中最大值,再与Max0,1,2,3,4,5,6,7比较,进一步减少计算量,最终得到8组连续9个像素点的最大值;
步骤1.1.3.5:若满足以下公式,候选特征点判为FAST特征点:|P‑Maxmin|
其中P是候选特征点,Maxmin是9个连续像素点最大值中的最小值,TH为阈值,|P‑Maxmin‑
1|作为FAST特征点的响应值;
使用gather/scatter操作方式实现对散落的数据连续化,其中,gather操作是从一组不连续的DRAM地址中加载数据到一个向量寄存器中;scatter是对应的反向操作,将向量寄存器中数据保存到离散的DRAM地址中;
DRAM缓冲区中64位散落的候选特征点通过gather操作传输到向量寄存器中,通过相同的偏移地址获得与候选特征点对应的周围像素点,其中,偏移地址采用DSP中加载对齐向量LAV操作获取,最后,根据DSP中SIMD特性并行计算。
5.根据权利要求1所述的基于DSP的实时视频拼接方法,其特征在于,所述步骤1.2包括如下具体步骤:对任意一个特征点,在以其为圆心,半径为15个像素的领域内计算出灰度质心,特征点到质心的方向就是特征点的方向,特征点的像素矩定义为:
2 2 2
其中,p,q∈(0,1).x+y ≤15x,y∈[‑15,15],且为整数,I(x,y)是像素点(x,y)的灰度值;
图像块的灰度质心为:
特征点在邻域内的方向为:
反正切函数在求解过程中会出现大量浮点数的计算,采用左移保留精度的定点化方法,结合查表法LUT和线性近似法实现加速计算,具体步骤如下:S1:建立arctan(x)的LUT,取x∈(‑∞,+∞)中[0,1]区间,将区间等分为64段,对每段子区间赋初始值以便查找对应的弧度值,LUT的值为:对于[0,1]区间外的值,将其进行转换;
S2:根据特征点像素矩的绝对值|m10|和|m01|,计算临时变量d值:LUT的索引值inedx:
inedx=d>>(12‑6)
S3:根据index值在LUT中找到对应的弧度值:LUT(index),对超出1/64精度的弧度值,采用一种近似线性的方式来补偿,具体操作如下:a)计算超出1/64精度部分的值:
frac=((d‑(index<<(12‑6)))<<(6+3))b)计算index和index+1在LUT中对应的差值:diff=LUT(index+1)‑LUT(index)c)将diff对应的查找表区间数据近似为线性,计算frac对应超出1/64精度的弧度值:raddiff=(frac*diff+(1<<14))>>15d)最终的弧度值:
rad=LUT(index)+raddiff
S4:最后需要根据|m10|和|m01|的关系调整rad:a)若|m10|<|m01|,说明步骤1中|x|>1,而步骤S1‑S3是对1/|x|的反正切值进行计算,此时弧度转换为:b)若m10<0则需要用π减去rad,此时弧度转换为:rad=(π*(1<<12)+0.5)‑rad
c)若m01<0则需要用2π减去rad,此时弧度转换为:rad=(2π*(1<<12)+0.5)‑rad
S5:将弧度转换为角度,得到最终角度值:
6.根据权利要求1所述的基于DSP的实时视频拼接方法,其特征在于,所述步骤1.3包括如下具体步骤:ORB算法使用的是BRIEF特征描述子,并将特征点的方向作为BRIEF的主方向,其原理是:在特征点P周围以一定模式选取256个点对,比较出结果1或0组合起来作为描述子,使用gather操作将不连续点对传送到一组64路向量寄存器中并行比较,规则如下:其中,i∈[0,64],xi和yi是随机点对的灰度值,R1={x0x1…x63},R2={y0y1…y63}是一组向量寄存器,△为无符号类型小于比较操作符,结果输出在64byte‑1bit向量寄存器中,其中,生成一个256位ORB描述子只需要并行计算4次。