您当前的位置: 首页 >  算法

耐心的小黑

暂无认证

  • 0浏览

    0关注

    323博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

FPGA丨Sobel边沿检测算法实现

耐心的小黑 发布时间:2021-03-28 14:53:08 ,浏览量:0

参考:小梅哥的《FPGA系统设计与验证实战指南》

一、算法介绍

Sobel 算法是像素图像边缘检测中最重要的算子之一,在机器学习、数字媒体、计算机视觉等信息科技领域起着举足轻重的作用。在技术上,它是一个离散的一阶差分算子,用来计算图像亮度函数的一阶梯度之近似值。在图像的任何一点使用此算子,将会产生该点对应的梯度矢量或是其法矢量。

Sobel 边缘检测算法比较简单,实际应用中效率比 canny 边缘检测效率要高,但是边缘不如 Canny 检测的准确,但是很多实际应用的场合,sobel 边缘却是首选,尤其是对效率要求较高,而对细纹理不太关心的时候。

Sobel 边缘检测通常带有方向性,可以只检测竖直边缘或垂直边缘或都检测。

在这里插入图片描述 在这里插入图片描述

二、程序设计

关于如何形成3*3的像素矩阵,参考另一篇文章:FPGA丨设计行缓存(linebuffer)生成像素矩阵

module  sobel(
	 input clk, //pixel clk
	 input rst_n,
	 
	 input [15:0] THRESHOLD,
	 input [15:0]data_in, //16 bit 灰度 pixel 
	 input data_in_en,
	 
	 output reg [15:0] data_out,
	 output reg data_out_en
);
//------------------------------------
// 三行像素缓存
//----------------------------------- 
wire [15:0] line0;
wire [15:0] line1;
wire [15:0] line2;
//-----------------------------------------
//3x3 像素矩阵中的像素点
//-----------------------------------------
reg [15:0] line0_data0;
reg [15:0] line0_data1;
reg [15:0] line0_data2;
reg [15:0] line1_data0;
reg [15:0] line1_data1;
reg [15:0] line1_data2;
reg [15:0] line2_data0;
reg [15:0] line2_data1;
reg [15:0] line2_data2;
//-----------------------------------------
//定义gx和gy的正负项中间变量
//-----------------------------------------
reg [17:0] sum0_gx;
reg [17:0] sum1_gx;
reg [17:0] sum0_gy;
reg [17:0] sum1_gy;

wire [15:0] res_sqrt;
wire [17:0] sobel_gx 
wire [17:0] sobel_gy 

wire   mat_flag; 
reg    mat_flag_1; 
reg    mat_flag_2; 
reg    mat_flag_3; 
reg    mat_flag_4; 
reg    mat_flag_5; 
reg    mat_flag_6;
reg    mat_flag_7; //这里假设开方用的SQRT IP核输出和输入的延迟是一个clk

always @(posedge clk)begin
        mat_flag_1                      
关注
打赏
1640088279
查看更多评论
0.0423s