FPGA图像处理入门 ZYNQ7020 sobel边缘检测


前言

通常来说,边缘是指图像中像素值有突变的地方,常用于图像的分割领域。
注意:后续技术分享,第一时间更新,以及缩放、白平衡及各种滤波算法完整代码,将在VX群发布,请添加VX:Zeus20010223

一、sobel是什么?

Sobel算子包含两组3 × 3 的矩阵,分别为横向和纵向模板,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。

检测水平方向 沿横向模板:
在这里插入图片描述
检测垂直方向 沿纵向的模板
在这里插入图片描述
图像的每一个像素的横向及纵向梯度近似值,可用以下的公式结合,来计算梯度的大小
在这里插入图片描述

二、FPGA实现

使用matrix产生3×3矩阵

matrix	#(
	.COL(COL),
    .ROW(ROW)
)
u1_matrix
(
	.clk		(clk		),
	.rst_n		(rst_n		),
	.data_de	(y_de		),
	.data		(y_data		),
	.matrix_de	(matrix_de	),
	.matrix11	(matrix11	),
	.matrix12   (matrix12	),
	.matrix13   (matrix13	),
	.matrix21   (matrix21	),
	.matrix22   (matrix22	),
	.matrix23   (matrix23	),
	.matrix31   (matrix31	),
	.matrix32   (matrix32	),
	.matrix33   (matrix33	)
);

按照sobel算子模版对矩阵进行乘法 消耗一个周期
再分别对两个算子的结果进行求和 消耗一个周期

always@(posedge clk)
	if(!rst_n)
		x_add_line <= 'd0;
	else if(matrix_de_r[0]==1'b1)
		x_add_line <= x_one_line+x_second_line+x_third_line;
	else	
		x_add_line <= 'd0;

对所求的和求绝对值 通过首位是否为1来判断 消耗一个周期
求平方 消耗一个周期
求平方和 消耗一个周期
调用ip核 求开方 通过仿真可知消耗17个周期

square_root u1_square_root (
  .aclk						(clk					),
  .aresetn					(rst_n					),
  .s_axis_cartesian_tvalid	(matrix_de_r[4]			),
  .s_axis_cartesian_tdata	(xy_add_line_2			),
  .m_axis_dout_tvalid		(square_de  			),
  .m_axis_dout_tdata		(square_data			) 
);

ip核配置
在这里插入图片描述

三、仿真验证

在这里插入图片描述
通过波形可以看出逻辑正确 按照周期来执行
在这里插入图片描述
左 matlab 右 fpga
通过结果比对 可知处理结果完全一致

四、总结

调用vivado ip 完成开方操作

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值