基于fpga的图像处理之3x3_5x5算子模板中值排序

news2024/11/25 6:33:00

本文的思路框架:
①本文介绍3x3算子模块和5x5算子模块中,矩阵转化成串行数据后,对其排序,并获取矩阵中值数据;
②本例程中采用的FPGA设计技巧,可用于借鉴,一是采用for循环实现串行数据转化并行数据;二是采用两级for循环实现矩阵中数据的比较;
③本文比较采用纯逻辑方式进行比较,一个时钟输出数据,并且提供了3x3和5x5的矩阵算子模板使用的逻辑资源,需斟酌考虑使用,也就是所谓的面积和速度之间的平衡选择
1、排序算法(组合逻辑实现)
①通过for循环实现串行数据转换并行数据,用于下一级模块的比较,此处使用i计数;
②将i从最大值递减,确保当前矩阵最后一个数据输入;
③引入j,用于相邻的两组数据输入比较,将较小值赋值给中间值,进入下一级循环

   integer i, j;
    always@(*)
    begin  
        for (i = 0; i < MATRIX_DATA_NUM; i = i + 1)
            begin
                image_array[i+1] = i_image_matrix_data[i*SIGNAL_DATA_WIDTH +: SIGNAL_DATA_WIDTH];
            end

        for (i = MATRIX_DATA_NUM; i > 0; i = i - 1)
            begin
                for (j = 1 ; j < i; j = j + 1)
                    begin
                        if (image_array[j] < image_array[j + 1])
                            begin
                                image_sort_temp        = image_array[j];
                                image_array[j]        = image_array[j + 1];
                                image_array[j + 1]    = image_sort_temp;
                            end
                    end
            end
    end

2、不同算子模块的资源比较
3x3算子模块的中值排序资源使用
在这里插入图片描述
5x5算子模块的中值排序资源使用
在这里插入图片描述
3、中值排序算法仿真验证
在这里插入图片描述

`ifdef MATRIX_3x3
    parameter MATRIX_DATA_NUM        = 9                                        ;
    parameter SIGNAL_DATA_WIDTH     = 8                                        ;
    parameter MATRIX_DATA_WIDTH        = SIGNAL_DATA_WIDTH * MATRIX_DATA_NUM    ;
    reg                      [MATRIX_DATA_WIDTH-1:0]        i_image_matrix_data    ;    
    wire                    [SIGNAL_DATA_WIDTH-1:0]        o_image_median_data    ;    
    initial begin
        #(CLK_PERIOD_50M * 10000);
        i_image_matrix_data = {    8'd31,8'd22,8'd23,
                                8'd24,8'd25,8'd26,
                                8'd27,8'd28,8'd39};
        #(CLK_PERIOD_50M * 1000);
        i_image_matrix_data = {    8'd51,8'd42,8'd43,
                                8'd44,8'd45,8'd46,
                                8'd47,8'd48,8'd59};
        #(CLK_PERIOD_50M * 1000);
        $stop;
    end
`endif
    
`ifdef MATRIX_5x5
    parameter MATRIX_DATA_NUM        = 25                                    ;
    parameter SIGNAL_DATA_WIDTH     = 8                                        ;
    parameter MATRIX_DATA_WIDTH        = SIGNAL_DATA_WIDTH * MATRIX_DATA_NUM    ;
    reg                      [MATRIX_DATA_WIDTH-1:0]        i_image_matrix_data    ;    
    wire                    [SIGNAL_DATA_WIDTH-1:0]        o_image_median_data    ;    
    initial begin
        #(CLK_PERIOD_50M * 10000);
        i_image_matrix_data = {    8'd31,8'd22,8'd23,8'd42,8'd13,
                                8'd24,8'd25,8'd26,8'd55,8'd2,
                                8'd27,8'd28,8'd39,8'd68,8'd3,
                                8'd12,8'd38,8'd49,8'd78,8'd59,
                                8'd17,8'd15,8'd99,8'd18,8'd9};
        #(CLK_PERIOD_50M * 1000);
        i_image_matrix_data = {    8'd31,8'd22,8'd23,8'd42,8'd13,
                                8'd84,8'd25,8'd26,8'd55,8'd2,
                                8'd87,8'd78,8'd29,8'd68,8'd3,
                                8'd85,8'd71,8'd89,8'd78,8'd59,
                                8'd82,8'd72,8'd88,8'd18,8'd9};                            
        #(CLK_PERIOD_50M * 1000);
        $stop;
    end    
`endif

