FPGA实现sobel边缘检测并Modelsim仿真,与MATLAB实现效果对比
文章目录
- 一、sobel边缘检测算法
- 1.1 初识sobel边缘检测
- 1.2 sobel原理
- 1.3 应用
- 二、matlab实现sobel边缘检测
- 三、FPGA实现sobel边缘检测
- 3.1 3*3窗口生成
- 3.2 sobel算法模块
- 四、modelsim仿真
- 五、效果对比
基于均值、中值和高斯滤波等的实现,本文对sobel边缘检测进行实现。
一、sobel边缘检测算法
1.1 初识sobel边缘检测
边缘检测是特征提取中的一个研究领域,它能边缘检测出数字图像中亮度变化明显的点,减少数据量,并剔除不相关的信息,最终保留图像重要的结构属性。常用的边缘检测模板有Laplacian算子、Roberts算子、Sobel算子等。本文介绍Sobel算子。同时,Sobel 边缘检测通常带有方向性,可以只检测竖直边缘或垂直边缘或都检测。
1.2 sobel原理
1、Sobel 提供了x水平和y垂直两个方向的滤波模板。
采用上面模板对原图像A进行卷积,其中 Gx 为水平横向梯度幅值,Gy为垂直方向梯度幅值。(梯度:灰度值的变化情况,梯度幅值相当于2个相邻像素灰度值之间的差异。)
2、由Gx和Gy,计算该点的梯度幅值,公式如下:
由于公式涉及到开方运算,我们可调用IP核,也可对公式进行近似简化,以提高运算效率:
梯度方向的计算:
3、设置阈值,大于阈值的梯度值G设置黑色,也就是边缘点。(因为梯度值越大,说明变化越快)
1.3 应用
sobel边缘检测算法可在SIFT特征提取中使用。因为SIFT提取的特征点中含有边缘点,存在边缘响应的问题(不稳定的边缘点),我们即可在设置阈值,将不稳点边缘点剔除。
二、matlab实现sobel边缘检测
设置阈值:120;
clc;
clear all;
close all;RGB = imread('flower.bmp'); %读取图片
gray = double(rgb2gray(RGB)); %灰度图[ROW,COL, DIM] = size(gray); %得到图像行列数
value = 120; %阈值设置
Sobel_img = zeros(ROW,COL);for r = 2:ROW-1for c = 2:COL-1Gx = gray(r-1,c+1) + 2*gray(r,c+1) + gray(r+1,c+1) - gray(r-1,c-1) - 2*gray(r,c-1) - gray(r+1,c-1);Gy = gray(r-1,c-1) + 2*gray(r-1,c) + gray(r-1,c+1) - gray(r+1,c-1) - 2*gray(r+1,c) - gray(r+1,c+1);G = abs(Gx) + abs(Gy);%G = sqrt(Gx^2 + Gy^2);if(G > value)Sobel_img(r,c)=0;elseSobel_img(r,c)=255;endend
endsubplot(2,2,1); imshow(RGB); title('原图');
subplot(2,2,2); imshow(gray/256);title('原图');
subplot(2,2,3); imshow(Sobel_img);title('Sobel');imwrite(gray/256,'灰度图.bmp');
imwrite(Sobel_img,'sobel.bmp');
运行结果:
三、FPGA实现sobel边缘检测
注意:加入value信号,进行阈值比较。
3.1 3*3窗口生成
同高斯滤波,由于sobel边缘检测仍是33卷积运算,因此我们要生成33窗口。
3.2 sobel算法模块
流水并行处理:
第一级流水线并行:计算Gx模板左右列乘积和,计算Gy模板上下行乘积和
第二级流水并行:计算|Gx|和|Gy|——注意正负数的处理
第三级流水线:计算梯度幅值(绝对值之和),得到最终的G= |Gx| + |Gy|
组合逻辑:阈值比较(二值化)
verilog代码如下:
module sobel(input clk,input rst_n,input [7:0] value,input iValid,input [7:0] sobel_11,sobel_12,sobel_13, //生成的3*3窗口数据input [7:0] sobel_21,sobel_22,sobel_23,input [7:0] sobel_31,sobel_32,sobel_33,output sobel_de ,//de同步信号output wire [7:0] sobel_data // sobel算子:加权平均后的值);reg [2:0] de_shift1 ; reg [9:0] Gx1, Gx2 ,Gy1 ,Gy2 ,Gx,Gy;
reg [10:0] G;
reg [7:0] sodel;//---------------------------------------------------
// sobel三级流水线
//---------------------------------------------------//clk1,计算Gx模板左右列乘积和,计算Gy模板上下行乘积和always @ (posedge clk or negedge rst_n)if(!rst_n) beginGx1 <= 1'b0;Gx2 <= 1'b0;Gy1 <= 1'b0;Gy2 <= 1'b0;endelse beginGx1 <= sobel_11 + (sobel_21 << 1) + sobel_31 ;Gx2 <= sobel_13 + (sobel_23 << 1) + sobel_33 ;Gy1 <= sobel_11 + (sobel_12 << 1) + sobel_13 ;Gy2 <= sobel_31 + (sobel_32 << 1) + sobel_33 ;end//clk2,计算 |Gx|和|Gy|,正负号的处理要注意
always @ (posedge clk or negedge rst_n)if(!rst_n) beginGx <= 1'b0;Gy <= 1'b0;endelse beginGx = (Gx1 > Gx2) ? (Gx1 - Gx2) : (Gx2 - Gx1) ;Gy = (Gy1 > Gy2) ? (Gy1 - Gy2) : (Gy2 - Gy1) ;end// clk3,计算G = |Gx|+|Gy|梯度幅值always @(posedge clk or negedge rst_n) beginif(!rst_n) beginG <= 1'd0;endelse beginG <= Gx + Gy ;end
end// 阈值比较
always @(*)if(G > value)sodel <= 8'b0;elsesodel <= 8'd255;assign sobel_data = sodel;// 打拍做同步
always @(posedge clk or negedge rst_n) beginif(!rst_n)beginde_shift1 <= 3'b0;endelse beginde_shift1 <= {de_shift1[1:0], iValid};endendassign sobel_de = de_shift1[2];endmodule
四、modelsim仿真
阈值设为120
// 实例化
sobel_top sobel_top(.clk (clk),.rst_n (rst_n),.iValid (iValid),.iData (gray),.value (8'd120),.oValid (oValid),.oData (oData)
);
波形和高斯滤波等分析方式相同。
五、效果对比
原图:
Matlab实现sobel边缘检测:
FPGA实现sobel边缘检测:
FPGA实现sobel边缘检测并Modelsim仿真,与MATLAB实现效果对比相关推荐
- 基于fpga的sobel边缘检测
基于fpga的sobel边缘检测,部分的代码参考的是野火正点原子的代码和视频.通过matlab将图片转成txt文件,并编写verilog代码将处理好的数据再转成txt文件,同时通过matlab将txt ...
- FPGA实现Sobel边缘检测学习心得
参照了野火的教程学习了Sobel边缘检测,记录过程中的思考与问题. 工程目标是由串口传入图像数据,FPGA边缘检测后,将图像经过串口传回电脑.内容涉及RS232串口协议.FIFO卷积求和. 目录 一. ...
- 基于FPGA简易电子琴设计+电路原理图+Modelsim 仿真+Quartus II 下载+源代码+激励文件
一.总体电路结构设计 五大模块 按键同步输入模块 编码频率控制模块 分频计数模块 译码模块 二分频(方波)模块 二.Modelsim 仿真 同步输入仿真波形:模拟按键输入 key[3:0],经过同步输 ...
- 国产紫光FPGA实现DDS信号发生器(ModelSim仿真)
简介 本文主要根据利用紫光同创软件联合ModelSim对DDS信号发生器进行仿真.前序步骤(DDS实现过程)见 国产紫光FPGA实现DDS信号发生器_窃听龙吟的博客-CSDN博客 该博客. 一.创建仿 ...
- Matlab与FPGA图像处理系列——基于FPGA的实时边缘检测系统设计,sobel边缘检测流水线实现
注:下载链接的资源是图片存 ROM 后读取进行 Sobel 检测显示在 VGA上,可供参考. 摘要:本文设计了一种基于 FPGA 的实时边缘检测系统,使用OV5640 摄像头模块获取实时的视频图像数据 ...
- Sobel边缘检测算法verilog实现及仿真
实验verilog语言对sobel边缘检测算法进行设计 实验modelsim仿真工具进行仿真,程序和仿真截图如下图所示: 1.程序截图: 2.仿真截图: module edge_judge ( clk ...
- FPGA设计——图像处理(Sobel边缘检测)
1. 概述 本设计采用FPGA技术,实现CMOS视频图像的边缘检测(sobel),并通过以太网传输(UDP方式)给PC实时显示. 2. 硬件系统框图 CMOS采用MT9V011(30万像素),FPGA ...
- modelsim仿真正确FPGA运行不正确的可能原因 - cm4写寄存器错
困住整整一周了,工作进行不下去,中午偶遇导师,指导意见是有两种可能: 1. FPGA编译器优化代码,可以考虑把综合过程中所有的warning排查一下 2. verilog里有不可综合的语句. 又及 ...
- FPGA配合debussy、modelsim仿真环境搭建
FPGA配合debussy.modelsim仿真环境搭建 一.软件环境搭建 1,modelsim. 2,debussy 二.工程环境搭建 1,生成testbench 2.生成.fsdb波形文件 第一步 ...
- FPGA开发技巧:Modelsim仿真.do文件详细解析 原创 特权同学
FPGA开发技巧:Modelsim仿真.do文件详细解析 原创 特权同学 FPGA快乐学习 以<FPGA边码边学 视频教程>"Lesson06 分频计数器设计"中的si ...
最新文章
- 网站seo不能错过这几点!
- js获取url中的参数值
- C++ Primer
- GO语言学习之路10
- spring+mybatis+log4j 输出SQL
- Android系统在新进程中启动自定义服务过程(startService)的原理分析
- linux之 sed命令
- linux 用户操作相关命令
- 中国互联网变天,小米上市后将彻底冲破 BAT 格局
- 【技巧记录】如何批量制作文件夹/文件夹名
- 微信的JS接口安全域名设置+tomcat服务器
- 201421410013 唐昭靖 作业1
- 快速排序深度优化详解
- Pytorch学习(二)—— nn模块
- 【本周Python热点回顾】画一棵漂亮的樱花树,Python3*和**运算符,Python入门,这就是Python3.8么,i了
- 婚恋网站能遇见幸福吗?2019互联网婚恋交友行业洞察
- 1个月错失百万,为什么还要感恩饿了么?
- maya渲染序列文件存在检测工具
- DTS 及其在PG 数据库生态中的应用
- java文字云_Canvas 3D球形文字云动画特效
热门文章
- 算法竞赛入门经典(刘汝佳)——常用STL数据结构总结
- Java界面设计GUI
- 基于vue的仿网易云音乐播放器
- Vercel部署网易云音乐api
- c语言考试程序设计题怎么给分,计算机程序设计C语言考试试卷及评分标准.doc
- 仿 qq音乐播放器 html代码,仿QQ音乐播放器
- 真么找计算机用户密码,如何查找电脑的用户名和密码
- linux手写软件,Linux 手写输入法
- 量子场论考试必会题目
- 京瓷2010打印机苹果电脑能用吗_MacOS(苹果电脑苹果系统)连接京瓷300i 打印机...