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

目录

1.算法运行效果图预览

2.算法运行软件版本

3.部分核心程序

4.算法理论概述

5.算法完整程序工程


1.算法运行效果图预览

2.算法运行软件版本

vivado2019.2

matlab2022a

3.部分核心程序

复制代码
`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
0X_001m

4.算法理论概述

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

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

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

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为垂直方向上的梯度图像。为了更清楚的说明算法过程,下面给出一张示例图像的梯度图像。

5.算法完整程序工程

OOOOO

OOO

O

相关推荐
yingheceping5 小时前
复旦微FPGA开发板厂商TOP5甄选榜:2026选型参考
fpga开发·fpga
美狐美颜SDK开放平台7 小时前
开发直播APP、电商短视频与视频社交平台时,能否共用一套美颜SDK?
android·图像处理·人工智能·音视频·直播美颜sdk
Martina_03211 天前
AI生成的3D模型打印后沿层纹开裂?用6步检查方向、壁厚与填充
图像处理·人工智能·数学建模·3d·自然语言处理·游戏策划·1024程序员节
原子延迟1 天前
Smallpdf免费次数用完了(2026),4款工具避坑
图像处理·人工智能·计算机视觉
Solange__2 天前
物流园区怎么用AI生成3D调度预演?从道路底图、车辆转弯到网页评审
图像处理·人工智能·游戏·3d·ai·自然语言处理·关卡设计
zwc32104320552 天前
Day 5:threshold与inRange阈值分割
c++·图像处理·人工智能·opencv·算法·计算机视觉
楚山之石3 天前
【Lancet Neurology 】多发性硬化认知障碍的 SDMT 筛查、灰质萎缩标志与认知康复循证路径
图像处理·人工智能·学习·mri
FPGA小迷弟3 天前
FPGA 与卫星:从星载硬件到在轨智能的完整技术解析
fpga开发·架构·fpga·1024程序员节·无线电
TMedical4 天前
MedPlanning 截骨模拟矫形功能
c++·图像处理·人工智能·qt·健康医疗
Angeldream1234 天前
第 10 章 医学影像伦理与安全
图像处理·人工智能·python·安全·机器学习·医学影像