0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Vivado HLS在Zedboard中的Sobel滤波算法实现步骤教程

Hx 作者:工程师陈翠 2018-07-14 06:05 次阅读

总体设计思路

Vivado HLS在Zedboard中的Sobel滤波算法实现步骤教程

sobel 算法理论基础

索贝尔算子(Sobel operator)主要用作边缘检测,在技术上,它是一离散性差分算子,用来运算图像亮度函数的灰度之近似值。在图像的任何一点使用此算子,将会产生对应的灰度矢量或是其法矢量。

Vivado HLS在Zedboard中的Sobel滤波算法实现步骤教程

该算子包含两组3x3的矩阵,分别为横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。如果以A代表原始图像,Gx及Gy分别代表经横向及纵向边缘检测的图像灰度值,其公式如下:

Gx = (-1)*f(x-1, y-1) + 0*f(x,y-1) + 1*f(x+1,y-1)

+(-2)*f(x-1,y) + 0*f(x,y)+2*f(x+1,y)

+(-1)*f(x-1,y+1) + 0*f(x,y+1) + 1*f(x+1,y+1)

= [f(x+1,y-1)+2*f(x+1,y)+f(x+1,y+1)]-[f(x-1,y-1)+2*f(x-1,y)+f(x-1,y+1)]

Gy =1* f(x-1, y-1) + 2*f(x,y-1)+ 1*f(x+1,y-1)

+0*f(x-1,y) 0*f(x,y) + 0*f(x+1,y)

+(-1)*f(x-1,y+1) + (-2)*f(x,y+1) + (-1)*f(x+1, y+1)

= [f(x-1,y-1) + 2f(x,y-1) + f(x+1,y-1)]-[f(x-1, y+1) + 2*f(x,y+1)+f(x+1,y+1)]

其中f(a,b),表示图像(a,b)点的灰度值;

图像的每一个像素的横向及纵向灰度值通过以下公式结合,来计算该点灰度的大小:

通常,为了提高效率 使用不开平方的近似值:

如果梯度G大于某一阀值则认为该点(x,y)为边缘点。

然后可用以下公式计算梯度方向:

Sobel算子根据像素点上下、左右邻点灰度加权差,在边缘处达到极值这一现象检测边缘。对噪声具有平滑作用,提供较为精确的边缘方向信息,边缘定位精度不够高。当对精度要求不是很高时,是一种较为常用的边缘检测方法。

流程

HLS算法验证与实现

算法验证包括算法C/C++实现,综合编译仿真,实现导出pcore用于-------》XLINX EDK

EDK硬件工程搭建

EDK中主要搭建zedboard硬件平台,实现VDMA(用AXI-Stream),HDMIDDR等等,生成system.bit,用于连同uboot、fsbl生成zedboard bootload (BOOT.BIN)。

参考:

zedboard启动过程分析 :

zedboard 构建嵌入式linux

LINUX 系统移植

准备一张》8G的SD卡,分区为FAT32+EXT4(其中EXT4为文件系统》4GB,FAT分区为内核 设备树 bootloader) 可以采用gparted分区工具完成,apt-get install gparted

系统移植包括内核镜像的编译,bootloader的移植,设备树的编译,文件系统的移植

具体移植步骤参见:

内核镜像地址:git clone

uboot源码 :git clone git://git.xiinx.com/u-boot-xarm.git点击打开链接点击打开链接点击打开链接

设备树在内核中可以找到,将设备树,内核镜像,BOOT.BIN拷贝到SD卡中FAT分区中

文件系统: 直接拷贝到SD卡中EXT4分区中

LINUX VDMA驱动应用程序编写与实现

编写驱动程序是为了我们能在PS中对VDMA进行管理和控制。前提是在底层中我们已经做好了所有相关的硬件设计等等。

移植OPENCV库:用于对比FPGA算法处理速度比较,有两种方法移植OPENCV库,

1:apt-get install libopencv-dev python-opencv(用于python中)

2:下载源码编译

源码地址:

编译步骤参考:基于opencv网络摄像头在ubuntu下的视频获取

结果展示

FPGA硬件实现Sobel效果 OPENCV软件实现Sobel

Vivado HLS在Zedboard中的Sobel滤波算法实现步骤教程

处理时间显示

结果分析

上图处理时间中 640*480的视频

1:opencv处理一帧的时间0.148554s 大约为7帧每秒

2:fpga硬件实现一帧总时间(算法时间+VDMA拷贝时间)

3:fpga硬件实现一帧的算法时间,不包含拷贝DMA时间

在cortex A9 700MHZ 速度中 ,FPGA实现的算法速度比OPENCV软件实现速度快50-100倍,FPGA一秒钟可以处理500帧图像,OPENCV只能处理10张不到

但是缺点是,视频拷贝花费了太多的时间。所以我个人认为FPGA处理图像不在算法实现有多复杂与困难,因为FPGA的并行率理论上是无穷的,但是视频流的输入输出的速度直接决定了处理速度。暂时没想到好的方法解决。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Vivado
    +关注

    关注

    19

    文章

    807

    浏览量

    66269
  • Zedboard
    +关注

    关注

    45

    文章

    70

    浏览量

    49170
