摘要:

针对嵌入式软件无法满足数字图像实时处理速度问题,提出用硬件加速器的思想,通过FPGA实现Sobel边缘检测算法。通过乒乓操作、并行处理数据和流水线设计,大大提高算法的处理速度。采用模块的硬件设计,保证了系统的可移植性和系统的扩展性。最后使用Verilog HDL编程实现算法处理,并用Modelsim和MATLAB进行了仿真和验证。

中文引用格式:杜正聪,宁龙飞. 基于Sobel算法图像边缘检测的FPGA实现[J].电子技术应用,2016,42(10):89-91,95.

英文引用格式:Du Zhengcong,Ning Longfei. Image edge detection based on Sobel algorithm in FPGA implementation[J].Application of Electronic Technique,2016,42(10):89-91,95.

0 引言

图像的边缘检测是数字图像处理领域的一项关键技术,是图像分割、运动检测、目标跟踪、人脸识别等技术的基础[1]。随着电子信息技术的高速发展,图像的边缘检测在航天、工业、医学、军事等领域有着广泛的应用和发展[2]。在这些应用中,通常选用ARM和DSP等作为处理器,通过嵌入式软件来处理信息,但随着待处理信息量越来越大,算法复杂度越来越高,单核处理器处理速度已不能满足某些系统的需求。

本文在研究Sobel算法[3]的基础上,针对嵌入式软件无法满足实时数据处理速度的要求,引入硬件加速器的思想,采用RAM+FPGA硬件结构,通过嵌入式软件提供从机接口,控制加速器进行工作,硬件加速器(FPGA)通过模块化设计,采用流水线设计和乒乓操作大幅提高实时处理数据速度,实现图像的边缘检测。从机接口一般通过嵌入式软件读写寄存器来完成。

1 边缘检测和Sobel算法

边缘检测是分析视频和图像的重要方法,主要检测和确定图像在哪些区域上亮度发生突变,这些亮度突变的区域通常就是物体的边缘。

以灰度图像为例,分辨率为M×N的图像由M×N个像素组成。Sobel 检测法把中心像素点和离它最近的8个像素点每个乘以一个系数后相加,类似卷积的过程来估计每个像素点x、y方向上的导数值。该系数通常用一个卷积表(Convolution Mask)来表示。分别用于计算x和y方向导数值的Sobel卷积表Dx和Dy如下所示[4]

把每个像素值分别乘以卷积表中对应的数,再把相乘得到的9个数相加就得到了x方向和y方向的偏导数值Dx和Dy。然后,利用这两个偏导数值计算中心像素点的导数。

计算公式如下:

由于开平方和平方函数都是单调的,实际计算幅度的最大值、最小值与近似以后计算的最大值、最小值发生在图像的同一个地方。并且,与计算平方和开平方相比,计算绝对值所用的硬件资源少得多。若要找到导数幅值的最大值和最小值,对式(1)作如下简化:

需要重复地计算图像中每个像素位的导数幅值。但是,注意到环绕图像边缘的像素点并没有一个完整的相邻像素组来计算偏导数和导数,所以要对这些像素进行单独处理。最简单的方法就是把图像中边缘像素点的导数值|D|设置为0。

2 Sobel边缘检测法的硬件实现

2.1 Sobel加速器结构

硬件加速实质上是通过增加运算并行性达到加速的目的,常常采用硬件复制和流水线的方法。

边缘检测加速器系统的原理框图如图1所示。视频或图像数字信号通过 I/O 控制器输入,保存在存储器中;在RAM处理器控制下运行的硬件加速器,读入存储器中存储的帧图像(数据),并进行边缘检测算法实现,最后将得到相应的导数图像写入存储器。在实际应用中,选取硬件加速器对时耗大的算法进行加速,大大降低其他处理器(如 DSP、ARM 等)的负担。

I/O控制器和加速器通过DMA(Direct Memory Access)方式直接发起对内存的访问而不通过处理器,大大加快访问内存的速度。为避免多个设备同时访问内存发生冲突,在系统中引入仲裁器。仲裁器的仲裁策略为:唯一申请者获得资源。这样,ARM(CPU)对加速器进行配置,配置待处理数据源地址和目标地址,然后启动加速器,释放总线资源;ACC在接收到启动命令之后,要申请资源,完成算法实现后,用中断的方式反馈给RAM(CPU),同时释放资源。

2.2 基于FPGA的硬件加速器

图像边缘检测数据具有数据量大,可并行处理及重复操作等特点,用FPGA可实现硬件并行处理信息;通过流水线设计技术和乒乓操作的架构设计,可以进一步提高实现算法组合逻辑处理速度和系统处理信息的吞吐量,因此FPGA对处理图像边缘检测数据有着天然的优势。本文采用面向流处理的加速器处理按照顺序到达的数据流。