仿真结果
在这里插入图片描述

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

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

相关文章

vite创建vue2项目

使用vite首先需要注意官方给出的兼容性注意 Vite 需要 Node.js 版本 14.18&#xff0c;16。然而&#xff0c;有些模板需要依赖更高的 Node 版本才能正常运行&#xff0c;当你的包管理器发出警告时&#xff0c;请注意升级你的 Node 版本。 1.初始化vite项目 输入以下命令&#…

Spring MVC 是什么?与 Struts 的区别是什么?

Spring MVC是Spring框架中的一个模块&#xff0c;它提供了一种基于MVC&#xff08;Model-View-Controller&#xff09;架构的Web开发方式。与传统的JSP/Servlet开发方式相比&#xff0c;Spring MVC更加灵活、高效&#xff0c;可以帮助开发人员快速构建高质量的Web应用程序。本文…

vue diff算法与虚拟dom知识整理(10) 梳理patch处理相同节点比较的基本逻辑

这次 我们来讲 diff算法处理到 当新旧节点 是同一个节点时的处理 我们之前也说过 如果不是同一个节点 他就会暴力拆旧 把新的插上去 但当他们是同一个节点 需要精细化比较 最做小化更新 这块我们还没有处理 打开我们的案例 打开 patch.js 对应其实就还是这一块还没有写 我们…

PostgreSQL查询引擎——transform expressions之AEXPR_OP

