7.3*3卷积核生成

1.卷积核

  在数字图像处理中的各种边沿检测、滤波、腐蚀膨胀等操作都离不开卷积核的生成。下面介绍如何生成各种3X3的卷积核。为后面的数字图像操作打下基础。
  由于图像经过卷积操作后会减少两行两列,因此在生成卷积核的时候一般会对图像进行填充,填充的方式有加0,加1和复制边界三种方法。本文将会构建一个边沿复制的的卷积核模块,一个边沿填充0或者1的卷积核模块和一个边沿不填充的卷积核模块
在这里插入图片描述
在这里插入图片描述

2.边沿填充模式卷积核生成

2.1 边沿复制的卷积代码

  首先生成一个FWFT的FIFO模块,然后编写下面的卷积核模块

module 	matrix #(parameter 	COL 	= 	1920 	 	,parameter 	ROW 	= 	1080 	 	,parameter 	PADDING = 	0 			
)(input 	wire 			clk 		,input 	wire 			rst_n 		,input 	wire 	[7:0] 	data 		,input 	wire 	 		data_de 	,output 	wire  			matrix_de 	,output 	reg 	[7:0] 	matrix11 	,output 	reg 	[7:0] 	matrix12 	,output 	reg 	[7:0] 	matrix13 	,output 	reg 	[7:0] 	matrix21 	,output 	reg 	[7:0] 	matrix22 	,output 	reg 	[7:0] 	matrix23 	,output 	reg 	[7:0] 	matrix31 	,output 	reg 	[7:0] 	matrix32 	,output 	reg 	[7:0] 	matrix33 	
);reg 	[2:0] 	 data_de_r 	;
reg 	[7:0] 	 data_r1 	;
reg 	[7:0] 	 data_r2 	;reg 	[15:0] 	 col_cnt 	;
reg 	[15:0] 	 row_cnt 	;	reg 			data_valid 	;
reg 	[10:0]	data_valid_r;
reg 			fake_data_valid;wire 	[7:0] 	row1_data 	;
wire 	[7:0] 	row2_data 	;
reg 	[7:0] 	row3_data 	;always @(posedge clk )begindata_de_r <= {data_de_r[1:0],data_de};data_valid_r 	<= 	{data_valid_r[9:0],data_valid};data_r1 	<= 	data 		;data_r2 	<= 	data_r1 	;
end
wire 	pos_data_de;
assign 	pos_data_de = {data_de_r[0],data_de} == 2'b01;always @(posedge clk or negedge rst_n)beginif(rst_n == 0)begincol_cnt 	<= 0;endelse if(col_cnt == COL + 1)begincol_cnt 	<= 0;endelse if(data_valid || fake_data_valid)begincol_cnt 	<= col_cnt + 1;end
endalways @(posedge clk or negedge rst_n)beginif(rst_n == 0)beginrow_cnt 	<= 0;endelse if(col_cnt == COL + 1 && row_cnt == ROW )beginrow_cnt	 	<= 0;endelse if(col_cnt == COL + 1)beginrow_cnt 	<= row_cnt + 1;end
endalways @(posedge clk or negedge rst_n) beginif (rst_n == 0) begin		// resetfake_data_valid 	<= 0;endelse if (data_valid_r[4] == 0 && row_cnt == ROW && col_cnt <= COL  ) beginfake_data_valid 	<= 1;endelse beginfake_data_valid 	<= 	0;end
endalways @(posedge clk or negedge rst_n)beginif(rst_n == 0)beginrow3_data 	<= 0;endelse if(col_cnt == 0 && pos_data_de)beginrow3_data 	<= data ;endelse if(col_cnt == COL && data_de_r[1])beginrow3_data 	<= row3_data;endelse beginrow3_data 	<= data_r1;end
endalways@(posedge clk or negedge rst_n)beginif(rst_n == 0)begindata_valid <= 0;endelse if(data_de || data_de_r[1])begindata_valid <= 1'b1;endelse begindata_valid <= 1'b0;end
endwire 			rd_en 	;	fifo_matrix_buf u1_fifo_matrix_buf (.rst 		(!rst_n		),  .wr_clk 	(clk  	 	),  .rd_clk 	(clk 	 	),  .din 		(row2_data 	),  .wr_en 		(data_valid ),  .rd_en 		(rd_en 	 	),  .dout 		(row1_data 	),  .full 		( 	 		),  .empty 		( 	 		)   
);fifo_matrix_buf u2_fifo_matrix_buf (.rst 		(!rst_n		),  .wr_clk 	(clk  	 	),  .rd_clk 	(clk 	 	),  .din 		(row3_data 	),  .wr_en 		(data_valid ),  .rd_en 		(rd_en 		),  .dout 		(row2_data 	), .full 		(   		),  .empty 		(    		)   
);assign rd_en = (row_cnt > 0 & (data_valid | fake_data_valid) )? 1'b1 : 1'b0;always @(posedge clk or negedge rst_n)beginif(rst_n == 0)begin{matrix11,matrix12,matrix13} 	<= 	24'd0;{matrix21,matrix22,matrix23} 	<= 	24'd0;{matrix31,matrix32,matrix33} 	<= 	24'd0;endelse if(rd_en)beginif(row_cnt == 1)begin{matrix11,matrix12,matrix13} 	<= 	{matrix12,matrix13,row2_data};{matrix21,matrix22,matrix23} 	<= 	{matrix22,matrix23,row2_data};{matrix31,matrix32,matrix33} 	<= 	{matrix32,matrix33,row3_data};end	else if (row_cnt == ROW) begin{matrix11,matrix12,matrix13} 	<= 	{matrix12,matrix13,row1_data};{matrix21,matrix22,matrix23} 	<= 	{matrix22,matrix23,row2_data};{matrix31,matrix32,matrix33} 	<= 	{matrix32,matrix33,row2_data}; 			endelse begin{matrix11,matrix12,matrix13} 	<= 	{matrix12,matrix13,row1_data};{matrix21,matrix22,matrix23} 	<= 	{matrix22,matrix23,row2_data};{matrix31,matrix32,matrix33} 	<= 	{matrix32,matrix33,row3_data};end	endendreg 	[3:0] 	rd_en_r;
always @(posedge clk)beginrd_en_r 	<= 	{rd_en_r[2:0],rd_en};
endassign 	matrix_de 	= 	rd_en_r[2] & rd_en_r[0] ;endmodule 	

