基于FPGA的Sobel边缘检测的实现

  前面我们实现了使用PC端上位机串口发送图像数据到VGA显示,通过MATLAB处理的图像数据直接是灰度图像,后面我们在此基础上修改,从而实现,基于FPGA的动态图片的Sobel边缘检测、中值滤波、Canny算子边缘检测、腐蚀和膨胀等。那么这篇文章我们将来实现基于FPGA的Sobel边缘检测。

图像边缘:简言之,边缘就是图像灰度值突变的地方,亦即图像在该部分的像素值变化速度非常之快,这就好比在坐标轴上一条曲线有刚开始的平滑突然来个大转弯,在变化出的导数非常大。

  Sobel算子主要用作边缘检测,在技术上,它是一离散型差分算子,用来计算图像亮度函数灰度之近似值。在图像的恩和一点使用此算子,将会产生对应的灰度矢量或是其法矢量。

  边缘是指其周围像素灰度急剧变化的那些像素的集合。边缘存在于目标、背景和区域之间,所以,他是图像分割所以来的最重要的依据。由于边缘是位置的标志,对灰度的变化不敏感,因此,边缘也是图像匹配的重要的特征。

Sobel边缘检测的核心在于像素矩阵的卷积,卷积对于数字图像处理非常重要,很多图像处理算法都是做卷积来实现的。卷积运算的本质就是对制定的图像区域的像素值进行加权求和的过程,其计算过程为图像区域中的每个像素值分别与卷积模板的每个元素对应相乘,将卷积的结果作求和运算,运算到的和就是卷积运算的结果。

卷积公式如下。

3x3的窗口M与卷积模板C的卷积运算如下。

Gx和Gy是sobel的卷积因子,将这两个因子和原始图像做如下卷积。如图3-22所示。

Sobel卷积因子

其中A代表原始图像。

得到图像中的每一个点的横向纵向灰度值Gx、Gy。最后通过如下公式来计算改点灰度的大小。

但是通常为了提高效率,使用不开平方的近似值,虽然这样做会损失精度,,

使用并行流水线的设计思想将Sobel算子的实现划分为五个步骤,加流水线后的计算可以将整个模块的计算提高5倍。

(1) 计算Gx与Gy与模板每行的乘积

(2) 两个3x3矩阵的卷积即将每一行每一列对应相乘然后想加

(3) 求得3*3模板运算后的Gx、Gy

(4) 求Gx^2 + Gy^2的结果,和Gx和Gy的平方和(需要消耗两个时钟)

(5) 求Gx^2 + Gy^2的平方根

边缘检测同样需要生成3x3矩阵而这与中值滤波和均值滤波中生成3X3矩阵的方法是完全一样的,3X3矩阵的生成方法可以参考前面的博客:最近发现Xilinx也有自己的Shift RAM,Shift_RAM简直就是为3X3矩阵而生的,所以这我使用Xilinx shift_RAM来实现3X3矩阵,配置如下:

这里Xilinx的shift_ram一次只能生成一行数据,所以我采用两个IP Core和正在输入的一行来生成三行数据

这是我设计的模块端口,clken为串口接收的完成标志信号,接收到的八位数据输入,最后经过Sobel算子计算完成后,将单bit数据通过位扩展为十六位输出。

生成3x3矩阵

Sobel算子与目标像素卷积

如图所示,用生成的3x3矩阵与Sobel算子进行卷积,最后求出目标像素当前的方向梯度

最终值输出

这里我们为了简化工程量,所以我们采取使用开平方根的近似值,取绝对值相加,虽然这样做会损失精度。

通过开平根的运算后,我们设置一个阈值,当该像素点的值小于阈值输出为0,当像素点的值大于阈值输出为1,最后将单bit的数据进行位扩充输出给VGA显示。显示视频效果图:http://t.cn/RN7tODe

最后我将阈值设置为150,最终测试lena图片显示如上,可以看出我们将属于lena边缘的部分显示为黑,其余部分显示为百,这样就可以很清楚的看到图像的边缘,这对后面我们要进行图像分割、识别打下了夯实的基础,这样看来我们的Sobel边缘检测是正确的,边缘捕捉的效果还是不错的呢!

