基于Zedboard的视频图像处理系统设计与实现_第1页
基于Zedboard的视频图像处理系统设计与实现_第2页
基于Zedboard的视频图像处理系统设计与实现_第3页
基于Zedboard的视频图像处理系统设计与实现_第4页
基于Zedboard的视频图像处理系统设计与实现_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本科毕业设计题目基于Zedboard的视频图像处理系统设计与实现英文题目DesignandImplementationofZedboardBasedVideoImageProcessingSystem2021年4月

2021年4月

中文摘要随着计算机技术和人工智能技术的发展,视频处理的应用领域和应用需求愈发增长,高清海量的数据对末端处理器和智能算法提出更高要求,利用FPGA或者ARM技术完成实时图像处理是研究的热点,本文以Xilinx(赛灵思)公司的zynq-7000芯片作为主控芯片,展开了图像处理的实时性研究。本文主要分为两个部分,第一个部分是是针对软硬件协同设计对视频直通系统进行实现;第二个部分主要是在系统实现的基础上增加新的算法,实现视频处理的多种不同功能。对于第一部分本文协调分配软硬件内容,对于硬件部分,其主要负责视频的采集,视频的处理,视频的显示。对于软件部分则主要是对整个系统各个ip核进行初始化操作以及调度,并且通过设计使系统错误信息通过uart串口进行输出。第二部分主要是针对硬件的视频处理部分进行改进,本文在实现的基础上添加了边缘检测模块以及滤波模块。最终本次实验通过vivado作为开发软件,进行硬件电路的搭建,通过SDK进行软件算法的编写,完成了基于zedboard的视频图像采集系统。并且在实现的基础上进行进一步的开发,通过systemgenerator搭建边缘检测模块,生成ip核对系统进行改进,实现了基于zedboard的视频图像边缘检测。关键词:systemgenerator;软硬件协同设计;边缘检测;zedboard

