基于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

相关推荐
HugoStudio_SWAN1 天前
洛谷 P10719 \[GESP202406 五级] 黑白格——暴力美学与图像处理的最小外接矩形
c++·图像处理·人工智能·学习·程序人生·算法·目标跟踪
AndrewHZ1 天前
图像处理入门027 | 查找表(LUT)加速——把像素级操作从“每次算一遍“变成“只算 256 次“
图像处理·opencv·numpy·滤镜·查找表·lut
大熊背2 天前
基于 CFA 阵列特征的自适应去马赛克算法(二)
图像处理·人工智能·计算机视觉·插值·去马赛克
慧都小妮子2 天前
C# 工程图纸数字化入库实战:Aspose.Imaging 自动抠图、多页 TIFF 合卷与坏页容错
图像处理·c#·.net·aspose·tiff·归档·文档管理
AomanHao2 天前
【ISP】compression artifact压缩失真情况
图像处理·数码相机·isp·sensor·图像压缩·压缩失真
大熊背2 天前
ISPPipeline中的图像噪声问题解析
图像处理·人工智能·计算机视觉·去噪·isppipeline
拿我格子衫来2 天前
Beam Studio:矢量图与位图如何变成 G-code
图像处理·图形渲染
公爵爱学习2 天前
无人机定点飞行-介绍
开发语言·图像处理·python·学习·线性回归·无人机
Evand J3 天前
【MATLAB例程,图像滤波5】 反谐波均值滑动窗口滤波(CHMF)图像降噪与质量评价,附代码下载链接
图像处理·算法·计算机视觉·matlab·均值算法·滑动窗口滤波·均值滑动
PhotonixBay3 天前
3D共聚焦显微镜与探针式粗糙度仪:谁更适合亚表面损伤检测?
图像处理·人工智能·测试工具·3d