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

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

3天内不再提示

基于FPGA的实时图像边缘检测系统

科技绿洲 来源:FPGA创新中心 作者:FPGA创新中心 2022-05-01 09:08 次阅读

图像的边缘包含了图像大量的信息,图像边缘检测作为图像处理领域中的重要内容,在实际应用中也具有重要意义。例如在工业生产线、车辆检测、车牌识别等实时应用中,通过边缘检测能够有效简化对图像的分析。由于实时数字图像处理系统具有数据量大、处理速度快、重复度高等特点,传统的软件方法显然无法满足。而由于FPGA具有丰富的逻辑资源和存储资源,能够实现并行和流水线处理,因此,使用FPGA来实现需要大量计算的数字图像处理算法,能够大大提高图像处理的效率。

本文介绍了一个基于FPGA的实时图像边缘检测系统。本篇重点介绍灰度转换、高斯滤波、Sobel边缘检测等经典数字图像处理算法的原理;分析了OV5640摄像头的时序;SDRAM芯片工作原理及乒乓缓存原理。下篇主要介绍图像处理算法的实现;OV5640摄像头驱动模块的设计;SDRAM控制器的设计;相关模块的仿真和板级验证。

一。 数字图像处理算法原理

01

灰度转换

RGB颜色模型是由红(Red)、绿(Green)、蓝(Blue)三种基色以不同的比例叠加而成;而且每个像素分量(R、G、B)的值分布在0—255范围内,三种基色以不同的比例混合,能够显示出2563种颜色。

以RGB888格式的真彩色图像为例,表示1个像素点需要24bit二进制数据,在后续做Sobel运算时,计算量较大,所以为了简化后续计算,将摄像头采集的RGB565格式的彩色图像转化为1bit表示的二值图像,而后通过Sobel算子检测图像像素的梯度提取出图像的边缘点。对于彩色图像的二值化一般分为两个步骤:先将彩色图像进行灰度化得到灰度图像,然后对灰度图像进行二值化得到二值图像。

对于彩色图像转化为灰度图像,有一个著名的色彩心理学公式,即:

poYBAGJaNoaARFEcAAAe46DRwxI969.png

实际上,上述公式是一个加权求和的过程。但是在实际应用时,由于FPGA希望避免复杂的浮点运算,所以这里我们采用整数运算。将R、G、B三个分量对应的系数放大256倍得到整数结果:

pYYBAGJaNpCAKeyGAABDqSoopEk121.png

在灰度转换过程中,可能会因为取整操作引入噪声,所以接下来使用高斯滤波算法来去除灰度转化过程中引入的噪声。

02

高斯滤波

在对图像进行误差评估时,往往认为传感器引入的噪声、灰度化处理引入的噪声都是服从正态分布(高斯白噪声),这时使用高斯滤波器就可以很好地消除高斯噪声。高斯滤波本质上是一种线性平滑滤波,即对整幅图像进行加权平均的过程,每一个像素点的值都是由其本身和邻域内的其他像素点加权平均后得到的。

高斯滤波的具体操作是使用一个N*N卷积模板对整幅图像扫描,用模板确定的邻域内的像素加权平均值代替模板中心像素点的值。本文使用的3*3卷积模板如下:

poYBAGJaOI6Ae3e-AAASEUuB7bo643.png

高斯滤波可以表达为:

poYBAGJaOJqANinFAABIhWk5nOA480.png

其中,I(x,y)表示原图像中坐标为(x,y)的像素值;G(x,y)表示高斯滤波之后的值。这里为了计算方便,选取的模板H的权重系数都是2的系数。模板中心的权值最大,这样有利于克服边界效应,避免经过高斯滤波之后图像模糊。

03

二值化处理

在图像处理中,二值化的作用是把灰度图像的像素值设置为0或者255,即纯黑或者纯白。通过二值图像,能更好地分析物体的形状和轮廓,有利于后续使用Sobel算子检测图像的边缘。二值化有多种方法,其中最常用的就是采用阈值法进行二值化,根据阈值选取方式不同,又可以分为全局阈值法与局部阈值法。本文选用全局阈值法,即人为设定一个固定的阈值。

04

Sobel边缘检测

Sobel算子主要用于检测图像边缘,在物体的边缘通常都有像素的变化,反映了物体与背景之间的差异,或者两个物体之间的差异。它是一个离散差分算子,用来计算像素点上下、左右领域内像素点的加权差,根据在边缘处达到极值来检测边缘。另外,Sobel算子对噪声也有一定的平滑作用,检测出精确的边缘信息,但是边缘定位精度不高。

