> 技术文档 > 基于FPGA的图像sobel边缘提取算法Verilog开发与开发板硬件测试

基于FPGA的图像sobel边缘提取算法Verilog开发与开发板硬件测试

目录

1.前言

2.算法硬件测试效果图预览

3.算法运行软件版本

4.部分核心程序

5.算法仿真参数

7.硬件测试说明

8.算法理论概述

9.参考文献

10.算法完整程序工程


1.前言

       图像边缘检测大幅度地减少了数据量,并且剔除了可以认为不相关的信息,保留了图像重要的结构属性。在本课题中,将通过FPGA实现图像sobel边缘提取的硬件测试。

       本课题为之前博客中写的文章的硬件调试:

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

在仿真版本的基础上,我们增加了图像存储模块,HDMI接口模块,图像时序处理模块,rgb转dvi模块等。

2.算法硬件测试效果图预览

边缘提取效果:

3.算法运行软件版本

vivado2022.2

Matlab2022a/matlab2024b

4.部分核心程序

(完整版代码包含中文注释和操作步骤视频)

color_bar hdmi_color_bar(.clk(video_clk),.rst(1\'b0),.key(key),.hs(video_hs),.vs(video_vs),.de(video_de),.rgb_r(video_r),.rgb_g(video_g),.rgb_b(video_b)); video_clock video_clock_m0( // Clock in ports .clk_in1(sys_clk), // Clock out ports .clk_out1(video_clk), .clk_out2(video_clk_5x), // Status and control signals .reset(1\'b0), .locked() ); rgb2dvi_0 rgb2dvi_m0 (// DVI 1.0 TMDS video interface.TMDS_Clk_p(TMDS_clk_p),.TMDS_Clk_n(TMDS_clk_n),.TMDS_Data_p(TMDS_data_p),.TMDS_Data_n(TMDS_data_n),.oen(hdmi_oen),//Auxiliary signals .aRst_n(1\'b1), //-asynchronous reset; must be reset when RefClk is not within spec// Video in.vid_pData({video_r,video_g,video_b}),.vid_pVDE(video_de),.vid_pHSync(video_hs),.vid_pVSync(video_vs),.PixelClk(video_clk),.SerialClk(video_clk_5x)// 5x PixelClk); endmodule0X2_042m

5.算法仿真参数

parameter H_ACTIVE = 16\'d1280;  //horizontal active time (pixels)parameter H_FP = 16\'d110; //horizontal front porch (pixels)parameter H_SYNC = 16\'d40;  //horizontal sync time(pixels)parameter H_BP = 16\'d220; //horizontal back porch (pixels)parameter V_ACTIVE = 16\'d720; //vertical active Time (lines)parameter V_FP = 16\'d5;  //vertical front porch (lines)parameter V_SYNC = 16\'d5;  //vertical sync time (lines)parameter V_BP = 16\'d20; //vertical back porch (lines)parameter HS_POL = 1\'b1;  //horizontal sync polarity, 1 : POSITIVE,0 : NEGATIVE;parameter VS_POL = 1\'b1;  //vertical sync polarity, 1 : POSITIVE,0 : NEGATIVE;

7.硬件测试说明

具体的硬件操作步骤,可以参考作品中提供的视频步骤

如果不同开发板,系统的移植可以参考如下文章

不同FPGA开发板系统移植步骤-CSDN博客

8.算法理论概述

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

9.参考文献

[1]艾扬利,杨兵.基于FPGA的Sobel算子并行计算研究[J].现代电子技术, 2005, 28(9):2.DOI:10.3969/j.issn.1004-373X.2005.09.019.

[2]李明,赵勋杰,毛伟民.Sobel边缘检测的FPGA实现[J].现代电子技术, 2009, 32(16):44-44.DOI:JournalArticle/5af3bc88c095d718d810bc2d.

10.算法完整程序工程

OOOOO

OOO

O