2.2 边沿填充的卷积核仿真代码

`timescale 1ns / 1psmodule img_gen
#(parameter 	ACTIVE_IW 	= 	1920 	,parameter 	ACTIVE_IH 	= 	1080 	,parameter 	TOTAL_IW 	= 	2200 	,parameter 	TOTAL_IH 	= 	1100 	,parameter 	H_START 	= 	100 	,parameter 	V_START 	= 	4 		 		
)(input 	wire 				clk 	,input 	wire 				rst_n 	,output 	reg 				vs 		,output 	reg  	 	 		de 		,output 	wire 	[7:0] 		data 	
);reg 	[15:0] 	hcnt 	;
reg 	[15:0] 	vcnt 	;reg 			h_de 	;
reg 			v_de  	;reg  			index_de 	;
reg 	[31:0] 	index 	 	;always @(posedge clk or negedge rst_n)if(!rst_n)hcnt <= 'd0;else if(hcnt == TOTAL_IW - 1)hcnt <= 'd0;else hcnt <= hcnt + 1'b1;always @(posedge clk or negedge rst_n)if(!rst_n)vcnt <= 'd0;else if(hcnt == TOTAL_IW - 1 && vcnt == TOTAL_IH - 1)vcnt <= 'd0;else if(hcnt == TOTAL_IW - 1)vcnt <= vcnt + 1'b1;else vcnt <= vcnt;always @(posedge clk or negedge rst_n)if(!rst_n)vs <= 'd0;else if(vcnt>=2)vs <= 1'b1;else vs <= 1'b0;always @(posedge clk or negedge rst_n)if(!rst_n)h_de <= 'd0;else if(hcnt >= H_START && hcnt < H_START + ACTIVE_IW)h_de <= 1'b1;else h_de <= 1'b0;always @(posedge clk or negedge rst_n)if(!rst_n)v_de <= 'd0;else if(vcnt >= V_START && vcnt < V_START + ACTIVE_IH)v_de <= 1'b1;else v_de <= 1'b0;always @(posedge clk or negedge rst_n)if(!rst_n)index_de <= 'd0;else if(h_de == 1'b1 && v_de == 1'b1)index_de <= 1'b1;else index_de <= 1'b0;always @(posedge clk or negedge rst_n)if(!rst_n)index <= 'd0;else if(index == ACTIVE_IW * ACTIVE_IH-1)index <= 0;else if(index_de == 1'b1)index <= index + 1;else index <= index;always @(posedge clk or negedge rst_n)if(!rst_n)de <= 'd0;else de <= index_de;
assign 	data 	= index;
endmodule
`timescale 1ns / 1psmodule tb_matrix();reg 	clk 	;
reg 	rst_n 	;wire 	[7:0] 	data 	;
wire 			de  	;wire 			vs  	;wire 	[7:0] 	matrix11; 	
wire 	[7:0] 	matrix12; 	
wire 	[7:0] 	matrix13; 	
wire 	[7:0] 	matrix21; 	
wire 	[7:0] 	matrix22; 	
wire 	[7:0] 	matrix23; 	
wire 	[7:0] 	matrix31; 	
wire 	[7:0] 	matrix32; 	
wire 	[7:0] 	matrix33; 	always #5 clk 	<= 	~clk;
initial 	beginclk 	<= 0;rst_n 	= 0;#2000rst_n 	= 1;
endimg_gen
#(.ACTIVE_IW 	(5 	),.ACTIVE_IH 	(5 	),.TOTAL_IW 	(11 	),.TOTAL_IH 	(11 	),.H_START 	(4 	 	),.V_START 	(4 	 	) 		
)u_img_gen(.clk 	 	(clk 	 	),.rst_n 	 	(rst_n 	 	),.vs 		(vs 		),.de 		(de 		),.data 	 	(data 	 	)
);matrix #(.COL(5),.ROW(5)
)u_matrix(.clk 	 	(clk 	 	),.rst_n 	 	(rst_n 	 	),.data 	 	(data 	 	),.data_de  	(de 	  	),.matrix11 	(matrix11 	),.matrix12 	(matrix12 	),.matrix13 	(matrix13 	),.matrix21 	(matrix21 	),.matrix22 	(matrix22 	),.matrix23 	(matrix23 	),.matrix31 	(matrix31 	),.matrix32 	(matrix32 	),.matrix33 	(matrix33 	)
);reg 	vs_r 	;always @(posedge clk)if(rst_n == 0)vs_r 	<= 1'b0;else vs_r 	<= vs;always @(posedge clk)if(~vs&&vs_r)$stop;
endmodule

