基于EBAZ4205矿板的图像处理:05均值滤波算法

基于EBAZ4205矿板的图像处理:05均值滤波算法

项目全部文件已经上传,是免费的

先看效果

请添加图片描述
可以明显看到图像变糊了,这就是均值滤波的特点,将噪声均摊到每个点上的同时,也会让图像丢失细节。

算法讲解

均值滤波,简直是太简单了,就是用一个滑动窗口的所有像素点的均值代替该滑动窗口的中心像素点的的像素值。

算法的FPGA部署

在这里插入图片描述
算法本身很简单,但是这里的实现思想却很重要!!

均值计算,自然少不了除法,计算均值就是sum/N,但是,对于FPGA而言,涉及到浮点数的除法预算很耗时,所以这里最推荐的做法就是将分子和分母都整数倍扩大,让sum乘上一个很大的数,然后移位除法,这样就实现了用整型运算替代了浮点数运算,大幅节约了运算耗时,和运算资源。

所以这里的做法是sumx3641,然后右移15位(移位除法),再加上sumx3641的第14位(四舍五入)。

block design

在这里插入图片描述
其实和我的上一篇是一样的,只有video_procress 模块里面代码不一样

项目代码

video_process 模块

module video_processor((* X_INTERFACE_IGNORE = "true" *) input         frame_clk,    //cmos 像素时钟(* X_INTERFACE_IGNORE = "true" *) input         frame_rst_n,  //预处理图像(* X_INTERFACE_IGNORE = "true" *) input         pre_vsync, //预处理图像场同步信号(* X_INTERFACE_IGNORE = "true" *) input [23:0]  pre_data,  //预处理图像数据(* X_INTERFACE_IGNORE = "true" *) input         pre_href,  //预处理图像数据有效信号(* X_INTERFACE_IGNORE = "true" *) input         pre_frame_ce, //预处理图像时钟使能信号//阈值控制(* X_INTERFACE_IGNORE = "true" *) input [7:0 ]  loc_bin_thresh_coefficient, //来自PS端的局部二值化阈值系数//处理后图像(* X_INTERFACE_IGNORE = "true" *) output        pos_vsync, //处理后图像场同步信号(* X_INTERFACE_IGNORE = "true" *) output [23:0] pos_data,  //处理后图像数据(* X_INTERFACE_IGNORE = "true" *) output        pos_href, //处理后图像数据有效信号(* X_INTERFACE_IGNORE = "true" *) output        pos_frame_ce //处理后图像时钟使能信号  
);//wire define 
wire [7:0] gray_data ;
wire       gray_vsync;
wire       gray_frame_ce;
wire       gray_href;//*****************************************************
//**                    main code
//*****************************************************
//rgb转ycbcr模块
rgb2gray  u_rgb2gray(.cmos_frame_clk     (frame_clk      ),.cmos_rstn          (frame_rst_n    ),//同步复位.cmos_frame_vsync   (pre_vsync      ),.cmos_frame_data    (pre_data       ),.cmos_frame_href    (pre_href       ),.cmos_frame_ce      (pre_frame_ce   ),.dataout_frame_vsync(gray_vsync     ),.dataout_frame_data (gray_data      ),.dataout_frame_href (gray_href      ),.dataout_frame_ce   (gray_frame_ce  )
);
//wire define
wire        matrix_frame_vsync;
wire        matrix_frame_href;
wire        matrix_frame_ce;
wire [7:0]  matrix_p11; //3X3 矩阵数据
wire [7:0]  matrix_p12; 
wire [7:0]  matrix_p13;
wire [7:0]  matrix_p21; 
wire [7:0]  matrix_p22; 
wire [7:0]  matrix_p23;
wire [7:0]  matrix_p31; 
wire [7:0]  matrix_p32; 
wire [7:0]  matrix_p33;VIP_matrix_generate_3x3_8bit u_VIP_matrix_generate_3x3_8bit(.clk                (frame_clk      ), .rst_n              (frame_rst_n    ),.per_frame_vsync    (gray_vsync     ),.per_frame_href     (gray_href      ), .per_frame_ce       (gray_frame_ce      ),.per_img_Y          (gray_data  ),//输出3x3矩阵.matrix_frame_vsync (matrix_frame_vsync ),.matrix_frame_href  (matrix_frame_href  ),.matrix_frame_ce    (matrix_frame_ce    ),.matrix_p11         (matrix_p11),    .matrix_p12         (matrix_p12),    .matrix_p13         (matrix_p13),.matrix_p21         (matrix_p21),    .matrix_p22         (matrix_p22),    .matrix_p23         (matrix_p23),.matrix_p31         (matrix_p31),    .matrix_p32         (matrix_p32),    .matrix_p33         (matrix_p33)
);
avg_filter   u_avg_filter(.clk                     (frame_clk             ),.rst_n                   (frame_rst_n           ),.matrix_img_vsync        (matrix_frame_vsync    ),.matrix_img_href         (matrix_frame_href     ),.matrix_frame_ce         (matrix_frame_ce       ),.matrix_p11              (matrix_p11            ),.matrix_p12              (matrix_p12            ),.matrix_p13              (matrix_p13            ),.matrix_p21              (matrix_p21            ),.matrix_p22              (matrix_p22            ),.matrix_p23              (matrix_p23            ),.matrix_p31              (matrix_p31            ),.matrix_p32              (matrix_p32            ),.matrix_p33              (matrix_p33            ),.dataout_vsync           (pos_vsync             ),       .dataout_href            (pos_href              ),       .dataout_gray            (pos_data              ),       .dataout_frame_ce        (pos_frame_ce          ));
endmodule 

