基于FPGA的图像sobel边缘提取算法开发,包括tb测试文件以及matlab验证代码

简介: 基于FPGA的图像sobel边缘提取算法开发,包括tb测试文件以及matlab验证代码

1.算法运行效果图预览

8d730bb53e9775c9784004408438039a_82780907_202311091606520589716057_Expires=1699517812&Signature=Rts5lpqW0z2fp5BFApzRs9YdHFc%3D&domain=8.jpeg
633bdb1557ea91b38cdeb30a0b7a2e25_82780907_202311091606520745366497_Expires=1699517812&Signature=nYGsvkCf13zsBzS1RxgMMGgUXh4%3D&domain=8.jpeg

2.算法运行软件版本
vivado2019.2

matlab2022a

3.算法理论概述
图像边缘检测大幅度地减少了数据量,并且剔除了可以认为不相关的信息,保留了图像重要的结构属性。有许多方法用于边缘检测,它们的绝大部分可以划分为两类:基于查找一类和基于零穿越的一类。基于查找的方法通过寻找图像一阶导数中的最大和最小值来检测边界,通常是将边界定位在梯度最大的方向。基于零穿越的方法通过寻找图像二阶导数零穿越来寻找边界,通常是Laplacian过零点或者非线性差分表示的过零点。

   Soble边缘检测算法比较简,实际应用中效率比canny边缘检测效率要高,但是边缘不如Canny检测的准确,但是很多实际应用的场合,sobel边缘却是首选,尤其是对效率要求较高,而对细纹理不太关心的时候。Soble边缘检测通常带有方向性,可以只检测竖直边缘或垂直边缘或都检测。所以我们先定义两个梯度方向的系数:

90dd58e0537bdf759fcb8516e8bfa017_82780907_202311091608110838972802_Expires=1699517891&Signature=U45tpbfDM8OiHLlfjR4m%2FNzCI0Y%3D&domain=8.png

    然后我们来计算梯度图像,我们知道边缘点其实就是图像中灰度跳变剧烈的点,所以先计算梯度图像,然后将梯度图像中较亮的那一部分提取出来就是简单的边缘部分。

    Sobel算子用了一个3*3的滤波器来对图像进行滤波从而得到梯度图像,这里面不再详细描述怎样进行滤波及它们的意义等。

竖起方向的滤波器:y_mask=op = [-1 -2 -1;0 0 0;1 2 1]/8;

水平方向的滤波器:op的转置:x_mask=op’;

定义好滤波器后,我们就开始分别求垂直和竖起方向上的梯度图像。用滤波器与图像进行卷积即可:

bx = abs(filter2(x_mask,a));
by = abs(filter2(y_mask,a));

上面bx为水平方向上的梯度图像,by为垂直方向上的梯度图像。为了更清楚的说明算法过程,下面给出一张示例图像的梯度图像。

4.部分核心程序
````timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date: 2023/07/31
// Design Name:
// Module Name: sobel
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//

module tops(
input i_clk,
input i_rst,
input[7:0]i_I,
output reg[7:0]o_sobel
);

parameter LEN = 256;
parameter th = 255;

........................................................

reg signed[10:0]x1;
reg signed[10:0]x2;

reg signed[10:0]y1;
reg signed[10:0]y2;

reg signed[11:0]x12;
reg signed[11:0]y12;

reg signed[11:0]x;
reg signed[11:0]y
;

reg signed[12:0]edge_;

always @(posedge i_clk or posedge i_rst)
begin
if(i_rst)
begin
x1 <=11'd0;
x2 <=11'd0;

 y1 <=11'd0;
 y2 <=11'd0;

 x12<=12'd0;
 y12<=12'd0;

 x_<=11'd0;
 y_<=11'd0;

 edge_ <=13'd0;
 end

else begin
.........................................................

 edge_<= x_ +  y_;  // 计算Sobel算子响应的绝对值和
 end

end

always @(posedge i_clk or posedge i_rst)
begin
if(i_rst)
begin
o_sobel <= 8'd0;
end
else begin

      if(edge_>=th) //判断绝对值和是否大于阈值
      o_sobel <= 8'd255;
      else
      o_sobel <= 8'd0; 

 end

end

endmodule