最后基于FPGA的Sobel边缘检测源码博主在这里就不暂时不提供了,前面已经提供了三个算法的工程源码,基本图像处理算法的思路已经教给大家了,而且Sobel还是本科毕业设计的热门题目,这一套所持有的价值,我见过最便宜的是卖五百块人民币,所以如果大家能够自己调试出来那么你也就可以代人做毕业设计赚钱了,如果前面的那些基础课程大家都完全掌握了,这个Sobel边缘检测算法的思路我也已经提供了,那么我觉得肯定能通过自己的方法将Sobel调试出来,在学习的过程中欢迎和我一起讨论学习。下一篇呢,我会将中值滤波和Sobel边缘检测同时做在一起,图片进过中值滤波后再进行Sobel边缘检测。看看最后的边缘检测的效果会不会更好呢!

  如果你想获得本文的所有课件,请关注本人的个人微信订阅号:开源FPGANingHeChuan或扫描下方二维码关注订阅号,在后台回复图像处理,即可获得本文的所有课件、资料以及更多FPGA的学习资料哦!

转载请注明出处:NingHeChuan(宁河川)

个人微信订阅号:开源FPGANingHeChuan

如果你想及时收到个人撰写的博文推送,可以扫描左边二维码(或者长按识别二维码)关注个人微信订阅号

知乎ID:NingHeChuan

微博ID:NingHeChuan

原文地址:http://www.cnblogs.com/ninghechuan/p/7448924.html

图像处理系列文章

第一篇:基于FPGA的VGA显示静态图片

第二篇:基于FPGA的RGB565_YCbCr_Gray算法实现

第三篇:基于FPGA的Uart接收图像数据至VGA显示

番外篇:数字图像处理界标准图像 Lena 后面的故事

第四篇:基于FPGA的均值滤波算法实现

第五篇:深刻认识shift_ram IP core——图像处理学习笔记

第六篇:基于FPGA的中值滤波算法实现

时间: 2024-08-06 20:05:31

基于FPGA的Sobel边缘检测的实现的相关文章

基于 FPGA 的图像边缘检测

本文主要内容是实现图像的边缘检测功能 目录 mif文件的制作 调用 ip 核生成rom以及在 questasim 仿真注意问题 灰度处理 均值滤波 sobel边缘检测 图片的显示 结果展示 mif文件的制作 受资源限制,将图片像素定为 160 * 120,将图片数据制成 mif 文件,对 rom ip 核进行初始化.mif文件的制作方法网上有好多办法,因此就不再叙述了,重点说mif文件的格式. 1.mif文件的格式为: 1 WIDTH=16 ; //数据位宽 2 DEPTH=19200 ; //

基于FPGA的腐蚀膨胀算法实现

本篇文章我要写的是基于的腐蚀膨胀算法实现,腐蚀膨胀是形态学图像处理的基础,,腐蚀在二值图像的基础上做"收缩"或"细化"操作,膨胀在二值图像的基础上做"加长"或"变粗"的操作.那么什么是二值图像呢?把一幅图片看做成一个二维的数组,那么二值图像是一个只有0和1的逻辑数组,我们前面Sobel边缘检测后的图像输出边缘效果,设置个阈值,大于阈值输出为1,小于阈值输出为0,最后输出就是一幅二维图像了. 上一篇我是直接用MATLAB处理后的

基于FPGA的VGA显示静态图片

终于熬到暑假了,记过三四周的突击带考试,终于为我的大二画上了一个完整的句号,接下来终于可以静心去做自己想做的事情了,前一阵子报了一个线上培训班,学学Sobel边缘检测,之前一直在学习图像处理,但是因为一直看人家的代码,到后来难免有点空虚.所以说自己狠下心来,报了一个线上培训班,重新学习一下,自己设计Sobel边缘检测,势要摆脱抄别人代码的魔咒.所以这次图像显示部分和在彩色条纹中显示一副图片的代码,全部是我自己设计的,虽然不是什么大工程,但是还是满满的成就感,这次用的时间比较久,因为使用的是新板子

基于FPGA的均值滤波算法实现

