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

发布于:2025-08-12 ⋅ 阅读:(18) ⋅ 点赞:(0)

目录

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
); 
  
endmodule
0X2_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