Sobel算子在水平方向和垂直方向各采用一个模板,检测各方向上的边缘,其优点是计算简单,速度快;但是对于纹理较为复杂的图像,检测效果不理想。水平方向模板Sx和垂直方向模板Sy如下:

pYYBAGJaOKuAAJXxAAAaWNGAgyo425.png

将两个算子与图像做平面卷积,即可得到水平方向与垂直方向的梯度值;若以I表示图像矩阵,Gx表示水平方向图像梯度值,Gy表示垂直方向的梯度值,则Gx与Gy可以表示如下:

poYBAGJaOLeAQEnDAABnD0PmYJw643.png

其中,I(x,y)表示模板掩盖的3*3图像中心的像素点。最终,图像中每个像素点对应的梯度值按照以下公式计算:

pYYBAGJaOMiAU02AAAAPp3SJ74Y576.png

通常为了简化计算,会使用以下公式近似:

pYYBAGJaONKAHiCCAAANsnjuBLQ577.png

二。 OV5640摄像头介绍

摄像头按输出信号的类型可以分为数字摄像头和模拟摄像头,按照摄像头图像传感器材料构成可以分为CCD和CMOS。现在智能手机的摄像头绝大部分都是CMOS类型的数字摄像头。

OV564是一款CMOS类型数字图像传感器,该传感器支持输出最大为500万像素的图像 (2592x1944分辨率),支持使用VGA时序输出图像数据,输出图像的数据格式支持YUV(422/420)、YCbCr422、RGB565以及JPEG格式。它还可以对采集得的图像进行补偿,支持伽玛曲线、白平衡、饱和度、色度等基础处理。根据不同的分辨率配置,传感器输出图像数据的帧率从15-60帧可调。其内部有许多寄存器,用来配置摄像头的工作方式、图像格式等等;在实际应用时需要先使用SCCB协议或者是I2C协议配置寄存器,使摄像头按照常见的VGA时序输出图像数据。这里不对SCCB和VGA协议详细介绍。在本次设计中,使用I2C协议配置摄像头,并将OV5640分辨率配置为720P、数据格式为RGB565输出。

三。 SDRAM介绍

在图像处理系统中,需要对图像视频数据进行缓存,所以需要大容量存储器。SDRAM(Synchronous Dynamic Random Access Memory,即同步动态随机存取存储器)有价格优廉、容量大等优点,常作为FPGA的外挂存储器。同步是指其工作需要同步时钟,命令的发送与数据的传输都以时钟为基准;动态是指存储阵列需要不断的刷新来保证电容存储体中的数据不丢失;随机是指数据可以自由指定地址进行数据读写。本次设计中,使用的SDRAM芯片型号为:HY57V2562GTR,容量为256Mbit,数据位宽为16bit,最大工作频率为133MHz。

乒乓缓存是一种常用的双缓存机制,尤其是在图像处理中进行大量数据处理时,为了保证系统的吞吐量,使用两个缓存来存储数据;一个缓存用来保存旧的数据供图像处理模块读取,与此同时,另一个缓存保存图像采集模块产生的新数据;同时以包文的格式对数据进行缓存,有利于保证视频图像数据帧的完整性。

本次设计使用SDRAM的两个Bank来实现乒乓缓存,当向Bank0缓存数据时,从Bank3读数据,直到向Bank0写完一帧数据,且从Bank3读完一帧数据时,才切换Bank;当向Bank3缓存数据时,从Bank0读数据,直到向Bank3写完一帧数据,且从Bank0读完一帧数据时,才切换Bank。通过两个Bank循环读写即可实现数据的无缝缓冲与处理。在实际设计中对数据进行了丢帧处理,如果在不允许丢帧的情况下,可以对每个Bank缓存多帧数据。

poYBAGJaOOqAbkzvAABJalL2-9Q444.png

乒乓缓存示意图

至此,本文主要对图像处理中的几种经典算法的原理进行了简要介绍,并介绍了我们使用的图像采集传感器OV5640摄像头、SDRAM存储器的一些特性。下一篇文章我们将继续讲述:几种算法的Verilog实现方案、摄像头传感器的配置与数据采集模块的设计方案、SDRAM芯片的控制器设计方案。

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

    关注

    2526

    文章

    48110

    浏览量

    740122
  • FPGA
    +关注

    关注

    1603

    文章

    21326

    浏览量

    593233
  • 存储器
    +关注

    关注

    38

    文章

    7151

    浏览量

    162001
  • 边缘检测
    +关注

    关注

    0

    文章

    91

    浏览量

    18105