AbstractWiththedevelopmentofcomputertechnologyandartificialintelligencetechnology,theapplicationfieldandapplicationdemandofvideoprocessingisgrowingincreasingly,thehighdemandforthemassofhigh-definitiondataonterminalprocessorsandintelligentalgorithmsisincreasing.TheapplicationofFPGAorARMtechnologyonreal-timeimageprocessingisahottopicofresearch.ThisarticlebasedonXilinxcompany'szynq-7000chipasthemaincontrolchip,developsthestudyonreal-timeofimageprocessing.Thispaperisdividedintotwoparts.Thefirstpartisthehardwareandsoftwareco-designofthevideopass-throughsystem,andthesecondpartismainlybasedontheimplementedsystemtoaddnewalgorithmsthentoachieveavarietyofdifferentfunctionsofvideoprocessing.Forthefirstpartofthisarticle,itistocoordinatetheallocationofhardwareandsoftwarecontent.Forthehardwarepart,itmainlyincludesvideocapture,videoprocessing,videodisplay.Forthesoftwarepart,theinitializationoperationandschedulingofeachipcoreofthewholesystemismainlycarriedout,andthesystemerrormessageisoutputthroughtheuartserialportifdesignedwell.Thesecondpartismainlyforthehardwarevideoprocessingpart.Thispaperaddstheedgedetectionmoduleandfilteringmoduleintothissystem.Finally,theexperimentusedVivadoasadevelopmentsoftwarewherethehardwarecircuitisconstructed.AndthesoftwarealgorithmiswrittenbySDK.Thenthevideoimageacquisitionsystembasedonzedboardiscompleted.Onthebasisoftherealization,furtherdevelopmentiscarriedout.Theedgedetectionmoduleisbuiltbysystemgenerator,whoseipcorecanbeaddedintothissystemtoimprove.Finally,theedgedetectionofvideoimagebasedonzedboardisrealized.Keywords:systemgenerator,hardwareandsoftwareco-design,edgedetection,zedboard目录TOC\o"1-2"\h\u304301绪论 绪论课题研究意义在人们日常生活中,视觉是我们得到与外界交互最最要的方式,且大脑对视觉信息吸收和敏感程度也是最高。而由于科技的不断发展,电力行业、监测行业、交通行业等,对安全监控的要求也随之增加。视频能否有效的传输,传输的质量是否能够有效的还原,传输距离是否足够远,传输的延迟是否能足够小等因素都需要解决。并且目前图像处理,人脸识别,模式识别,双目算法等的流行,以及在国防,科学等高精尖领域对视频处理技术的要求也变得更高,因此以往采用CCD捕捉图像的方法越来越无法满足目前的需要。对于实时高速的采集,以及结果采集的处理有了更高一步的要求。在超大规模基础电路问世以后,嵌入式的视频图像采集系统可以较好地满足以上要求。除此以外,因为嵌入式系统所具有的特性,使其具有体量小,易交互,成本低,稳定性强等优点。因此本实验将采用基于FPGA的zynq-7000芯片对视频进行采集。由于FPGA具有灵活易操作的特点,并且可以在不改变硬件平台的情况下,针对不同的要求对系统进行修改,因此具有非常强大的适应性。且zynq-7000芯片具有相当高的集成度,一定程度上使软件的开发难度下降,即软硬件同时可编程,并且该芯片是ARM+FPGA结构组成的,充分发挥了两者的优势,即兼容性能和低功耗于一体,并且扩展和开发升级较为方便,节省掉了主机与从机之间的通讯总线,加快了通讯速度。对于人们对高清甚至超清视频的追求、分辨率成为一个优秀视频采集系统的关键性能指标,分辨率越高一个视频就越清晰。目前在市面上流通的相机分辨率大概从640*480到2592*1944不等。相机的分辨率越高那么相应的传输数据的量就会越大,这些数据量的变化对硬件要求将变得异常巨大,对于整个系统的要求的更为严苛。Zedboard具有多种视频输出方式,如:1080pHDMI,8-bitVGA,128x32OLED,因此可以应用在很多型号的智能相机开发中。国内外研究现状国外发展状况对于视频采集技术,主要由摄像管,CCD,CMOS等获取。摄像管通过内部的光敏元件接收输入的图像的光信号进而通过光电转换,将光信号变为电信号;通过电信号的形式将光信息存储在系统存储器中;最终通过电子枪产生的电子束全面扫描该储存的电荷完成电荷转移。CCD这种半导体器件,它可以接收光信号,转换成模拟信号,模拟信号放大后经过A/D转换,成为数字信号。而CMOS是将外界信号转换成电能通过逻辑运算核A/D转换最终输出。而对于图像实时处理主要的硬件平台主要是从一开始的计算机,isp和pci等,随着数字电路的发展DSP技术开始兴起。如今的处理芯片主要为单核处理器;同构多核处理器;异构多核处理器,详见表1-1,在如今视频图像处理最具有代表性的应用可以说是智能相机了。在国外,该技术发展较早,且由于智能相机,智能摄像头等产品的大量需要。美国康耐视公司(Cognex)的智能相机在工业应用场合也享有很高的国际知名度,在生产车间的流水线中,由于其良好的抗噪和防尘能力,且较高的灵活性,无论生产速度多块,测量精度多高,配备无接缝式的应用框架和网络环境,都可以实现。表1-1处理芯片的分类单核处理器ARM、PowerPC、DSP以及纯FPGA硬件同构多核处理器Inteli3、i5、i7以及ARMCortex-A9等异构多核处理器ARM+DSP、ARM+FPGA等国内发展状况在国内,改革开放以来,我工业化不断进步,资源和人力成本也不断增加,同时科技也正在飞速发展,由于这些原因,不断促使着工业自动化进程的加快,急需有较好性能的自动化系统,智能化系统出现在工业生产以及生活领域。因此,近些年图像处理,机器人视觉以及模式识别等在国内有较高的人气,并且国家,企业和相关科研院所在有关领域投入了大量的人力、物力,以确保尽快研发适应当前需要的机器视觉产品。但由于国内该领域起步较晚,底子较薄,目前发展水平仍距国外相关产业有一定差距,有较大的进步空间。因此,国内工业智能相机的发展仍需要时间,仍需要大家的不懈努力,这样才能真正从低端逐步转向高端。本课题的研究内容、方法、手段及预期成果课题研究内容本实验主要包括视频图像采集,视频图像的处理以及视频图像实时显示。其中视频采集部分主要是将采集到的视频数据信号转变成可以被fpga处理的信号类型以方便后续操作;视频处理部分主要是一些算法的设计,其中可以包括伽马矫正或者边缘检测等等;显示部分主要是对数据输出做输出与处理后直接驱动显示器显示..本研究内容使用的是Xilinx开发的全可编程SoC系列。主要是使用zynq-7000的开发板,在zedbaord上进行视频图像采集系统设计开发。在zynq的逻辑可编程硬件部分,需要先设计和配置摄像头的ip核,之后对采集得到的数据进行预处理和存取功能的实现,并且在需要的情况下可以设计视频处理通道的IP核设计,最后通过VGA接口连接到显示屏上进行显示。而对于软件部分,主要是对硬件部分进行控制和初始化。最后在实现图像视频采集的基础上可以对得到的图像进行二次图像处理通过调整图像的各项系数,实现图像的曝光,改变对比色等使得到的图像更为美观,甚至可以添加去雾算法,红外检测装置等实现更加复杂,多样的要求,以实现美颜,智能识别,摄像头去雾等任务。课题研究方法及手段为了实现以上要求需要对硬件部分和软件部分分别进行设计。为进行该系统的设计,我们使用赛灵思针对Zynq系列芯片推出的Vivado软件来设计,可以设计通过MATLAB输入,转化为verilog语言,分别作为HDL硬件描述语言和SDK软件描述语言。对于视频信息的读取我们采用Pcam-5C图像传感器,该传感器主要是由OV5640组成。对于视频输出部分我们采用zedboard上自带的VGA模块,连接到VGA显示器上。课题预期成果通过合理的设计使该系统能够成功地在zedboard上搭建相应的软硬件系统以实现图像信息采集,并且以较快的速度完成信息的处理、显示。并且可以通过uart得到一些程序运行过程中的错误信息。基于zedboard的软硬件协同设计开发平台的介绍zynq芯片由于目前的处理器对信号处理的能力还不达不到我们所需求的程度,且多芯片方案搭建出来的处理器系统成本高、功耗大、占用空间较多、不利于缩小外形、且更新换代的能力也会受到一定的限制、在面临技术快速革新的时代,这样子的方案很难提供更高的优势。最终赛灵思公司开发出了zynq-7000芯片,以应对这些所面临的问题。Zynq-7000内部具有fpga部分和arm部分,其中的arm是一个完整的系统,内部包含双核Cortex-TM-A9处理器,并且内部还集成了存储器和DDR等外设。而Fpga的部分能对系统进行外扩,使该处理器有良好的扩展性和较高的处理速度,最高达100Gb/s。并且为了开发方便Xinlink公司为zynq系列芯片定义了大量的IP核,工程师可以通过Vivado软件对他们进行调用。为了实现本实验的内容,zynq-7000自然就成为这个实验最重要的一个器件。我们可以在其pl部分设计视频的输入通道,视频处理模块,视频的显示通道等,并且再ps部分实现各个模块的初始化并提供相应的时序。ZedBoard开发板面向高校和大众,赛灵思公司开发了一个低成本的zynq开发板zedboard。其高性价比使得其再高校实验学习中备受青睐。Zedboard板载外设主要包括:(1)8个LED灯。(2)7个GPIO接口按键。(3)8个DIP封装的用户开关。(4)OLED。(5)3个MicroUSB接口。(6)4个3.5mm的标准音频接口。(7)VGA接口,zedboard使用了标准的15洞VGA接口,其中14根线为12位彩色信号线和两根同步信号线。(8)HDMI接口,可以提供高清的数字视频/音频。(9)10/100/1000兆网口Zedboard扩展外设主要包括:(1)外扩FMC插槽(2)外扩AMS插座(3)5个Pmod兼容插座,其中四个连接到zynq-7000的PL部分,另外一个连接到zynq-7000的PS部分。软硬件协同设计软硬件协同设计的概念在传统的系统开放方法上,由于各种的限制,使工程师在设计系统时一般将硬件电路和软件部分分为两部分分别开发设计,最后再将系统集成。这样设计虽然系统简单,但是由于电子集成电路发展迅速,传统的开发方法很快便面临着难以扩展、难以设计、快速性较差、集成性较低等缺点。因此为了突破传统设计方法的局限性,人们开始探索软硬件协同设计方法。软硬件协同的设计与以硬件优先的传统方法不同,它是以系统为目标,这样可以很大限度的利用现有资源得到系统的最大开发效用,如果设计合理,这种方法可以使系统工作在最理想的状态以最大化的利用资源。软硬件设计方法流程如图2-1所示,一般是先考虑硬件,自上而下的方式进行设计的,设计的过程中我们应以模块为单位优先设计。由于在设计时先考虑硬件其次再估计软件的设计,这样子的设计会使设计的过程中受到空间的约束,要么对硬件进行优化,要么对软件进行优化,这样做很难使软硬件的资源得到最高效率的应用。在图2-2中可以看到,相比传统设计方法,软硬件协同设计的亮点集中于设计的流程,在划分软硬件任务后,对软件和硬件以及软硬件接口进行设计和分配,从而能够更好的协调软硬设备。从而极大的提高资源利用效率。图2-1传统设计方法流程图图2-2软硬件协同设计流程图软硬件协同设计方法可以分为以下几个步骤:分割:首先由系统的要求出发,完成对硬件和软件之间的分工。软件部分交给ARM完成,硬件部分交给FPGA完成。这两种实现方式各有优劣:软件实现的开发难度小,但是性能较低,运算速度较慢;由硬件实现部分软件设计的功能则可以很大程度上的降低CPU负荷、提高运算速度,但是,FPGA的设计相对ARM的实现难度更大、设计周期较长等。因此在完成分割任务时应该综合考虑这两部分的优劣。定位:其次在实现这个系统是,由于实际过程中,可能会发现软件实现的部分性能可能不够好,我们可以考虑由FPGA实现进行代替,并且如果原先由硬件电路实现的部分可移植性较差,且开发时间较长,我们可以考虑将其改为由ARM执行这部分程序。调度:由于软硬件协同设计使硬件和软件之间应该有一个合理的通信,使整个系统可以达到同步且可以得到合理的调度,此时若对整个系统调度,主要是由AXI接口对其进行配置。映射:主要分为硬件和软件部分,硬件部分对应为系统的pl,软件部分对应系统的ps。Pl由fpga完成,ps由arm完成。硬件逻辑设计该实验的目标为基于Xilink开发的全可编程SoC系列的Zynq-7000芯片,在zedboard上进行视频图像采集系统的设计和开发。利用两个Pcam5C摄像头采集两路高清视频,之后通过FMC-Pcam适配器连接到FMC扩展接口上,之后通过板载VGA对视频进行输出。高清摄像头采集和处理的过程在本实验中主要分为以下几个部分,视频图像的实时获取、视频图像的处理以及视频图像的实时显示。下面将分别介绍这几部分的设计。视频图像的采集模块由于本实验为四目摄像头的视频采集技术,而zedboard上只有一路VGA接口,要想连接四个摄像头则需要对其进行扩展,在本实验中采用FMCPcam适配器在FMC插槽中进行外设的扩展。FMCPcam适配器有两种版本,分别为双接口和四接口相机连接接口,在内部有对MIPI到LVDSd电平转换器,可以使摄像头的传来的高速视频信号转化为开发板能够处理的电平信号。其应用主要为将低成本的相机连接至高速开发板上,对多个相机同时进行配置。为开发人员在视频处理方面带来了很大程度的便利。图像传感器本实验在摄像头的选取上选用Pcam5C彩色摄像头,其内部包括OV5640彩色图像传感器和MIPI图像传感器接口,可以高速传输视频信号并与zynq兼容。在开发过程中只需要建立相应的MIPI的ip核便可以将图像信息转换成可以在fpga内部进行处理的高速视频流信号。图像传感器正是通过对外部光信号在感光面上的接收,并按照一定的比例转换成电信号,并传输到系统中。通过图像传感器可以非常方便的得到外部的图像信息,但是与此同时由于得到的光信号和电信号是呈线性比例转换的,然而人眼对于亮度的观测并不是成比例的这就需要在系统的设计过程中对其进行一定程度的调整,该部分将在3.2.2节详细说明。FMC扩展插槽以及FMCPcam适配器由于本实验在需要4个摄像头进行数据采集,而zedboard的只有1个VGA和1和HDMI接口,因此我们尝试对zedboard扩展外设。在此我们通过外扩FMC插槽进行出入的扩展。在本实验中采用FMCPcam适配器进行对zedboaed的扩展。FMC-Pcam适配器其接口为CSI-2,将相机添加到zedboard。FMC-Pcam适配器可以和Pcam-5C兼容,目前发布的有两种版本,一种是连接两个摄像机,另一种是连接四个摄像机。FMCPcam适配器为了得到LVDS电压需要MIPI协议。兼容各种VADJ电压。MIPI接口图3-1视频采集结构由图3-1可知通过Pcam-5c的高速视频接口要可以在zynq内进行处理需要对其进行数据转换,将高速视频数据通过MIPI_CSI进行处理使其转化为可以在处理器中进行处理的电平信号。MIPI是专为移动应用定制的开发标准,可以应用在多种移动设备的视频接受、显示以及音频的处理,将其接口标准化,从而减少设计的复杂性。MIPI有一套协议和标准,其中用于视频的接受所用到的协议为CSI协议,CSI定义了处理器和摄像头之间的高速串口。CSI协议分为三层,分别为应用层、协议层、物理层。在应用层方面,主要是各种算法模块。协议层又包括组包层、协议层、通道管理层,其中组包层主要是将上层的数据进行打包、将其切割成8比特数据流。协议层是在该数据流上加入包头包尾、将生成的数据流按照一定的方式来统一管理。物理层定义了传输介质、电路信号电气特征和时序。整个协议的传输过程如图3-2所示。图3-2MIPI协议结构视频图像的处理模块在视频数据流传入之后,为了达到各种视频效果需要对其进行视频处理,视频处理包括滤波、伽马矫正、边缘检测等等。并且通过摄像头得到的视频数据一般是BayerRGB,因此需要对其格式进行转换变为RGB格式。在本实验中由于需要在一个输出显示上输出4个采集到的视频图像,因此需要对得到的视频数据进行分割,使其分别占据显示器的一部分。在视频处理模块上,本是要主要解决一下几个问题:图像格式转换、伽马矫正、图像缩放。整个流程如图3-3所示。图3-3视频图像处理模块流程图图像格式转换在Pcam-5c中得到的图像格式为BayerRGB这种图像格式一般不能直接输出,需要进行滤波和伽马矫正后才能最后得到理想的输出。在此首先对其进行视频格式转换,将BayerRGB转化为RGB格式。和我们所认识到的图像不同,通过OV5640得到的图像每个像素点只有一个颜色通道,该颜色通道代表红、绿、蓝中的一种,但是彩色图像都是由这三种颜色进行叠加产生的,即一个像素点包含三个颜色取值为0-255。在Bayer格式的图像中由于这样的图像缺少一定程度的颜色信息,每个位置只有一个颜色可以获取,这就需要我们去复原另外两种颜色,即需要通过相邻像素点之间插值来估算。表3-1Bayer格式示意RGRGRGGBGBGBRGRGRGGBGBGBRGRGRGGBGBGB在表3-2中可以看到该图像格式为奇数行只有R,G分量,偶数行只有R,G分量,奇数列只有G,R分量,偶数列只有B,G分量。在Bayer格式中G颜色分量为其他两种颜色分量的两倍,这是人眼对绿色更为敏感,并且如果G分量采用较好的插值方式,也可以一定程度上改善R,B颜色分量的效果。为了将表3-2的Bayer格式图像转化为RGN格式,我们采用双线性插值法。其原理为,将每个像素点所缺少的颜色信息由其旁边邻域内的像素颜色信息补全。其插值具体分为两种情况,即对G的插值和对B或R的插值。表3-2对B进行插值R1G1R2G2BG3R3G4R4表3-3对G进行插值G1B1G2R1GR2G3B2G4对B进行插值则需要对其邻域内其他颜色分量取平均值。即:对G进行插值公式为:经过这种插值方法的处理一个像素块的颜色信息就变为了R’,G’,B’,即实现了颜色格式的转变。这种插值方式较为简单,但是由于图像边界的像素的邻域缺少一定的像素,这部分像素的需要另外进行处理,在算法设计时可以进行改进。伽马矫正对于硬件设备而言,传感器对光的感应是呈线性关系的,有多少倍的光子被传感器接收,就会产生多少倍的电子信号。但是,人对光的感知并不是呈线性的关系,人眼对于暗色调的反应更为灵敏。这是由于对于纯黑物体反射率定位0,而纯白物体反射率定位1,则中灰物体的反射率应为0.5,但是实际上并不是这样,经过测试中灰的反射率大概在0.2左右。伽马矫正的公式为:上式中,分别为输入光照和输出光照,根据经验式可以得到gamma值一般取为2.2。图3-4伽马矫正示意图如下图3-5所示,可以看到经过伽马矫正之后的图像将表现的更亮。图3-5伽马矫正效果对比图图像缩放由于四目摄像头要在同一块显示屏上进行显示,所以对摄像头得到的图像数据要进行一定程度上的缩放,以方便输出显示。图像缩放算法的实现主要是通过原来的像素值,通过和邻域内其他像素的线性变化得到输出的像素值,缩放的大小和所选邻域的大小有关。我们一般选用双线性插值法来得到待求像素。图3-6线性插值原理由图3-6可得,假设Q11,Q12,Q21,Q22四个像素点为已知像素点,为求得R1像素点数据,可以将Q11和Q21通过插值来求得,同理求得R2数据,再通过R1,R2数据线性插值得到P的像素数据。综上所述,可以得到双线性插值的公式为:这种方法是在图像缩放中较普遍的方法,效果比临近插值好,计算量和运算速度也相对较小。但是缺点是,由于考虑到该方法为线性插值,在图像颜色变化较大的边界,缩放后将会变得平滑。VDMA模块VDMA可以为内部zynq与外部内存之间提供一条高速的数据存取通道。在本例中通过VDMA构建硬件部分的视频流到DDR存储器之间的数据缓存通道。VDMA的存在可以使得双缓冲或多缓冲机制的实现变得相对简单,并且VDMA自身也可以进行数据的存取功能,因此在基于各种FPGA的图像处理、视频处理等问题上常常出现。VDMA有两种接口模式,一种是写通道,它可以将高速视频流数据流写入PS中,另一种是读通道,它可以从ps中读取数据,并将数据格式改为AXI-Stream输出。在本实验中考虑到视频图像地撕裂,我们选用5缓冲机制进行设计。VDMA模块的主要寄存器如表3-4所示:表3-4VDMA主要配置寄存器地址偏移(十六进制)名称备注00MM2S_DMACRMM2SDMA控制寄存器04MM2S_DMASRMM2SDMA状态寄存器50MM2S_VSIZEMM2S传输帧竖直大小54MM2S_HSIZEMM2S传输帧水平大小58MM2S_FRMDLY_STRIDEMM2S传输帧延时5C~98MM2S_START_ADDRESSMM2S传输起始地址AC~E8S2MM_START_ADDRESSS2MM传输起始地址A0S2MM_VSIZES2MM传输帧竖直大小A4S2MM_HSIZES2MM传输帧水平大小A8S2MM_FRMDLY_STRIDES2MM传输帧延时在该实验中,为了节省硬件空间我们可以设计一个双端口VDMA和一个单端口VDMA,将VDMA_A设置为双端口,用来完成软件和硬件之间的通讯,以及PL之间的通讯,将VDMA_B设置为单端口,只用来完成硬件和软件之间的数据交换。具体数据交换框图如图3-7所示:图3-7VDMA数据交换框图AXI总线AXI是一种协议,该协议最初是AXI3,是由ARM公司提出,是当时AMBA3.0的其中一部分。而AXI4作为AXI协议的第二版,是2010年该公司发布的AMB4.0协议中的一部分。AXI4包含3种类型的接口如下表所示:表3-5AXI4类型接口类型名称功能AXI4主要面向高性能地址映射通信的需求AXI4-Lite是一个轻量级的,适用于吞吐量较小的地址映射通信总线AXI4-Stream面向高速数据流传输通道类型写地址通道主设备向从设备传输写入地址的通道写数据通道主设备向从设备传输数据的通道写响应通道传输完成的信号传递通道读地址通道主设备读取从设备数据的地址通道读数据通道主设备读取从设备数据的通道AXI模型写模型主设备将地址信息传输到从设备内,之后开始写入数据,当数据完成之后,从设备通过写响应通道向主设备发送信号表示传输完成。读模型主设备现象从设备发送地址信号,之后从设备再将数据写入主设备。AXI协议其实是一个可以点对点的主/从接口技术协议,但是当多个硬件ip需要进行数据间的传输时,我们可以使用AXIInterconnect模块,这个系统模块也叫AXI互联网络矩阵,AXIInterconnect可以实现多个主从设备间的连接。本例中的AXI传输就是这种传输方式。表3-6Zynq的AXI接口接口类型特点AXI_HP主要是用于PL访问PS上的存储器。内部有读缓冲和写缓冲AXI_ACP适合做专业指令加速器的模块数据接口AXI_GP用于获取传感器信号信息视频图像的显示通过VDMA中传出的AXI4-Stream数据对其进行处理,先转化为通用视频格式,之后再转化成VGA可以识别的数据,最后通过zedboard上的VGA接口传送到显示器上,以达到最终视频显示的效果。总体设计如图3-8,VTC提供时序信息。图3-8视频显示流程图视频流数据转换在zynq中,由于为了快速且容易的处理视频数据流,VDMA读取DDR中的数据后,由于在zynq中各个ip核之间的通讯是依靠AXI4-Stream协议的,因此直接输出的视频数据格式为AXI4-Stream,这种格式并不能用于直接显示,、为了得到带有视频有效数据和视频时序信息的数据流,我们要对其进行一定的转换,及将其转化为通用视频模式。在此我们使用AXI4-Streamtovideoout视频数据转换模块,得到相应的信号会向VTC提供相应的时序信号,当VTC识别到正确的时序信号后,会对AXI4-Streamtovideoout进行反馈。通过VTCIP核提供的时序信号,在AXI4-Streamtovideoout的视频流接口中将AXI4-Stream格式转化为带有行场同步信号与数据有效标志信号的数据格式。视频时序信号控制器一个视频采集处理系统,需要相应的时序信号来保证视频信息的同步。视频时序信号控制器(VTC),该IP核可以为VGA,HDMI显示IP核提供时序信号,以保证视频信息的正常输出。VTC的主要作用是通过检测到的视频流的Hsync,Vsync以及消隐信号,并生成相应的信号以保证视频输出的时序不会出错,总的来说VTC的作用就在于监测和产生视频时序信号,以保证收发两端的电子束在扫描过程中的步调保持一致。视频显示本实验是通过VGA进行显示,VGA也叫视频图形阵列,是使用类比讯号的电脑显示标准。VGA在扫描过程中主要是通过逐行扫描的形式,及从第一行开始自左向右开始进行扫面,每扫描完一行从最后一个像素点跳回到下一行的第一个像素带你从新开始扫描,当扫描完最后一行的最后一个像素点时,及完成了一帧的扫描。当然在传输的过程中为了保持视频数据的同步我们一般需要场同步信号和行同步信号,行同步信号是在每一行传输的过程中为高电平,场同步信号为在每一帧传输的过程中为高电平。但是在实际应用的过程中会发生一个问题:电子束扫描的过程中在每一行的最后一个元素跳向下一行的第一个元素的过程中,或者是每一帧的最后一个元素跳向下一帧第一个元素的过程中,这个过程并不是瞬间完成的在这个过程中依然有可能会发射电子投射到电子屏幕上,这是我们不希望的结果,因此我们需要施加消隐信号,消隐信号高电平时电子束不再作用,因此我们可以将消隐信号添加在每行扫描结束到下一行开始,和每一帧结束到下一帧开始的过程中,以保证视频信息的有效传输。因此可以得知,有效的显示区域只有在VS和HS同时有效,且没有消隐信号时。实现流程介绍图3-9系统流程图根据本章内容在此总体实现流程,由图3-9可知,将摄像头所得视频数据通过FMCPcam适配器接入FMC扩展上得到高速视频流信息,通过MIPI协议将其转化为zedboard能够处理的视频流信息,经过一定的视频处理,如视频格式转换,伽马矫正,图像缩放。最终将视频数据存入VDMA中,通过AXI4总线将VDMA中的数据传入PS中,进而存入DDR3内,PS可以直接访问DDR3因此,可以在其内部对视频数据进行一定的处理,最终通过AXI4传送至VDMA中,以AXI-Stream信号形式传出,最后对视频数据格式进行转换,并在VGA上显示。PS部分则是控制各个IP核的初始化、对视频进行处理并提供视频显示的时序信号。系统软件设计软件开发工具与FPGA不同,我们为了实现原硬件之间的交互,除了使用vivado进行PL部分的设计还需要对PS端进行设计,以保证其可以控制PL中的各个IP可以正常运行实现其相应的功能。在zynq的设计中,对于ps的编写主要是基于ARM的,我们可以使用赛灵思的SDK工具对其进行开发,SDK上面集成了一些xilinx开发过程中所需要的一部分工具。SDK的功能非常强大也非常方便,在vivado设计完成PL部分之后,到处硬件文件之后,SDK会自动分析硬件的结构并且生成相应的BSP工具包以方便我们设计。为了方便开发人员,SDK会自动生成一些相应的BSP进行辅助设计,BSP包含了大部分赛灵思提供的IP核驱动,这些驱动可以方便我们进行系统设计。通过SDK编写软件程序分别实现对视频的采集和显示等功能。软件设计流程图4-1双目摄像头软件运行流程对于整个系统的软件设计,主要的设计流程框图如图4-1所示:由上图可以看到,在该系统一开始,首先是对其CPU初始化、ARM初始化、重置PL、并判断是否需要uart,若来连接uart则对其进行初始化。之后清空VDMA缓存,并将其空间设置为1920*1080*3*2,以保证能够容纳4个1920*1080的彩色摄像头输入数据。之后配置摄像头的IP核,主要是配置ps层面的通用IO口和IIC,使其完成对PL中的AXI-IIC控制器的初始化以及使用AXI-IIC控制器对OV5640寄存器进行读写操作。之后对AXI-VDMA模块进行配置,使得VDMA-a模块既有双通道,既可以保证和ps间的通讯也可以保证pl之间的数据传输。之后对输出通道进行配置,主要是通过对VTCIP核进行控制,即对VTC进行初始化,并且配置VTC产生所需要的视频时序信号。对于输入通道的配置需要判断D-PHYIP的个数,如果大于2再配置B摄像头的输入通道,否则只需要单独配置A摄像头输入通道即可。至此整个系统板的初始换完成。在进行摄像头的初始化时,我们向摄像头分配动态存储器核自动存储器,因此若OV5640未能成功连接也可以忽略并显示其余摄像头输出信号,在配置时只需要将A摄像头配置到通用IO端口即可,并且为其余摄像头分配虚拟的通用IO口,这样可以避免在构建OV5640时丢失所有板间数据。打印错误报告UART介绍为了在程序操作过程中将整个系统各个地方发生的错误信息发送出去,我们需要zynq内部自带的通用异步收发传输器(UART)接口。UART内部有两个FIFO,一个是发送FIFO,一个是接收FIFO。发送FIFO内部有我们需要发送的信息,每当向外提取数据之后,内部移位寄存器就对数据进行一次操作。FIFO有三个标志位,分别为空标志位、满标志位和溢出标志位。空标志位表示FIFO内部没有数据,满标志位表示FIFO内部数据已经达到最大,溢出标志位表示,当FIFO内部已满时依然有数据写进来。接收FIFO缓存了接收模块的寄存器接收到的数据,最大数据宽度为8位,由于我们不用到接收器的内容,因此在此不再赘述。UART有4中工作模式,见表4-1:表4-1UART工作模式工作模式解释普通模式通过接受并发出FIFO的数据。自动响应模式RXT接收到的数据立即从TXD发送出去,同时处理器也可以读到数据,但是UART此时不能发送FIFO里的数据。本地循环模式UART自己接收自己所发送的数据。与外部数据传输隔离。远程循环模式UART作为一个平台,接收的数据从发送端发送出去UART初始配置在UART程序设计中主要分为UART初始化、UART发送设置和UART接收设置三个部分。在本实验中我们只需要进行UART的初始化和UART的发送设置即可。图4-2UART初始化配置框图UART配置首先通过XUartPs_LookupConfig函数进行配置,该函数根据唯一的设备ID来查找设备配置,并返回XUartPs_Config指针,如果没有找到则返回NULL。之后使用XUartPs_CfgInitialize函数进行初始化配置将传送波特率预设为19200bps,8数据位,1停止位,不设置奇偶校验位。配置波特率我们使用XUartPs_SetBaudRate函数将默认波特率重新配置为之前预设的波特率,如果波特率不能与可接受的波特率结合,那么这种错误属于XST_uart_BAUD_ERROR,并返回。UART自检最后,我们使用XUartPsSelfTest函数对UART进行检查。此函数运行一次,令UART工作在本地循环模式,即将自己发送的数据自己接收,以检测UART设备是否可以正常工作。如果不能正常工作则返回XSTUARTTESTFAIL,如果能够正常工作则显示XSTSUCCESS。最终来确保UART硬件设备无故障。UART数据发送在程序中使用XUartPsSend进行数据的传出。该命令可以将数据写入FIFO中并且发送出去。返回值为实际发送出去的字节数,如果该返回值为0,则表示没有发送任何字节。错误信息通过VERBOSE标志位表示程序中的出现错误。其中错误类型主要包括一下几个方面。表4-2错误信息类型错误信息名称错误信息返回值摄像头A初始化失败CameraonportAdidnotinitializecorrectly摄像头B初始化失败CameraonportBdidnotinitializecorrectly摄像头A输入通道出错AnexceptionoccurredinInputpipelineforcam_a摄像头B输入通道出错AnexceptionoccurredinInputpipelineforcam_b其余未知错误Exceptionthatcouldnotbehandled边缘检测算法为了在本实验的基础上加入一个边缘检测的算法,通过simulink软件进行边缘检测模块的设计,并生成IP核,以供在vivado内部使用。对于图像处理,边缘检测算法有着非常重要的作用,边缘检测可以通过图像的显著变化识别图像的边缘轮廓,以提取图像的重要信息。图像边缘一幅图像中两个或多个明显界限的图形信息,代表着一个区域的结束和一个区域的初始。因此,图像边缘可以说是某一像素点与其邻域内其他像素点差量较大的点的合集。图像的边缘信息有两个最重要因素,一个是幅值,另一个方向。顺着边界方向变化的像素点的变化之较小,相反垂直其边界方向变化的像素点变化较大。因此,特点,我们可采用一阶导数或者二阶导数其边界点的确定。边缘检测的算法很多,其中应用较广,效率较高的算法为带有Sobel算子的边缘检测算法。通过对边缘检测的介绍可以知道,相邻像素的灰度变化程度,可以通过导数求得,而导数可以通过微分算子得到,在数字图像处理的过程中,由于很难实现数字信号导数的计算,因此我们一般通过差分计算来做近似处理。Sobel边缘检测边缘检测原理边缘检测主要是讲一个图像中的信息进行分析,找到图像的边缘,可以简单的理解为在实际生活中的抠图,我们可以通过边缘检测算法,检测出一个图像中变化显著的点,而这些点往往是一幅图像中的边缘,从而可以找到图像的轮廓。图像的边缘检测可以很大程度的减少图像的数据量,如果算法设置的较好,可以很好的剔除不需要的无关信息,只保留我们需要的图像信息,将图像和背景区分开。为了计算一个像素点是否为一个图像的边缘点,我们通过计算该点的梯度值或经过滤波后的灰度值是否超过某一给定值,若超过给定值则将该点的灰度设置为0否则设为255。这样就可以达到在图形的边界输出白色轮廓,其余部分输出为黑色。为了计算一个像素点处的导数指,我们在图像处理的过程中一般通过计算相邻像素点的差值。如以一维图像信号为例,一阶导数是通过原始数据与图像数据卷积得到。如。该卷积的模板为:-1/201/2可以看出,通过卷积模板可以一定程度上的加快运算效率。经过算法计算出导数值后,我们需要给定一个阈值,使其能过确定该图像的边缘位置在哪里,阈值给定的越小,则能够检测出来的边缘信息越多,可以使检测的结果的细节增多,但是另一方面,在图像处理的过程中由于噪声的在图像中的变化量也较大因此可能无法剔除,从而得到一些与图像不相关的信息。与之相反,若将阈值定的过高,则会损失一些较细或较短的线段,使图像的边界信息变得不明显。因此需要给定一个适中的阈值已达到一个较好的输出图形。因此我们可以得出边缘检测实现的步骤如下:1.滤波,由上文可知在边缘检测的过程中我们往往需要对图像进行求导操作,但是往往实际的应用过程中,很难避免噪声信号的加入,而高频噪声往往容易使求导后产生一个较大的数值,从而边缘检测会将该数值检测成为边缘点,所以我们需要对其进行滤波操作以改善由于现实实现中加入噪声后的边缘检测器的能效,但是相反的是过强的滤波也会对图像的边缘信息造成一定程度的损害使其变得更加平滑,所以需要在增强边缘信息和降低噪声信号之间做一个这种选择。2.为了增强图像边缘信息,我们可以通过计算出来的横向导数和纵向导数,求其平方和,即梯度的平方值来扩大边缘信号,使其更加明显,并且由于直接求梯度的平方可以在实现的过程中省去开放操作,在fpga内部的实现将变得更为简单。3.检测及阈值的比较,通过计算出来的梯度值与之前所设定的阈值相比较,从而筛选出相应的图像边缘信息,并且剔除出无用信息。Sobel算子边缘检测的算法有很多,在本实验中我们选用Sobel算子。Sobel算子是带有方向性的,既有X方向也有Y方向。可以单独计算X方向或者单独计Y方向,也可以两个都计算。其计算的公式如下所示:其中f(x,y)为图像像素点(a,b)处的灰度值。当然,像5.1.1所述,可以构建卷积算子,使其计算更加有效,其中构建的卷积算子为:横向Sobel卷积因子:纵向Sobel卷积因子:通过卷积运算可以得到横向和纵向边缘检测的图像灰度值:其中Gx为图像的横向微分值,Gy为图像的纵向微分值,A为原始图像。得到横向和纵向的微分值后,可以求得某一像素点处的梯度值大小,计算公式如下:为了在系统实现过程中,提高系统的运算效率,我们通常取绝对值的和来省去开方运算以简化运算。因此在经过以上的计算之后,得到梯度值G之后,和之前所设定的阈值比较最终来确定该像素点是否为图像的边缘点。并且在一些其他的边缘检测算法中可以通过计算梯度的方向来使边缘信息更加明确,梯度方向通过下式得到:systemgenerator的实现边缘检测systemgenerator的实现赛灵思公司为了方便在simulink上进行数字信号处理,设计出systemgenerator这种开发工具,其可以在simulink中将赛灵思开发的模块嵌入进去,使所需要进行设计的部分在simulink中进行仿真并生成相应的HDL文件与Vivado实现交互,但是在simulink中进行的仿真必须使用XilinxBlock内的相关模块才能进行仿真。也可以生成比特流文件,加快数字信号系统的开发进程。由边缘检测的原理我们可以得知,要在systemgenerator上实现边缘检测我们需要完成一下几个步骤:像素流的输入和图像的输出、缓冲器、X滤波器、Y滤波器以及阈值比较。下面我们将按照上述几个模块分别在simulink中实现。像素流的输入和图像的输出由于在matlab中进行图像处理时,内部是可以进行矩阵运算的,这种运算使图像处理变得非常方便,但是在实际应用的过程中我们很难实现这么多并口同时输入,一来没有这么多的io口进行设计,二来这样的设计对于硬件运算负荷太大设计困难,因此我们在PL上实现数字图像处理时,我们应该将matlab中的矩阵信息变为数据流的形式输入并且处理。因此本实验在simulink内部进行仿真的时候选择使用回调函数的方法分别在仿真开始前和仿真结束前添加图像提取和图像输出的回调函数。函数的具体思路如下:图5-1图像输入的回调函数由图5-1可知,在matlab界面使用imread函数将某一图像进行提取,但是由于直接读取的图像信息是unit8格式并且是矩阵形式,这样的图像信息并不能用于图像处理,因此使用double语句改变其格式,并且在得到图像大小信息之后,用reshape函数将图像矩阵变成一个一维向量,这个过程应注意reshape的格式。为了使其能够在systemgenerator中进行仿真,我们在前面再加入一个时针信号,信号范围是像素点总数。图5-2图像显示的回调函数图像显示的回调函数如图5-2所示。从上图可以看出在此处我们依然使用reshape函数将经过simulink处理的图像信息转换为矩阵形式,方便在matlab中输出。缓冲器图像处理一般是根据一个邻域内进行运算,因此在硬件中进行数字图像处理时,需要缓冲器使一个像素的领域内的数据可以进行运算。其中包括行缓存器和列缓存器。1.行缓存器在simulink中的行缓存器非常简单,由于图像数据是自上而下,从左向右进行处理的,因此3行缓存器只需要加入两个延迟环节即可。如图5-3所示:图5-3行缓存器内部结构通过行缓存器就可以实现将f(x+1,y),f(x,y),f(x-1,y)进行并行输入。将设计好的行缓存器封装,如图5-4图5-4行缓存器2.列缓存器当然与行缓存器类似,我们可以按照其原理进行如图5-5所示设计。这种设计的输出延迟为输入图形的宽度。使得输出通道为一列相邻像素数据的并行输出,但是显而易见的是,这种输出模式会向后延迟1280拍,使得整个系统的延迟增大非常多,因此我们需要另一种列缓存模式。图5-5列缓存器与行缓存器目的一致,为了使图像数据的f(x,y+1),f(x,y),f(x,y-1)并行输入。在simulink中进行列缓存器的设计,可以仿照行缓存器,设置两个延迟环节。但是在列缓存器的设计过程中,其延时拍数将设计为图像的长度,这样就会使整个系统的延时加大,整个系统的效率就会大大降低。因此我们选用双口RAM模块进行缓存器的设置。图5-6DualportRAM模块该模块可以将直接将数据存放在相应地址,addra是A存储器的地址入口,dina是A存储器的数据入口,wea是a的写入使能端。我们可以通过对于地址信息的设计,使用较少的延迟来实现列缓存器。图5-7列缓存器的内部结构图可以看到通道一直接输出,通道二通过concat模块将两个数组连接起来作为其存储地址。通道三的实现是通过RAM的A口输出数据连接到RAM的B口输入,并增加地址最高位,使其延迟一个图像宽度的拍数。但是在此处设计的时候应该注意DualPortRAM内部的延迟为2拍,所以要使其列缓存器输出正确,我们将该模块的总延迟设计为5拍,因此需要在相应的位置加入延迟环节惊醒校对。校对结果如图5-8所示:图5-8加入延迟环节的列缓存器内部结构图最后将其封装,如图5-9所示:图5-9列缓存器X,Y滤波器以及梯度计算X,Y滤波器的原理在6.1节已经涉及到,在此不再进行过多描述,主要是将卷积公式,转换成simulink的模块实现。实现过程主要是依靠乘法器和加法器实现:如图5-10,5-11所示:图5-10X滤波器内部结构图5-11Y滤波器内部结构可以看到simulink中通过行缓存器和列缓存器之后,将得到某一像素点邻域内的各个像素信息,通过计算可以得出Sobel算子卷积后的Gx和Gy。正如5.1节所述,计算其梯度的数值,经过比较便可得到最终的结果,及该店是否为边缘点。将X,Y滤波器打包如图5-12所示:图5-12X,Y滤波器由于前文所说,为求得梯度的数值,开方的操作实现起来较为麻烦,可以选择绝对值的和的方式进行实现,或者如本实验所选用的计算平方和的方法和阈值的平方进行比较。及:最后由和阈值比较。Simulink的梯度计算如图5-13所示图5-13梯度值的计算阈值比较阈值比较在阈值比较的simulink实现中我们选用比较模块和二选一Mux模块共同实现,Mux模块如图5-14所示:图5-14Mux模块可以看到sel口输入0时,Mux模块输出d0值,当sel口输入1时,Mux模块输出d1的值。因此可以将边缘点检测模块设置为:图5-15阈值比较模块若比40000大则判断该点处的像素变化较大,该像素点为图像的边缘点,之后令sel输入为0,Mux的输出为255,即亮度强度最强为白色。整体实现通过上述在simulink中构建相应的模块,将其组装成为边缘检测的系统实现,因为在systemgenerator的实现过程中,有一些其他的模块需要添加,在本节我们做出一些必要的说明。1.systemgenerator模块为了使simulink的仿真可以正常运行,在整个系统的内部需要加入一个systemgenerator模块,如图5-15所示图5-16systemgenerator模块该模块可以驱动整个fpga的运行和实现,只有systemgenerator模块存在,XilinxBlock中的模块才能正常运行,该模块在simulink中不和其他的元件连接,独立存在。我们在使用时双击进入内部对其进行配置,我们可以在其内部选择仿真的芯片,时钟频率,仿真频率等等,并且最终生成ip核或者是将整个系统通过HDL语言描述出来。在本次实验中我们需要systemgenerator为我们生成相应的ip核,systemgenerator可以通过系统内部的构成来自动生成ip核的数据输入接口和时序输入接口。2.FPGA边界模块Systemgenertor可以实现fpga开发和matlab算法的交互,但是我们不难想到,matlab有着优秀的矩阵运算,但是在fpga中并没有矩阵运算的概念,因此为了进行fpga式的开发,我们需要在simulink中规定数据的输入形式,即数据流的输入形式,以方便在后续的处理过程中可以根据fpga的开发思想来进行相应的操作,XilinxBlock为我们提供了两个模块,分别为gatewayin和gatewayout,这两个模块使系统在simlink内部仿真的时候可以确定生成的ip核的边界在哪里,在整个系统的内部必须使用XilinxBlock中的模块,在系统外部可以使用simulink中的其他模块。而为了仿真fpga的数据类型,gatewayin的功能是可以将传入matlab中的浮点型数据变为fpga可以接收的定点型数据。GatewayIn和GatewayOut结构如图6-17所示:图5-17FPGA的边界定义对于整个FPGA在simulink中的仿真参数的设置可以在GatewayIn中设置,如图6-18所示:图5-18GatewayIn模块设置这里可以设置转换成定点数的数据格式,可以设置成有符号数或无符号数,以及数据位宽和小数点的位置。需要注意的是这里的采样时间应该与simulink系统的仿真时间保持一致或更小。自此整个系统构建所需要的模块已经介绍完毕。3.系统实现通过上述所讲,将所有模块串联成整个边缘检测的系统,如图5-19所示图5-19边缘检测simulink实现为了检验该系统的可靠性,我们可以构建一个基于matlab矩阵运算的边缘检测模型,如图5-20所示:图5-20基于矩阵运算的边缘检测模型可以对比两个模型的运算结果运行结果如图5-22和图5-23所示,原图如5-21所示:图5-21原始图像图5-22基于矩阵运算的边缘检测图5-23基于FPGA的边缘检测可以看到该实验的实现效果较好。若要进行调整只需要适当改变阈值参数即可。以下为改变阈值参数后的输出图像效果图。(A)(B)(C)(D)图5-24阈值改变时的结果由图5-24可以看出a,b,c,d四张图的阈值参数设置分别为,60000、40000、10000、5000。当阈值设置越小时,图像信息就越明显,线条也越鲜明。这是对于一幅没有高频干扰的图像,但是在现实的图像处理设备中,难免的会有一些高频噪声的干扰。如图5-25所示,将图像加入一些高频噪声后,不同的边缘检测参数对其影响。(B)(C)图5-25带有高频噪声的边缘检测上图中A图将阈值改为20000,B图将阈值改为80000,C图将阈值设定为11000。可以看出,如果阈值设置过小,虽然图像较为完整但是将有大量的高频噪声保留在图像上,如果加大阈值参数使尽量少的噪声保留,这样会一定程度上损坏原图像的信息。因此阈值的选取应该适当。vivado的整体实现通过systemgenerator模块选取zedboard开发板,生成相应的IP核,在vivado内部加入边缘检测模块,之后整个系统实现原理图如图5-26所示:图5-26加入边缘检测后的vivado系统框图通过systemgenerator模块生成ip核文件,并将生成的ip核配置到vivado内。生成的ip核如图5-27所示。图5-27边缘检测ip核将生成的ip核嵌入到vivado建立的工程中,进行总体的实现。边缘检测的优化通过第五章可以发现,在现实生活中有很多的硬件设备里总是存在多多少少的高频噪声干扰,因此在实现边缘检测时总会发生图5-25所示内容,为了使边缘检测不受到高频噪声的影响,我们可以在边缘检测ip核前加入一个滤波ip核,使输入进的视频数据先经过滤波去除一定的高频噪声,之后在此基础上再将滤波后的图像进行其他的图像处理,可以很大程度上的减少高频噪声对系统的影响。由于ip核的建立在第五章已经有所设计,因此本章不再做过多说明,只将重心放在系统在systemgenerator的搭建上。滤波装置的systemgenerator实现滤波装置的实现有很多种,其中我们可以通过FDAtool进行降噪,FDAtool是systemgenerator的一个滤波模块,可以通过它对进行数字滤波的配置,可以通过伯德图的形式直观的表现出我们所需要的滤波器信息。如图6-1所示6-1FDAtool内部配置通过FDAtool和数字滤波模块的配合可以将图像流信息进行滤波操作。总体systemgenerator实现图如图6-2所示:6-2FDAtool滤波流程图从上图可以看出,FDAtool的滤波流程较为简单,设计起来也非常方便,参数调整可以根据FDAtool内部进行调整,较为灵活。但是对于数字图像的处理过程中,参数的确定就显得尤为麻烦,并且滤波的效果也不是很理想,往往会使整个图像变得非常模糊。因此我们在此选取另一种图像滤波方式,即中值滤波。中值滤波的原理非简单,即再每一个像素点周围3×3的邻域内共计9个像素信息,将这9个像素信息,进行排序之后选取中位数作为该像素点的输出。这种滤波方法可以很大程度的减小图像中的噪声,并且也不会对边缘信息造成像均值滤波一样的损坏。因此我们在本例中使用中值滤波的实现方法。图6-3中值滤波的systemgenerator实现在图6-3中可以看到,主要系统包括横向和纵向的缓存器,以及MUX模块,和Mcode模块。对于视频的输入输出,和缓存器部分在第五章已经做了详细的介绍,在此我们不再进行说明。对于MUX模块主要是将缓存器的9个像素信息,逐个输出。而Mcode的主要功能是将输入的9个像素信息进行排序之后再选取中间值作为输出,具体的Mcode函数见附录。建立好的中值滤波systemgenerator模块可以通过第五章的方法进行ip核的建立,建立好的ip核加入整个系统后,可以观察,优化后的边缘检测模型的图像效果。(A)(B)(C)图6-4中值滤波的边缘检测可以看出再图6-4中,(A)为原图,(B)为带中值滤波的边缘检测,(C)为不带中值滤波的边缘检测。对比5.2.6节中的结果可以看出,带有中值滤波的边缘检测很好的剔除了高频噪声,可以使边缘检测的结果得到一定程度的改善。其他实现当然边缘检测的优化方式有很多,我们可以对边缘检测算法本身进行一定程度的改进,我们只研究了边缘检测处理过程中的梯度的大小,但是并没有根据梯度的方向对边缘信息进行分析,并且由于sobel算法对图像边缘的处理时,只考虑图像边缘是一段很小的像素邻域,因此当某个图像边缘较厚时,可能会出现其他情况的错误。并且如果莫伊图像的边缘颜色和背景颜色较为接近时,可能会发生无法检测到的情况,因此我们可以在算法上进行改进,可以设置双阈值检测,大于高阈值时则为边缘点,大于低阈值时则为弱边缘点,通过统计观察不难发现,软边缘点总是在强边缘点附近延伸出来,因此我们可以通过这种方法对边缘检测进行一定程度的改进。除了这些以外,我们也可以考虑不同

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论