static Node *transformAExprOp(ParseState *pstate, A_Expr *a){Node *lexpr a->lexpr; Node *rexpr a->rexpr; // 操作符左右表达式Node *result;/* Special-case "foo NULL" and "NULL foo" for compatibility with standards-broke…

Bug——后端返回LocalDateTime类型数据中间出现一个T

错误如下图所示: 返回的JSON格式数据里面会有一个多出来的T. 解决方案&#xff1a; 在后端的POJO层的实体类的LocalDateTime属性上面加上一个注解 JsonFormat(pattern"yyyy-MM-dd HH:mm:ss") 如下所示&#xff0c;然后在返回JSON格式数据时就不会出现那个多余的T了…

C++之模板初阶

目录 前言 1.泛型编程 2.模板 2.1 函数模板 2.1.1 函数模板概念 2.1.2 函数模板格式 2.1.3 函数模板的原理 2.1.4 函数模板的实例化 2.1.5 模板参数的匹配原则 2.2 类模板 2.2.1 类模板定义模式 2.2.2 类模板的实例化 前言 我们会不会有疑惑为什么C语言中&#xf…

Python学习笔记——cmeans模糊聚类例程

文章目录 模糊聚类应用简介安装环境demo&#xff1a;运行结果 模糊聚类应用简介 模糊聚类即通过模糊数学&#xff08;处理模糊或不确定性信息的数学方法&#xff09;的相关算法进行聚类分析任务。 常用的模糊聚类算法包括模糊C均值聚类&#xff08;FCM&#xff0c;Fuzzy-c mea…

TryHackMe-Red Team Capstone Challenge (红队挑战)【真实红队模拟】

Red Team Capstone Challenge 注意&#xff1a;我不会在这里提及相关的flag&#xff0c;只专心打&#xff1b;flag可以自己用各个hostname尝试一遍 挑战作者的一句话 这个房间被评为坚硬&#xff0c;但因为它是你前面的一座山&#xff0c;它可能被评为疯狂。但是&#xff0c;…

【Vue3】滑动验证组件 | 滑动验证

前言 滑块验证不只判断是否滑动到尾部&#xff0c;真正的目的是检测用户行为&#xff0c;检测行为是人为、脚本、还是其它。 防止使用脚本大量注册、请求等 。比如发送请求时&#xff0c;判断用户在某个页面停留了多长时间。登录、注册时是否点击了登录、注册按钮&#xff0c;…

Lesson1——数据结构前言

前言&#xff1a; 今天我们正式开始一个新的专栏——初阶数据结构&#xff08;C语言实现&#xff09;&#xff0c;本专栏后续持续更新时间复杂度空间复杂度、顺序表、链表、栈和队列、二叉树、排序等算法的相关知识&#xff0c;欢迎大家互相学习&#xff0c;可以私信互相讨论哦…

一次oracle环境 enq: TX - allocate ITL entry锁问题分析

enq: TX - allocate ITL entry锁问题分析 通过分析问题时间段两个节点的AWR报告&#xff0c;TOP1等待为锁竞争enq: TX - allocate ITL entry&#xff0c;该等待事件是由于缺省情况下创建的表的INITRANS参数为1,索引的INITRANS参数值为2.当有太多的并发DML操作的数据行处于相同的…

日志模块封封装:单例模式+策略模式+构建者模式+bugly

日志模块封封装:单例模式策略模式构建者模式bugly 一.单例模式策略模式构建者模式二.日志模块封装1.日志等级&#xff1a;LoggerLevel枚举类2.日志输出类型&#xff1a;LoggerType枚举类3.ILogger接口4.LogCatLogger/FileLogger/NetWorkLogger/EmailLogger5.使用构建者模式创建…

相同格式相同分辨率图片不同大小分析

1、问题 有三张图片&#xff0c;如下&#xff1a; 这三张图片均为jpg格式&#xff0c;分辨率均为1851*580&#xff0c;肉眼看不出区别。但是大小不同。 2号为217KB&#xff0c;4号为1.15MB&#xff0c;5号为1.06MB。 我们看下常规信息&#xff0c;先看2号&#xff1a; 可以…

初识Linux:第五篇

初识Linux&#xff1a;第五篇 初识Linux&#xff1a;第五篇1.Linux下的用户2.Linux权限管理2.1文件权限管理2.2文件权限的更改2.21改变文件访问权限属性2.22改变文件的身份 3.三个问题 总结 初识Linux&#xff1a;第五篇 &#x1f601;本篇主要介绍Linux权限的相关知识&#x1…

vue+elementui+nodejs高校校园在线打印预约系统

在线提交文档进行打印 首页简单介绍系统 语言 node.js 框架&#xff1a;Express 前端:Vue.js 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat 开发软件&#xff1a;VScode 顶部或主页按钮转到打印 用户可以登录 查看历史打印记录 用户分学生和非学生 学生可以享有优惠…

基于.NetCore开源的Windows的GIF录屏工具

推荐一个Github上Start超过20K的超火、好用的屏幕截图转换为 GIF 动图开源项目。 项目简介 这是基于.Net Core WPF 开发的、开源项目&#xff0c;可将屏幕截图转为 GIF 动画。它的核心功能是能够简单、快速地截取整个屏幕或者选定区域&#xff0c;并将其转为 GIF动画&#x…

编写 ROS 消息发布订阅器(五)

执行命令&#xff0c;指定目录添加cpp文件 cd ~/catkin_ws/src/beginner_tutorials如果没有src目录&#xff0c; 就自己创建一个目录叫src cd src/ vim talker.cpp 复制代码粘贴&#xff1a; #include "ros/ros.h" #include "std_msgs/String.h" int m…

C++/R 期末冲刺3h

C 1. 基础程序 #include "iostream" // C头文件 #include "stdio.h" // C 头文件 //using namespace std; // 命名空间// main() 是程序开始执行的地方int main() {std::cout << "Hello, World!" << "\n";return 0; …

【数据结构】线性结构 之 顺序表

&#x1f331;博客主页&#xff1a;大寄一场. &#x1f331;系列专栏&#xff1a;数据结构与算法 &#x1f618;博客制作不易欢迎各位&#x1f44d;点赞⭐收藏➕关注 目录 前言 顺序表概念及结构 静态代码实现&#xff1a; 动态代码实现&#xff1a; SeqList.h文件 SeqLi…

使用VitePress和Github搭建个人博客网站,可以自动构建和发布

之前我们写过一篇关于如何自动构建和发布个人博客的文章&#xff0c;当时是使用VuePress和GitLab。GitLab持续集成部署CI/CD初探&#xff1a;如何自动构建和发布个人前端博客 现在换了Vue3和Vite&#xff0c;使用VitePress在Github上又搭建了一个博客。博客地址&#xff1a; …