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


    目录

    1.算法运行效果图预览

    2.算法运行软件版本

    3.部分核心程序

    4.算法理论概述

    5.算法完整程序工程


    1.算法运行效果图预览

    2.算法运行软件版本

    vivado2019.2

    matlab2022a

    3.部分核心程序

    1. `timescale 1ns / 1ps
    2. //
    3. // Company:
    4. // Engineer:
    5. //
    6. // Create Date: 2023/07/31
    7. // Design Name:
    8. // Module Name: sobel
    9. // Project Name:
    10. // Target Devices:
    11. // Tool Versions:
    12. // Description:
    13. //
    14. // Dependencies:
    15. //
    16. // Revision:
    17. // Revision 0.01 - File Created
    18. // Additional Comments:
    19. //
    20. //
    21. module tops(
    22. input i_clk,
    23. input i_rst,
    24. input[7:0]i_I,
    25. output reg[7:0]o_sobel
    26. );
    27. parameter LEN = 256;
    28. parameter th = 255;
    29. ........................................................
    30. reg signed[10:0]x1;
    31. reg signed[10:0]x2;
    32. reg signed[10:0]y1;
    33. reg signed[10:0]y2;
    34. reg signed[11:0]x12;
    35. reg signed[11:0]y12;
    36. reg signed[11:0]x_;
    37. reg signed[11:0]y_;
    38. reg signed[12:0]edge_;
    39. always @(posedge i_clk or posedge i_rst)
    40. begin
    41. if(i_rst)
    42. begin
    43. x1 <=11'd0;
    44. x2 <=11'd0;
    45. y1 <=11'd0;
    46. y2 <=11'd0;
    47. x12<=12'd0;
    48. y12<=12'd0;
    49. x_<=11'd0;
    50. y_<=11'd0;
    51. edge_ <=13'd0;
    52. end
    53. else begin
    54. .........................................................
    55. edge_<= x_ + y_; // 计算Sobel算子响应的绝对值和
    56. end
    57. end
    58. always @(posedge i_clk or posedge i_rst)
    59. begin
    60. if(i_rst)
    61. begin
    62. o_sobel <= 8'd0;
    63. end
    64. else begin
    65. if(edge_>=th) //判断绝对值和是否大于阈值
    66. o_sobel <= 8'd255;
    67. else
    68. o_sobel <= 8'd0;
    69. end
    70. end
    71. endmodule
    72. 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

  • 相关阅读:
    ubuntu20.4 执行sudo apt-get update出现错误 libnettle.so.6 动态链接库错误
    2023版 STM32实战11 SPI总线读写W25Q
    Flutter 精品项目大全之 仿instagram项目支持横向和纵向滚动(教程含源码)
    敏捷开发工具:提升软件研发效率的重要利器
    《菜狗商城》Springboot+Vue电商项目
    Web前端开发——Ajax,Axios概述及在Vue框架中的使用
    基于springboot+vue的疫情期间外出务工人员信息管理系统
    初识计算机网络
    【我不熟悉的css 】02. 手动画一个svg图片
    MYSQL学习笔记2-mysql数据文件
  • 原文地址:https://blog.csdn.net/aycd1234/article/details/132587803