基于DSP的检测算法实现及优化.docx
- 文档编号:623064
- 上传时间:2022-10-11
- 格式:DOCX
- 页数:6
- 大小:21.25KB
基于DSP的检测算法实现及优化.docx
《基于DSP的检测算法实现及优化.docx》由会员分享,可在线阅读,更多相关《基于DSP的检测算法实现及优化.docx(6页珍藏版)》请在冰豆网上搜索。
基于DSP的检测算法实现及优化
基于DSP的检测算法实现及优化
摘要:
运动目标检测可以从连续变化的多幅图像中把运动目标提取出来。
运动目标的捕捉对于目标分化、采集和动作归类等后续处理相当重要,因为后期过程只处理图像中运动目标周围一定范围内的像素。
但由于运动目标所处背景的随机性,比如气候、光线及噪声干扰的影响,检测运动目标实际上是一项比较困难的任务。
目前对于运动目标的检测的算法可以划分为两类:
基于象素强度的算法及基于运动的算法。
细分又包括四种:
基于特征的方法、基于帧间差分的方法、基于背景建模的方法和基于光流场的方法。
其中前三种属于基于象素强度变化检测的算法,第四种可以看作是基于运动的检测方法。
基于强度算法容易实现、效率高,可处理目标跟踪问题比较难。
基于运动的算法稳定性强,处理跟踪问题相对简单。
该文重点研究目标检测的DSP算法实现,所以在参考大量文献后,选用了传统检测算法中速度较快而且相对便于硬件实现的帧间差分算法,为了取得良好快速的目标检测结果,该文采用Sobel算子与帧间差分结合的方法。
关键词:
DSP的检测算法;实现及优化
中图分类号:
TP311文献标识码:
A文章编号:
1009-3044(2014)13-3070-05
1基于Sobel算子的帧间差分检测算法
1.1帧间差分法
由于红外图像的目标特性,用灰度变化表述物体的运动轨迹可以获得较高的检测效率,从而满足检测过程的实时性要求。
假设输入图像为:
[F={fj(a,b),a∈X,b∈Y,j=0,1,2,....}]
其中,(a,b)为实际场景中(X,Y)上一点,[fj(a,b)]为第j帧上(a,b)点的灰度值,j为图像的编号,以下为图像差分的结果:
[D={dj(a,b),a∈X,b∈Y,j=0,1,2,....}]
[其中:
dj(a,b)={|fj(a,b)-fj-i(a,b)|,j=0,1,2,...;i=0,1,2,3,...}]
[dj(a,b)]基本上体现出运动目标的边界和高差异区域。
一般选择i=1也就是相邻两幅图像进行差分,如果运动目标的速度小于相邻两幅图像的时间差时,可以增大i值避免检测目标遗失。
如i=5时仍然没有目标,则可以认为无检测目标,就换为下一幅图像(j+1)图像进行检测。
选择一个恰当的阈值[Tj],将差分结果[dj(a,b)]转变为二值图像:
[wj(a,b)=0,dj(a,b)≥Tj1,dj(a,b) 其中阈值[Tj]定义为: [Tj=0.5×Max(dj(a,b))] 1.2图像去噪、增强 一般采集到的图像均含有噪声,导致二值图像上有一些孤立点,这些点并不是目标但会对图像的分割产生影响,因此对二值图像进行广义滤波,可以去除这些并非目标的孤立点,广义滤波会对图像造成一定程度的削弱所以滤波后需对图像进行增强。 为使算法获得比较高的执行效率,滤波采用下式: [E(A)=I(a,b)I(a-1,b)I(a+1,b)I(a,b-1)I(a,b+1)I(a-1,b-1)I(a+1,b+1)(a-1,b+1)I(a+1,b-1)] 增强采用下式: [E(A)=I(a,b)|I(a-1,b)|I(a+1,b)|I(a,b-1)|I(a,b+1)|I(a-1,b-1)|I(a+1,b+1)|I(a-1,b+1)|I(a+1,b-1)] 1.3图像分割 对于图像上一点[fj(a,b)∈[Ni,Nj]],其中[Ni和Nj]是两个灰度值。 若设定灰度集n? [[Ni,Nj]]作为判定依据,灰度值属于n的则将像素转变为某一灰度值,其余像素转变为另一灰度值,处理后图像就被划分为两个区域。 这一过程可表示如下: [fj(a,b)=n1,fj(a,b)∈nn2,其他] 上式中n1和n2是设定的目标灰度和背景灰度。 如果[n1=1,n2=0],则分割结果就为二值图像。 通过差分可以找到两幅图像的差异,差值较大的区域就有可能是目标所处的位置。 用降噪后的二值图像查找目标可能存在的位置,并把该位置从整幅图中分割出来。 方法为: 找到[wj(a,b)=0]的点,划定它周围区域作为目标范围,区域划定以(a-5,b-5)作为左上角,以(a+10,b+10)作为右下角。 把划定区域的二值图像[wj(a,b)=0]的点设置为1,即找到了目标可能存在的范围。 1.4边缘检测 用sobel算子对整幅图像进行差分和滤波,可减少干扰,边缘定位准确和相对完整,适用于灰度渐变和有一定噪声干扰的图像处理。 Sobel算子用于检测边沿的算子有2个,一个水平模板、一个垂直模板。 如图1: [-1-2-1000121][-101-202-101] 水平边沿模板垂直边沿模板 图1sobel算子 边缘检测完以后将结果与图像分割的结果相结合即能获得目标的位置。 2检测算法的程序开发 2.1图像分帧的实现 2.1.1子图提取 系统硬件包含的L2总共有64k,均分为四段,通常缓存直接影响运行速度,但如果将L2都用来做缓存,程序涉及的指令和数据将被放在外部存储器中,这将使缓存操作复杂化,速度反而降低。 要使L2与外存保持一致要通过编程来达到,L2和外部存储间的数据线宽为32b,数据的交换速率比较低。 通常采取的的做法是把变量和数组存放在L2中,而把程序存放在外部存储器中。 该文的做法是用32k存储器加32k缓存,如果截取的子图过大内存会不够,过小又会额外增加EDMA传递数据的次数,比较后取1k,将程序编译以后内存的使用量大约为26k,可见这样设置是比较合理的。 子图提取是为了在不消耗CPU的情况下,把数据读入内部存储L2方便CPU使用,节约CPU读写存储器的时间。 为了稳定控制数据流动,该文采用QDMA方式。 具体设置如表1,图2: a)QDMA寄存器设置 表1寄存器内容 [可选参数\&45200001h\&源地址\&Image_address+offset\&单元设置\&000Fh\&0010h\&目标地址\&Ping_addr\&单元索引\&013ch\&Don’tcare\&] b)QDMA可选参数寄存器内容 图2提取子图的参数寄存器设置 2.1.2子图回写 提取出的子图经多步处理后仍存于内存中,需回写到外存中方便显示时读取,可利用EDMA实现该动作。 把子图数据从L2回写到外存时有些调整: 数据从一维变回二维,宽度为8b、每幅子图的数据量也有差异。 该差异是由于边界检测运算导致的。 对于64x16大小的一幅子图,经检测运算处理后周边各有一行、一列无用数据,假如用读出时的方式直接回写有效的数据会被无用数据改写,所以,只需回写有效的、62x14大小的数据即可。 2.2内存的使用 为了确保CPU可以不间断运算,分别定义4个缓存区域in1、in2及out1、out2。 在初始化程序时把相邻两幅子图(各1k)数据导入in1和in2,先对in1内的子图像进行运算,运算结果保存到out1,完成后,启用QDMA-out1将数据从内存传送到外存进行存储;在对in2内子图运算前提交一个新的QDMA-in1申请,把紧邻的新子图从外存读入到in1中,在对in2中的子图运算结束后,将结果存到out2,启用QDMA-out2。 在重新开始in1内的子图运算前又启用QDMA-in2,如此循环,每完成一幅子图运算,就提交一个新的QDMA申请,在对应的子图缓冲存放一幅新的子图,DSP可以直接处理图像数据,而不必消耗时间从外设读取,如示意图3。 图3内存使用示意图 检测程序的主流程为: 1、对相邻两幅原图差分2、广义滤波、增强3、图像分割然后与sobel检测结果相“与”。 3检测算法的优化 程序代码编写结束后需要检查程序与DSP硬件特性相符程度,依据硬件的缓存结构做相应调整应作为重点。 3.1依据DSP结构特性进行优化 原始图像大小为380×240,在输入系统时提取374×240,也就是舍弃边缘,这是DSP的结构特性决定的,而且提取子图时不会有数据量较少的边界图片需要单独处理,减去少量的边界像素不会影响整幅图像的处理结果。 1)设备C6711DSP的一级缓存包括用于存储程序的和存储数据的两个部分各4k。 数据缓存控制器的特性是: 无论CPU用到的多少数据,数据缓存控制器总是一次读入一集也就是32B,所以应把需要参与运算的数据对齐并排列成集,且数据读入内存后应等全部运算完毕后再清除,以减少反复读入数据而消耗的时间。 随意排放数据与成集排放数据相比处理速度的不同: 表2随意排放数据与成集排放数据相比处理速度差异 2)当需要对一组数据进行多个运算时,应考虑把中间运算结果保存在一级数据缓存中,以避免相同数据写出后又读入从而提高运算效率。 对目标的检测需要运行多个处理函数,中间数据的读入写出会消耗费大量时间。 若使用数据链方式,把中间运算结果保存在一级数据缓存而不是内存,可以节约读写数据的时间。 但在分段问题上需要折中处理,因为过多分段会会增加代码复杂度、降低代码易懂性。 折中后将一幅图化分为四段。 下表为利用数据处理链后程序速度的提升: 表3利用数据处理链后程序速度的提升 3)一级程序缓存与CPU及二级缓存间的线宽是256b,可以同时传送32×8条指令。 一级程序缓存与CPU及二级缓存间的线宽是128b,缓存内数据是按“line”形式存放的,并且二级缓存中“line”的宽度为128B,因此,程序应用128B的整数倍来定义数组的长度,以此提高缓存在运行过程中的命中率。 下表为子图大小不同时速度的差异: 表4子图大小不同时速度的差异 提取子图为512B时运算一幅图像消耗的时间略少于子图为1kB时,但是子图的数量相比子图大小取1kB时增加一倍,为此需要增加一倍的子图数据传输次数,不可取。 4)二级缓存的大小为64k均分为四块,可以配置成内部存储或缓存,一般情况下缓存空间越大程序执行速度越快,但也并非绝对。 表5为缓存取不同值时的执行速度差异: 表5缓存取不同值时的执行速度差异 3.2用软件流水对程序进行优化 软件流水是指的指令循环执行、多次迭代且并行执行的一种技术。 通过在编译器中进行相应的设置,可实现循环代码的软件流水化。 具体的方法是提取循环并把它保存为单独文件,按照4.1的调整以后,再进行编译并运行。 下表为采用软件流水与不采用流水的执行速度差异: 表6采用软件流水与不采用流水的执行速度差异 3.3汇编代码优化 C程序代码在上一步优化后,汇编代码中的冗余码已经非常少了,但仍然可对消耗时间较多时滤波、增强程序代码做汇编优化,下表为汇编优化的效果: 表7为汇编优化的效果 经过以上优化过程,程序执行速度有了大幅提升,下表为具体提升效果: 表8优化的具体提升效果 3.4程序的执行结果 目标检测算法经过多步优化以后,图象数据读入内存便连续执行,仅在完成检测的所有步骤以后才回写到外存当中。 以下是各个步骤的执行结果图: 下图中image01和image02是相邻两帧红外图像。 图4相邻两帧红外图像 图5为检测结果图,其中: a是image01和image01差分的结果,这一步有效消除了噪声干扰;b和c分别为经过广义滤波和增强后的结果,图片中的孤立点在这一步被有效去除,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 DSP 检测 算法 实现 优化