参考:小梅哥的《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
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?