收藏 人收藏

    评论

    相关推荐

    基于FPGA的嵌入式图像边缘检测系统设计

    本帖最后由 mingzhezhang 于 2012-5-23 19:28 编辑 为了提高数字图像的处理速度,提出了用FPGA来设计嵌入式sobel边缘检测
    发表于 05-23 19:16

    基于FPGA的数字图像处理中的边缘检测系统

    `基于FPGA的数字图像处理领域的边缘检测系统。该系统实现了从24位真彩色图片的存储到VGA显示
    发表于 06-26 13:36

    基于FPGA边缘检测和Sobel算法

    转帖摘要: 针对嵌入式软件无法满足数字图像实时处理速度问题,提出用硬件加速器的思想,通过FPGA实现Sobel边缘检测算法。通过乒乓操作、并
    发表于 11-29 08:57

    基于FPGA的视频实时边缘检测系统该怎么设计?

    。基于DSP方式在运算速度、数据吞吐量等方面有限制。本设计基于FPGA实现,边缘检测采用流水线结构。实验结果表明,该系统十分适合视频数据的处理。
    发表于 09-24 06:55

    怎样去设计基于FPGA实时图像边缘检测系统

    今天给大侠带来基于FPGA实时图像边缘检测系统设计,由于篇幅较长,分三篇。今天带来第二篇,中篇
    发表于 07-28 06:06

    怎样去设计一种基于FPGA实时图像边缘检测系统

    FPGA是如何实现图像边缘检测的?怎样去设计一种基于FPGA实时
    发表于 10-19 10:10

    基于FPGA实时图像边缘检测系统设计(附代码)

    今天给大侠带来基于FPGA实时图像边缘检测系统设计,由于篇幅较长,分三篇。今天带来第一篇,上篇
    发表于 06-21 18:47

    基于FPGA图像边缘检测

    基于FPGA图像边缘检测 引言     图像边缘
    发表于 01-14 11:07 1734次阅读
    基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>图像</b><b class='flag-5'>边缘</b><b class='flag-5'>检测</b>

    Prewitt图像边缘检测边缘细化的FPGA实现

    摘要! 针对实时图像处理的要求! 使用FPGA图像数据流进行在线PREWITT边缘检测 针对传
    发表于 03-29 16:30 46次下载
    Prewitt<b class='flag-5'>图像</b><b class='flag-5'>边缘</b><b class='flag-5'>检测</b>及<b class='flag-5'>边缘</b>细化的<b class='flag-5'>FPGA</b>实现

    实时图像边缘检测的设计及FPGA实现

    文中将FPGA应用于实时图像边缘检测系统,从而实现动态实时
    发表于 12-22 17:06 39次下载
    <b class='flag-5'>实时</b><b class='flag-5'>图像</b><b class='flag-5'>边缘</b><b class='flag-5'>检测</b>的设计及<b class='flag-5'>FPGA</b>实现

    数字图像边缘检测FPGA实现

    数字图像边缘检测FPGA实现......
    发表于 01-04 15:31 18次下载

    基于FPGA实时图像边缘检测系统设计

    算法得以实现。 本篇阐述了基于FPGA设计一个能够实时采集、实时处理并实时显示的数字图像处理系统
    的头像 发表于 06-30 09:49 1973次阅读

    FPGA设计中 Verilog HDL实现基本的图像滤波处理仿真

    参考。 《冈萨雷斯数字图像处理MATLAB版》中文版(第二版) 电子版 荐读:FPGA设计经验之图像处理 基于FPGA实时
    的头像 发表于 07-13 09:30 2516次阅读

    基于FPGA实时图像边缘检测系统的实现

    上篇我们介绍了相关的算法原理以及外设特性,本篇我们将介绍一下基于FPGA实时图像边缘检测系统
    的头像 发表于 04-21 10:56 2131次阅读
    基于<b class='flag-5'>FPGA</b><b class='flag-5'>实时</b><b class='flag-5'>图像</b><b class='flag-5'>边缘</b><b class='flag-5'>检测</b><b class='flag-5'>系统</b>的实现

    基于FPGA实时图像边缘检测系统设计(附代码)

    在本系统设计过程中,我以自顶向下的层次化设计思想为主进行系统的顶层架构设计,明确各模块的功能以及各模块之间的握手关系,之后分模块编写代码并加以验证,调试代码使得各模块功能得以实现,最后基于顶层模块
    的头像 发表于 11-03 10:42 1212次阅读