2.3 边沿填充的卷积核仿真波形

  边沿复制后的数据为
在这里插入图片描述
  仿真波形为:
在这里插入图片描述
  可以看到3X3卷积模板生成无误。
  后面将边沿填充0和1以及无填充的三种方式一起讲解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/773317.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【CXL协议-ARB/MUX层(5)】

5.0 Compute Express Link ARB/MUX 前言&#xff1a; 在CXL协议中&#xff0c;ARB/MUX层&#xff08;Arbitration/Multiplexer layer&#xff09;是负责管理资源共享和数据通路选择的一层。CXL协议包含了几个子协议&#xff0c;主要有CXL.io、CXL.cache 和 CXL.memory。ARB/MU…

LeetCode 面试经典150题 383.赎金信

题目&#xff1a; 给你两个字符串&#xff1a;ransomNote 和 magazine &#xff0c;判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以&#xff0c;返回 true &#xff1b;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一次。 思路&#x…

计算机网络——数据链路层(差错控制)

计算机网络——数据链路层&#xff08;差错控制&#xff09; 差错从何而来数据链路层的差错控制检错编码奇偶校验码循环冗余校验&#xff08;CRC&#xff09;FCS 纠错编码海明码海明距离纠错流程确定校验码的位数r确定校验码和数据位置 求出校验码的值检错并纠错 我们今年天来继…

【Linux】-Linux下的编辑器Vim的模式命令大全及其自主配置方法

目录 1.简单了解vim 2.vim的模式 2.1命令模式 2.2插入模式 2.3底行模式 3.vim各模式下的命令集 3.1正常&#xff08;命令模式下&#xff09; 3.1.1光标定位命令 3.1.2 复制粘贴 3.1.3 删除 3.1.4 撤销 3.1.5大小写转换 3.1.6替换 「R」&#xff1a;替换光标所到之处的字符&…

ComfyUI SDWebUI升级pytorch随记

目前使用的版本是去年10月的1.6版本&#xff0c;有点老。希望支持新的特性&#xff0c;于是乎开始作死。从升级torch开始。先看看已有的版本&#xff1a; (venv) rootubuntu-sd-server:~# pip show torch Name: torch Version: 2.0.1 Summary: Tensors and Dynamic neural net…

【贪心]【字符串】【分类讨论】420 强密码检验器

本文涉及知识点 贪心 字符串 分类讨论 LeetCode420 强密码检验器 满足以下条件的密码被认为是强密码&#xff1a; 由至少 6 个&#xff0c;至多 20 个字符组成。 包含至少 一个小写 字母&#xff0c;至少 一个大写 字母&#xff0c;和至少 一个数字 。 不包含连续三个重复字…

Reactor 模式全解:实现非阻塞 I/O 多路复用

Reactor网络模式是什么&#xff1f; Reactor网络模式时目前网络最常用的网络模式。如果你使用Netty&#xff0c;那么你在使用Reactor;如果你使用Twisted,那么你子啊使用Reactor;如果你使用netpoll&#xff0c;那么你在使用Reactor。 这里先给出答案&#xff1a;Reactor I/O多…

204基于matlab的图像融合