系统基于Altera公司的Cyclone IV系列FPGA,采用从顶向下模块化设计方法,利用攀岩法建模,具有良好的移植性和系统扩展性。图2为边缘检测实时处理图。

图3为硬件加速器模块设计图。设计中将系统数据流和控制流分开进行,这样在设计数据流时就不必在意数据何时输入何时输出的问题,而把这些问题转移到控制流设计阶段中去。在控制流设计阶段系统地考虑数据流的控制,将使得电路设计更加系统,修改更加方便。控制流的设计一般借助于状态机(FSM)。

以实现分辨率600×400的8 bit灰度图片为例,系统设计数据总线位宽32 bit,通过总线分时复用,分别从memory取数据,放置32 bit*_row_reg寄存器,为减少产生无效数据,增加硬件设计的复杂性,等待数据分别装满*_row_reg寄存器,才开始移位计算Sobel算子结果,这就造成移位时不能写入数据,写入数据时不能移位,产生大量的等待时间。本文通过插入*_row移位寄存器,把写数据和移位分开处理,实现系统的全线流水。

对于Sobel算法单元,为了节约资源和提高处理速度,有些设计采用分布式算法,利用查找表代替乘法器进行乘法运算[5],这样无法做到对任意随机数据的处理。本文为避免使用乘法器,通过移位实现乘法运算。数据流水进入产生的无效数据设置为左边界,数据流水排除的无效数据设置为右边界,顶行和末行为无效行设置上下边界。图4为Sobel算法架构图。

3 系统仿真和结果分析

本文采用600×400的灰度图像作为研究对象,仿真和验证结果如图5所示。

通过MATLAB将灰度图片imag1.bmp(任意格式)处理转换成imag.txt文件,存储在Memory中,用Verilog实现Sobel算法,Modelsim仿真数据生成data.txt文件,再利用MATLAB将data.txt文件通过门限处理转换成图片tes.bmp。用MATLAB直接调用Sobel函数处理初始灰度模式图片,生成图片imag2.bmp,比较两图片,验证FPGA处理的正确性。

从仿真结果和实验所得图像来看,该设计很好地完成了Sobel算法的边缘检测任务,使用RAM+FPGA加速器结构,以50 MHz(实验仿真使用值)时钟驱动为例,处理一幅600×400图像,所需时间为19.2 ms,每秒可处理图像208幅,满足实时系统要求,解决单核处理器运算时间长的问题。解放控制单元去实现更复杂的控制和功能。

4 结论

本文基于FPGA引用硬件加速器思想,解决嵌入式软件无法满足信息的实时性处理问题,用Verilog编程硬件实现图像数字信号读写、Sobel算法实现,完成图像边缘检测;通过FPGA乒乓操作、并行处理和流水线设计完成数据量大、重复率高的图像边缘检测数据处理,大大提高了系统效率,达到了实时性要求。同时引用模块化的设计方法,自顶向下利用攀岩法建模,使得设计具有良好的可移植性和系统可扩展性,具有极大的实用价值。

参考文献

[1] 何俊峰.基于视觉原理的图像边缘检测算子研究[D].武汉:华中科技大学,2006.

[2] Yu Yuanhui,Chang Chinchen.A new edge detection approach based on image context analysis[J].SCI,Image and Vision Computing,2006,24:1090-1102.

[3] 林伟,周剑扬.图像边缘检测高速数字滤波器设计与实现研究[J].现代电子技术,2006(6):26-29.

[4] 吴海彬,何祖恩,李文锦.基于改进Sobel算子的图像边缘检测及其嵌入式实现[J].机床与液压,2009,37(10):133-136.

[5] 叶敏,周文晖,顾伟康.基于FPGA的实时图像滤波及边缘检测方法[J].传感技术学报,2007,20(3):623-627.