均值滤波模块

`timescale 1ns / 1ps
//作者:抢公主的大魔王
//日期:24.5.15module avg_filter((* X_INTERFACE_IGNORE = "true" *) input   wire                     clk             ,(* X_INTERFACE_IGNORE = "true" *) input   wire                     rst_n           ,(* X_INTERFACE_IGNORE = "true" *) input   wire                     matrix_img_vsync,(* X_INTERFACE_IGNORE = "true" *) input   wire                     matrix_img_href,(* X_INTERFACE_IGNORE = "true" *) input   wire    [7:0]            matrix_p11,(* X_INTERFACE_IGNORE = "true" *) input   wire    [7:0]            matrix_p12,(* X_INTERFACE_IGNORE = "true" *) input   wire    [7:0]            matrix_p13,(* X_INTERFACE_IGNORE = "true" *) input   wire    [7:0]            matrix_p21,(* X_INTERFACE_IGNORE = "true" *) input   wire    [7:0]            matrix_p22,(* X_INTERFACE_IGNORE = "true" *) input   wire    [7:0]            matrix_p23,(* X_INTERFACE_IGNORE = "true" *) input   wire    [7:0]            matrix_p31,(* X_INTERFACE_IGNORE = "true" *) input   wire    [7:0]            matrix_p32,(* X_INTERFACE_IGNORE = "true" *) input   wire    [7:0]            matrix_p33,(* X_INTERFACE_IGNORE = "true" *) input   wire                     matrix_frame_ce,(* X_INTERFACE_IGNORE = "true" *) output reg                       dataout_vsync  ,       //  processed Image data vsync valid signal(* X_INTERFACE_IGNORE = "true" *) output reg                       dataout_href   ,       //  processed Image data href vaild  signal(* X_INTERFACE_IGNORE = "true" *) output reg      [23:0]           dataout_gray ,          //  processed Image brightness output(* X_INTERFACE_IGNORE = "true" *) output reg                       dataout_frame_ce);  
//----------------------------------------------------------------------
//  calc sum of [p11,p12,p13;p21,p22,p23;p31,p32,p33]
reg             [ 9:0]          data_sum1;
reg             [ 9:0]          data_sum2;
reg             [ 9:0]          data_sum3;
reg             [11:0]          data_sum;always @(posedge clk)
begindata_sum1 <= matrix_p11 + matrix_p12 + matrix_p13;data_sum2 <= matrix_p21 + matrix_p22 + matrix_p23;data_sum3 <= matrix_p31 + matrix_p32 + matrix_p33;data_sum  <= data_sum1 + data_sum2 + data_sum3;
end//----------------------------------------------------------------------
//  avg_data = round(data_sum/9.0) -> avg_data = round(data_sum*3641 >> 15)
reg             [22:0]          data_mult;always @(posedge clk)
begindata_mult <= data_sum * 12'd3641;
endreg             [7:0]           avg_data;always @(posedge clk)
beginavg_data <= data_mult[22:15] + data_mult[14];
end//----------------------------------------------------------------------
//  lag 4 clocks signal sync
reg             [3:0]           matrix_img_vsync_r1;
reg             [3:0]           matrix_img_href_r1;
reg             [3:0]           matrix_frame_ce_r1;always @(posedge clk or negedge rst_n)
beginif(!rst_n)beginmatrix_img_vsync_r1 <= 4'b0;matrix_img_href_r1  <= 4'b0;matrix_frame_ce_r1  <= 4'b0;endelsebeginmatrix_img_vsync_r1 <= {matrix_img_vsync_r1[2:0],matrix_img_vsync};matrix_img_href_r1  <= {matrix_img_href_r1[2:0],matrix_img_href};matrix_frame_ce_r1  <= {matrix_frame_ce_r1[2:0],matrix_frame_ce};end
endreg             [7:0]           matrix_p22_r1       [0:3];always @(posedge clk)
beginmatrix_p22_r1[0] <= matrix_p22;matrix_p22_r1[1] <= matrix_p22_r1[0];matrix_p22_r1[2] <= matrix_p22_r1[1];matrix_p22_r1[3] <= matrix_p22_r1[2];
end//----------------------------------------------------------------------
//  result output
always @(posedge clk or negedge rst_n)
beginif(!rst_n)dataout_gray <= 'd0;elsedataout_gray <= {3{avg_data}};
endalways @(posedge clk or negedge rst_n)
beginif(!rst_n)begindataout_vsync <= 1'b0;dataout_href  <= 1'b0;dataout_frame_ce <= 1'b0;endelsebegindataout_vsync <= matrix_img_vsync_r1[3];dataout_href  <= matrix_img_href_r1[3];dataout_frame_ce <= matrix_frame_ce_r1[3];end
endendmodule

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Mini Cheetah 代码分析(八)基于零空间的任务分级

一、主要公式 二、源代码注释 三、相关原理解释 一、主要公式 二、源代码注释 该功能的实现在文件KinWBC.cpp中的FindConfiguration函数&#xff0c;主要看注释&#xff0c;与公式是能够对应起来的&#xff0c;由第0个任务&#xff0c;也就是接触任务开始进行迭代&#xff0…

基于SSM的“羽毛球馆管理系统”的设计与实现(源码+数据库+文档)

基于SSM的“羽毛球馆管理系统”的设计与实现&#xff08;源码数据库文档) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SSM 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统结构图 登录界面 后台用户添加 后台用户管理 球场添加 球场…

「前端」性能优化问题总结

前言 本文主要介绍一些前端通用的性能优化方案总结&#xff0c;非写代码阶段的性能优化。 分包 React router V6.4 数据路由新特性 <Route path/xx lazy{async()>{const module await import(./xx)const XX module.defaultreturn{element:(<Suspense fallback…

C++(week3):C语言文件操作

文章目录 (十二) 文件1.流(1)流模型(2)程序员视角的文件(3)缓冲区类型(4)标准流(5)二进制文件 与 文本文件(6)文件流的接口(API) 2.打开/关闭文件(1)fopen(2)fclose(3)示例代码 3.读/写文件(1)fgetc / fputc&#xff1a;读写文本文件&#xff0c;一个字符一个字符地读写(2)fget…

校园防欺凌平台

校园霸凌事件很难被发现&#xff0c;发现者又可能迫于威胁而不敢告发&#xff0c;被霸凌者又因各种原因而选择忍耐&#xff0c;所以&#xff0c;如果能够在发生校园霸凌的时候&#xff0c;做出及时的预警&#xff0c;也许能够拯救挽回无数个家庭。本平台结合防欺凌设备&#xf…

什么是Serverless ?

目录&#xff1a; 1、服务器发展阶段 2、Serverless定义 3、Serverless理解

软件确认测试详细介绍

在软件开发流程中&#xff0c;确认测试是一个至关重要的环节&#xff0c;它确保软件产品满足预定的需求、性能和质量标准。本文将详细介绍软件确认测试的概念、目的、方法、执行步骤以及其在软件开发周期中的重要性。   一、软件确认测试的概念   软件确认测试&#xff0c;…

干货【挑战全网】中电联互联互通协议 最全高德地图充电桩接入指南,流量必火!慧哥开源充电桩平台V2.5.2

分享《一套免费开源充电桩物联网系统&#xff0c;是可以立马拿去商用的&#xff01;》 一、和高德直接互联互通的优势&#xff1a; 1、高德官方直接互联互通&#xff0c;提供给合作商户独立发展自主权&#xff0c;不依赖任何第三方平台; 2、自己控制电站的上线、下线、修改电…

独立静态ISP:互联网连接的新选择

在数字化时代&#xff0c;互联网连接的质量直接影响着我们的工作与生活。随着技术的发展&#xff0c;独立静态ISP&#xff08;Internet Service Provider&#xff0c;互联网服务提供商&#xff09;逐渐成为企业和个人用户关注的焦点。本文将从五个方面探讨独立静态ISP的优势、应…

C语言详解:数组指针

数组指针是指针 int* p[10] 这是指针数组的写法 &#xff0c;因为【】的优先级比*高&#xff0c; 所以为了解决优先级问题&#xff0c;加&#xff08;&#xff09; int(* p)[10]&arr;//数组的地址要存起来 说明p是指针&#xff08;首先与*结合&#xff09;&#xff0c…

国网1376.1主站与采集终端通信协议和国网1376.2集中器本地通信模块接口协议报文解析工具

本文分享一个国网1376.1主站与采集终端通信协议的报文解析工具&#xff0c;同时本报文解析软件也支持国网1376.2集中器本地通信模块接口协议的报文解析。 下载链接: https://pan.baidu.com/s/1ngbBG-yL8ucRWLDflqzEnQ 提取码: y1de 主界面如下图所示&#xff1a; 同时本软件自…

[图解]SysML和EA建模住宅安全系统-03

1 00:00:00,490 --> 00:00:01,180 怎么加 2 00:00:01,570 --> 00:00:04,380 我们来看&#xff0c;这是刚才那个图 3 00:00:05,200 --> 00:00:06,390 17.7 4 00:00:07,150 --> 00:00:08,260 我们同样在这里加 5 00:00:08,430 --> 00:00:10,100 同样在这个下面…

「AIGC算法」近邻算法原理详解

本文主要介绍近邻算法原理及实践demo。 一、原理 K近邻算法&#xff08;K-Nearest Neighbors&#xff0c;简称KNN&#xff09;是一种基于距离的分类算法&#xff0c;其核心思想是距离越近的样本点&#xff0c;其类别越有可能相似。以下是KNN算法的原理详解&#xff1a; 1. 算…

python3.6+pycharm安装配置

python3.6安装 下载python3.6 官网&#xff1a;下载 安装及环境变量配置 等待几分钟安装成功&#xff0c;cmd中输入python后返回版本号&#xff0c;安装成功 环境变量path下能看到自动添加了环境变量 pycharm下载安装 pycharm社区版下载 官网&#xff1a;下载 等待…

SmartEDA在电工电子实验中的神奇应用:解锁实验新境界!

在电工电子的广阔领域中&#xff0c;实验是不可或缺的一部分。它不仅能够验证理论知识的正确性&#xff0c;还能够帮助学生和研究者深入理解电子元件和电路的工作原理。而在这个数字化的时代&#xff0c;一款强大的实验辅助工具——SmartEDA&#xff0c;正悄然改变着电工电子实…

Qt自定义QpushButton分别在c++/python中实现

//.h文件#ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QPainter> #include<QMouseEvent> #include<QPropertyAnimation> #include<QResizeEvent>QT_BEGIN_NAMESPACE namespace Ui { class Widget; }class Widget : public QWi…

Google Chrome GPU渲染抓包

非安全模式启动 "C:\Program Files\Google\Chrome\Application\chrome.exe" --ignore-certificate-errors --allow-running-insecure-content --disable-web-security 配置环境 set RENDERDOC_HOOK_EGL0 "C:/Program Files/Google/Chrome/Application/chrom…

Python送你小花花

快到520了&#xff0c;准备好送上你的爱意了吗&#xff1f; 还记得去年从网上模仿了一篇python使用turtle画的小花花程序&#xff0c;当时还没有转行到程序员行业&#xff0c;刚刚入门学习编程&#xff0c;还在纠结是学习python、Java还是C#的时候。 总会被一些猎奇的内容吸引&…

国际铝业协会、中铝、百威亚太、海德鲁、诺贝利斯等企业将出席2024第二届中国绿色铝业国际峰会

据中国有色金属工业协会统计数据显示&#xff0c;2022年我国有色行业二氧化碳排放量约为6.6亿吨&#xff0c;其中铝行业二氧化碳排放量为5.5亿吨&#xff0c;占有色金属行业总排放量的83.3%&#xff0c;约占全国总排放量比重的5%&#xff08;2022年中国二氧化碳排放量约为110亿…

企业研发必备网络:这些关键特性,你get了吗?

对于以研发为核心的企业&#xff0c;如软件开发、生物制药、智能汽车等&#xff0c;安全、稳定的研发网络可是他们业务发展不可或缺的。那么&#xff0c;这些研发网络究竟有哪些独特之处&#xff0c;又能为企业带来哪些价值呢&#xff1f; 首先&#xff0c;我们知道企业研发常常…