基于matlab的图像融合&#xff0c;包括三种方式&#xff0c;加权、PCA、IHS变换。比较三者融合后的图像差异。程序已调通&#xff0c;可直接运行。 204 matlab 图像融合 信息融合 - 小红书 (xiaohongshu.com)

【二叉树】Leetcode 94. 二叉树的中序遍历【简单】

二叉树的中序遍历 给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,3,2] 解题思路 中序遍历是一种二叉树遍历方式&#xff0c;按照“左根右”的顺序遍历二叉树节点。 1、递归…

python 处理png图片无损压缩

代码利用了Pillow库来处理图片的压缩&#xff0c;并使用了 glob 模块来搜索所有的 .png 文件。这个脚本应该能够按照当前的编写来完成预期的工作。 请注意&#xff0c;compress_level9 指定了Pillow保存PNG图片时采用的最大压缩等级。这确保了每张图片都被以可能的最小文件大小…

【Spring】Spring框架中的一个核心接口ApplicationContext 简介,以及入口 Run() 的源码分析

一、简介 ApplicationContext 是Spring框架中的一个核心接口&#xff0c;它是Spring IoC容器的实现之一&#xff0c;用于管理和组织应用程序中的各种Bean&#xff0c;同时提供了一系列功能来支持依赖注入、AOP等特性。 简单来说&#xff0c;ApplicationContext 是一个大型的、…

求两个单链表的差集

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 但行前路&#xff0c;不负韶华&#…

发车,易安联签约某新能源汽车领军品牌,为科技创新保驾护航

近日&#xff0c;易安联成功签约某新能源汽车领军品牌&#xff0c;为其 数十万终端用户 建立一个全新的 安全、便捷、高效一体化的零信任终端安全办公平台。 随着新能源汽车行业的高速发展&#xff0c;战略布局的不断扩大&#xff0c;技术创新不断引领其市场价值走向高点&am…

移动端Web笔记day03

移动 Web 第三题 01-移动 Web 基础 谷歌模拟器 模拟移动设备&#xff0c;方便查看页面效果&#xff0c;移动端的效果是当手机屏幕发生了变化&#xff0c;页面和页面中的元素也要跟着等比例变化。 屏幕分辨率 分类&#xff1a; 硬件分辨路 -> 物理分辨率&#xff1a;硬件…

GTC 2024 火线评论:DPU 重构文件存储访问

编者按&#xff1a;英伟达2024 GTC 大会上周在美国加州召开&#xff0c;星辰天合 CTO 王豪迈在大会现场参与了 GPU 与存储相关的最新技术讨论&#xff0c;继上一篇《GTC 2024 火线评论&#xff1a;GPU 的高效存储利用》之后&#xff0c;这是他发回的第二篇评论文章。 上一篇文章…

pear-admin 项目结构讲解

上一篇文章介绍了pear-admin用到flask的技术&#xff0c; 深入代码后发现其结构也是令人眼前一亮&#xff0c; 结构化&#xff0c;模块化&#xff0c; 解耦做得非常优秀。 整个项目数据库使用migrate做了版本管理&#xff0c; 使用marshmallow做了序列化&#xff0c;这样数据库…

vue实现文字一个字一个字的显示(开箱即用)

图示&#xff1a; 核心代码 Vue.prototype.$showHtml function (str, haveCallback null) {let timeFlag let abcStr for (let i 0; i < str.length; i) {(function (i) {timeFlag setTimeout(function () {abcStr str[i]haveCallback(abcStr)if ((i 1) str.length…

EPSON推出的实时时钟模块RX8130CE功耗低至300nA、从容应对各种使用场景

随着科技的进步和消费者需求的不断变化&#xff0c;笔记本电脑市场继续展现出强劲的发展势头一方面移动性和轻薄性成为主流&#xff0c;另外一方面性能在不断提升&#xff0c;功能也日益丰富。实时时钟模组&#xff0c;作为提供时间和定时功能的单元模块&#xff0c;是笔记本电…

解决错误LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to

react native pod第三方包或者git clone的时候遇到 OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443两种解决方案 方法一 修改计算机网络配置 由于使用 IPv6 的原因&#xff0c;可能会导致这一问题的出现 系统在解析hostname时使用了ipv6 可以配…

【工具】秘塔AI搜索|强烈推荐,中文免费搜索神器!堪比做报表的员工

网址&#xff1a;https://metaso.cn/ 使用时间&#xff1a;2024/03/27 以前其实用过它家的秘塔写作猫&#xff0c;当时感觉非常不错。 这次看到它出AI搜索&#xff0c;感觉开发者挺有野心和实力的。 推荐原因&#xff1a; 国产产品&#xff0c;中文适用性强。目前还免费。【不…