我们为了实现动态图像的滤波算法,用串口发送图像数据到FPGA开发板,经FPGA进行图像处理算法后,动态显示到VGA显示屏上,前面我们把硬件平台已经搭建完成了,后面我们将利用这个硬件基础平台上来实现基于FPGA的一系列图像处理基础算法. 椒盐噪声(salt & pepper noise)是数字图像的一个常见噪声,所谓椒盐,椒就是黑,盐就是白,椒盐噪声就是在图像上随机出现黑色白色的像素.椒盐噪声是一种因为信号脉冲强度引起的噪声,产生清楚该噪声的算法也比较简单. 均值滤波的方法将数据存储成3x3的矩阵

基于FPGA的均值滤波算法的实现

前面实现了基于FPGA的彩色图像转灰度处理,减小了图像的体积,但是其中还是存在许多噪声,会影响图像的边缘检测,所以这一篇就要消除这些噪声,基于灰度图像进行图像的滤波处理,为图像的边缘检测做好夯实基础. 椒盐噪声(salt & pepper noise)是数字图像的一个常见噪声,所谓椒盐,椒就是黑,盐就是白,椒盐噪声就是在图像上随机出现黑色白色的像素.椒盐噪声是一种因为信号脉冲强度引起的噪声,产生该噪声的算法也比较简单. 均值滤波的方法将数据存储成3x3的矩阵,然后求这个矩阵.在图像上对目标像素给

Opencv图像识别从零到精通(19)----Robert,prewitt,Sobel边缘检测

图像的边缘检测,是根据灰度的突变或者说不连续来检测,对于其中的算子有一阶导数和二价导数,这里先说基础的三种方法---Robert,prewitt,Sobel边缘检测.  一.梯度 首先介绍下梯度,梯度并非是一个数值,梯度严格意义上是一个向量,这个向量指向当前位置变化最快的方向,可以这么理解,当你站在一个山上,你有360°的方向可以选择,哪个方向下降速度最快(最陡峭),便是梯度方向,梯度的长度,表示为向量的长度,表示最大的变化速率. 梯度的数学表达: 在二维中只取前两项,也就是由x方向的偏微分和y

基于FPGA的跨时钟域信号处理——亚稳态(V3-FPGA学院)

(V3-FPGA学院教你学习FPGA) 基于FPGA的跨时钟域信号处理--亚稳态 基于FPGA的跨时钟域信号处理--亚稳态 什么是亚稳态? 所有数字器件(例如FPGA)的信号传输都会有一定的时序要求,从而保证每 个寄存器将捕获的输入信号正确输出.为了确保可靠的操作,输入寄存器的信号必须在时钟沿的某段时间(寄存器的建立时间Tsu)之前保持稳定,并且持续到时钟沿之后的某段时间(寄存器的保持时间Th)之后才能改变.而该寄存器的输入反映到输出则需要经过一定的延时(时钟到输出的时间Tco).如果数据信号的

Sobel边缘检测算法(转载)

转载请注明出处:  http://blog.csdn.net/tianhai110 索贝尔算子(Sobel operator)主要用作边缘检测,在技术上,它是一离散性差分算子,用来运算图像亮度函数的灰度之近似值.在图像的任何一点使用此算子,将会产生对应的灰度矢量或是其法矢量 Sobel卷积因子为: 该算子包含两组3x3的矩阵,分别为横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值.如果以A代表原始图像,Gx及Gy分别代表经横向及纵向边缘检测的图像灰度值,其公式如下: 具体

基于FPGA的音频信号的FIR滤波(Matlab+Modelsim验证)

1 设计内容 本设计是基于FPGA的音频信号FIR低通滤波,根据要求,采用Matlab对WAV音频文件进行读取和添加噪声信号.FFT分析.FIR滤波处理,并分析滤波的效果.通过Matlab的分析验证滤波效果后,将叠加噪声信号的音频信号输出到txt文件里.然后使用Matlab语言编写滤波器模块和测试模块,通过Modelsim软件读取txt文件的数据,将数据送入滤波模块,最后将滤波的结果输出到txt文件里,最后用Matlab将处理的结果从txt文件读出.显示.FFT分析用Verilog设计的FIR滤