sobel算子原理_「学术论文」基于Sobel算法图像边缘检测的FPGA实现相关推荐

  1. bp 神经网络 优点 不足_【学术论文】基于灰度共生矩阵和BP神经网络的乳腺肿瘤识别...

    摘要 乳腺肿瘤是女性病发率极高的一种肿瘤疾病, 但也是一种可以通过早期确诊.提早治疗来降低病死率的一种疾病.提出灰度共生矩阵结合BP神经网络的方法, 提高乳腺肿瘤的识别率.首先将红外乳腺图像进行预处理 ...

  2. 旋转校正原理_「牛车实验室」四轮定位和动平衡如何选择?趣谈两种项目的原理和区别...

    [资讯-牛车网] 四轮定位和动平衡早已是大家耳熟能详的项目了,但在实际生活中我们发现,有的车主更换轮胎后去做了四轮定位,有的车主车轮被撞后去做了动平衡,整一个满拧,车子开起来反而不顺手了--那么今天, ...

  3. 直接请求接口_「软件测试教程」基于postman进行接口测试实战

    一:接口测试前准备 接口测试是基于协议的功能黑盒测试,在进行接口测试之前,我们要了解接口的信息,然后才知道怎么来测试一个接口,如何完整的校验接口的响应值. 那么问题来了,那接口信息从哪里获取呢?常用的 ...

  4. boot客户管理系统源码_「计算机毕设」基于SpringBoot开发的仓库管理系统

    前言 大家好,我是it分享师,今天给大家带来一个计算机的毕设项目.基于Springboot开发的仓库管理系统,底层权限控制已经基于shiro实现了,直接可以作为二次开发框架使用! 使用技术 本套系统采 ...

  5. 硕士android毕业论文题目,「复盘论文」硕士毕业论文题目选定

    原标题:「复盘论文」硕士毕业论文题目选定 编者按:一篇论文的写作凝聚了作者的辛勤付出.在一篇看似普通的论文背后我们往往没有深入的研究它是如何产生,当前处于什么样的现状,未来的研究方向又是什么?鉴于当前 ...

  6. 【Pytorch神经网络理论篇】 11 卷积网络模型+Sobel算子原理

    1 视觉角度理解卷积神经网络 1.1 卷积神经网络与生物视觉系统的关系 卷积神经网络的工作流程与生物大脑的处理视觉信号的流程相似,即:将图像从基础像素到局部信息再到整体信息的转化.大脑在对图像进行分级 ...

  7. 打工人的「周游世界」,AI算法帮你实现,泪目!

    一.前言 大家好,我是 Jack . 最近又有一个算法火了,不知道你们看到没?直接看效果! 打工人的「周游世界」,AI 算法帮你实现. 效果这么稳定的人像 Image Matting算法真的不多,并且 ...

  8. c语言开发五轴后处理,「数控干货」基于UG CLS文件使用 C 语言制作智能后处理工具...

    原标题:「数控干货」基于UG CLS文件使用 C 语言制作智能后处理工具 1 前言 UG 后处理操作是 UGCAM 数控加工工作中一个重要环节,主要任务是把在 UG 加工环境下生成的加工刀位文件转换成 ...

  9. 「免费申请」基于Arm Cortex-M4的兆易创新GD32F427高性能开发板试用活动

    申请链接:「免费申请」基于Arm Cortex-M4的兆易创新GD32F427高性能开发板试用活动 基于Arm® Cortex®-M4的兆易创新GD32F427开发板免费试用活动 近期兆易创新发布了全 ...

最新文章

  1. 关于编码ansi、GB2312、unicode与utf-8的区别
  2. Shell-使用和wait让你的脚本并行执行
  3. c++ 预处理命令 #define用法
  4. java 只运行一次吗_java程序循环只执行一次的问题
  5. 【Java多线程】并发时的线程安全:快乐影院示例
  6. 全球首发!计算机视觉Polygon Mesh Processing读书笔记6——微分几何中的Metric Properties
  7. wojilu系统的ORM代码解析-[源代码结构分析,用特性和反射来感知属性-特性介绍篇]...
  8. 2021L3HCTF luuuuua Writeup
  9. 代码对比工具,我就用这6个
  10. Linux 磁盘无损扩容
  11. 第二章 认识的本质及其规律笔记
  12. 1. 从键盘输入一系列字符(以回车符结束,字符的个数不超过 200 个),统计输入字符串中数字与非数字字符的个数,并将计数结果输出。
  13. Android实现制作氢壁纸,氢壁纸怎么制作?氢壁纸制作方法介绍[图]
  14. word2010去掉回车符
  15. DOTA2攻速计算公式研究
  16. git 切换分支提示当前有未提交?
  17. NBOJv2 Problem 1009 蛤玮的魔法(二分)
  18. 什么是软件模块化,为什么要模块化?
  19. laravel统计数量
  20. 2022年最新IDEA下载教程

热门文章

  1. Linux系统学习关于Vim文本编辑器的使用介绍
  2. 纸业供应链协同管理系统:全链路数字化,实现供应链平台订单智能管控
  3. mybatis association select 性能分析
  4. 最美人生在旅途——《念奴娇 • 过锦阳关》 Mars_VV原创
  5. golang力扣leetcode 675.为高尔夫比赛砍树
  6. java截取字符串中的一部分字符,我先收藏为敬
  7. geetest php,Laravel 集成 Geetest验证码的方法
  8. 移动Web开发技巧汇总
  9. 实现模板自由?阿里妈妈全自动无模板图文创意生成
  10. linux 查看 pci 设备驱动,如何写linux pci设备驱动程序