收藏 人收藏

    评论

    相关推荐

    探索Vivado HLS设计流,Vivado HLS高层次综合设计

    文件来与所得结果进行对比验证。 3.实验步骤 3.1.Vivado HLS GUI界面创建项目 3.1.1.启动
    的头像 发表于 12-21 16:27 3555次阅读

    新手求助,HLS实现opencv算法加速的IPvivado的使用

    我照着xapp1167文档,用HLS实现fast_corners的opencv算法,并生成IP。然后想把这个算法塞到第三季的CH05_AXI_DMA_OV5640_HDMI上,这个de
    发表于 01-16 09:22

    怎么Vivado HLS中生成IP核?

    我的目标是实现一个给定的C算法是一个FPGA。所以,我最近得到了一个Zedboard,目标是实现算法是PL部分(理想情况下PS
    发表于 03-24 08:37

    【正点原子FPGA连载】第七章OV5640摄像头Sobel边缘检测-领航者ZYNQ之HLS 开发指南

    边缘检测实验,来学习如何使用Vivado HLS工具生成实现Sobel边缘检测算法的IP核,以及
    发表于 10-13 17:05

    Vivado HLS实现OpenCV图像处理的设计流程与分析

    的RTL代码。ISE或者Vivado开发环境做RTL的集成和SOC/FPGA实现。2.2.1 VivadoHLS视频库函数HLS视频库是
    发表于 07-08 08:30

    Vivado HLS设计流的相关资料分享

    多个HLS解决方案2.实验内容实验中文件包含一个矩阵乘法器的实现实现两个矩阵inA和inB相乘得出结果,并且提供了一个包含了计算结果的testbench文件来与所得结果进行对比验证
    发表于 11-11 07:09

    嵌入式HLS 案例开发步骤分享——基于Zynq-7010/20工业开发板(4)

    ) xapp890-zynq-sobel-vivado-hls.pdf5.1 HLS 工程说明(1) 时钟HLS 工程配置的时钟为 100MHz。如需修改时钟频率, 请打开 HLS
    发表于 01-01 23:46

    嵌入式HLS 案例开发步骤分享——基于Zynq-7010/20工业开发板(4)

    ) xapp890-zynq-sobel-vivado-hls.pdf 5.1 HLS 工程说明(1) 时钟HLS 工程配置的时钟为 100MHz。如需修改时钟频率, 请打开 HLS
    发表于 08-24 14:54

    Hackaday读者有话说:Vivado HLS使用经验分享

    ,Xilinx Vivado HLS是一个高级综合工具,能够将C语言转换成硬件描述语言(HDL),也就是说我们可以用C语言来实现HDL模块编程了。 图1 Vivado
    发表于 02-08 20:01 647次阅读
    Hackaday读者有话说:<b class='flag-5'>Vivado</b> <b class='flag-5'>HLS</b>使用经验分享

    Vivado+Zedboard之入门实例精选

    继续介绍vivado+zedboard入门实例。均为参照教程实际操作验证成功的实例,在此拿出来与大家分享。由于教程步骤已经非常清晰,本文只是简单介绍实例以及试验时的修正记录,具体的教程及个人
    发表于 02-09 05:59 724次阅读

    基于Vivado HLS平台来评估压缩算法

    接口(ORI)标准压缩算法可以分析其对信号保真度,延迟以及实现成本。Vivado HLS是一个评估实现压缩
    发表于 11-17 02:25 1461次阅读
    基于<b class='flag-5'>Vivado</b> <b class='flag-5'>HLS</b>平台来评估压缩<b class='flag-5'>算法</b>

    Vivado-HLS实现低latency 除法器

    1 Vivado HLS简介 2创建一个Vivado-HLS工程 2.1打开Vivado HLS GUI 2.2创建新工程
    发表于 12-04 10:07 0次下载
    用<b class='flag-5'>Vivado-HLS</b><b class='flag-5'>实现</b>低latency 除法器

    基于CORDIC的高速Sobel算法实现

    为提高图像边缘检测的处理速度,提出一种基于CORDIC的高速Sobel算法实现
    的头像 发表于 10-05 09:54 3532次阅读
    基于CORDIC的高速<b class='flag-5'>Sobel</b><b class='flag-5'>算法</b><b class='flag-5'>实现</b>

    如何创建Vivado HLS项目

    了解如何使用GUI界面创建Vivado HLS项目,编译和执行C,C ++或SystemC算法,将C设计合成到RTL实现,查看报告并了解输出文件。
    的头像 发表于 11-20 06:09 3894次阅读

    关于Vivado HLS错误理解

    尽管 Vivado HLS支持C、C++和System C,但支持力度是不一样的。v2017.4版本ug871 第56页有如下描述。可见,当设计如果使用到任意精度的数据类型时,采用
    的头像 发表于 07-29 11:07 5453次阅读
    关于<b class='flag-5'>Vivado</b> <b class='flag-5'>HLS</b>错误理解