```

相关文章
|
9天前
|
机器学习/深度学习 算法 异构计算
m基于FPGA的多通道FIR滤波器verilog实现,包含testbench测试文件
本文介绍了使用VIVADO 2019.2仿真的多通道FIR滤波器设计。展示了系统RTL结构图,并简述了FIR滤波器的基本理论,包括单通道和多通道的概念、常见结构及设计方法,如窗函数法、频率采样法、优化算法和机器学习方法。此外,还提供了Verilog核心程序代码,用于实现4通道滤波器模块,包含时钟、复位信号及输入输出接口的定义。
28 7
|
1天前
|
算法 TensorFlow 算法框架/工具
基于直方图的图像阈值计算和分割算法FPGA实现,包含tb测试文件和MATLAB辅助验证
这是一个关于图像处理的算法实现摘要,主要包括四部分:展示了四张算法运行的效果图;提到了使用的软件版本为VIVADO 2019.2和matlab 2022a;介绍了算法理论,即基于直方图的图像阈值分割,通过灰度直方图分布选取阈值来区分图像区域;并提供了部分Verilog代码,该代码读取图像数据,进行处理,并输出结果到&quot;result.txt&quot;以供MATLAB显示图像分割效果。
|
6天前
|
算法 计算机视觉 异构计算
基于FPGA的图像累积直方图verilog实现,包含tb测试文件和MATLAB辅助验证
该内容展示了FPGA实现图像累积直方图的算法。使用Vivado2019.2和matlab2022a,通过FPGA的并行处理能力优化图像处理。算法基于像素值累加分布,计算图像中像素值小于等于特定值的像素个数。核心代码为`test_image`模块,读取二进制图像文件并传递给`im_hist`单元,生成直方图和累积直方图。
|
15天前
|
算法 计算机视觉 异构计算
基于直方图相似性的图像分类算法FPGA实现,包括tb测试文件和MATLAB辅助验证
该内容包含了一段关于图像处理算法的摘要,主要包括: 1. 展示了MATLAB和FPGA的测试结果图像,显示了图像读取完成的标志和相似性指标,其中图1与图2有较强相似性,图1与图3相似性较弱。 2. 算法使用的是vivado 2019.2和matlab 2022A版本。 3. 算法原理涉及图像直方图统计和直方图相似性度量,通过计算直方图的差异来衡量图像相似度,FPGA实现包括图像采集、直方图计算、比较和分类决策步骤。 4. 提供了一个部分核心Verilog程序,用于读取图像数据并在FPGA上进行直方图相似性计算。
|
21天前
|
测试技术 C语言
网站压力测试工具Siege图文详解
网站压力测试工具Siege图文详解
27 0
|
2月前
|
JavaScript jenkins 测试技术
这10款性能测试工具,收藏起来,测试人的工具箱!
这10款性能测试工具,收藏起来,测试人的工具箱!
|
2月前
|
测试技术
现代软件测试中的自动化工具与挑战
传统软件测试面临着越来越复杂的系统架构和不断增长的测试需求,自动化测试工具应运而生。本文将探讨现代软件测试中自动化工具的应用和挑战,深入分析其优势与局限性,为软件测试领域的发展提供思路和启示。
|
2月前
|
测试技术 持续交付
现代软件测试中的自动化工具应用与挑战
随着信息技术的快速发展,软件行业对于质量和效率的要求日益提高,自动化测试工具在软件开发过程中扮演着至关重要的角色。本文将探讨现代软件测试中自动化工具的应用现状以及所面临的挑战,旨在帮助开发人员更好地理解并充分利用这一技术手段。
|
3天前
|
机器学习/深度学习 数据采集 人工智能
【专栏】利用AI辅助工具提高软件测试效率与准确性
【4月更文挑战第27天】本文探讨了AI在软件测试中的应用,如自动执行测试用例、识别缺陷和优化测试设计。AI辅助工具利用机器学习、自然语言处理和图像识别提高效率,但面临数据质量、模型解释性、维护更新及安全性挑战。未来,AI将更注重用户体验,提升透明度,并在保护隐私的同时,通过联邦学习等技术共享知识。AI在软件测试领域的前景广阔,但需解决现有挑战。
|
2月前
|
jenkins 测试技术 持续交付
现代软件测试中的自动化工具与挑战
随着软件开发领域的不断发展,自动化测试工具在测试过程中扮演着越来越重要的角色。本文将探讨现代软件测试中自动化工具的应用及面临的挑战,旨在帮助开发人员和测试人员更好地理解和应对自动化测试中的问题。