集创赛分析(图像处理部分)

四月份进度

1.分析多少个资源单元

图像采集和存储数据:先驱动摄像头进行数据采集(ov5640),再驱动存储器(SDRAM),将数据存到存储器

数据处理:简单的滤波(中值/均值),根据采集的数据进行颜色识别,再做一个Sobel识别边缘,进行简单的形状匹配

摄像头采集数据,摄像头的数据是把16位的RGB拆分为高八位和低八位发送的,通过移位+位拼接的方式把两个8bit的数据合并成16bit数据输出,同时为了SDRAM模块更好的识别帧头和帧尾,在图像的第一个像素点以及最后一个像素点的时候分别拉高sop和eop信号,其他像素点这拉低。

这里的16位数据是RGB565,RGB565的高5位是红色,中间6位是绿色,最低5位是蓝色。

摄像头的驱动时钟是24M,SDRAM接口的驱动时钟是100M

颜色识别,HSV颜色阈值空间,或者进行简单的颜色识别,判断R、G、B的那个颜色值比较大,那个值比较大,就是那个颜色,这是实现一个简单的功能,比较不准确,

module RGB_to_HSV (input        [7:0]    iRed,input        [7:0]    iGreen,input        [7:0]    iBlue,input                iCLK,input                iRST_N,output reg          oRed,output reg          oYellow,output reg          oBlue
);always @(posedge iCLK or negedge iRST_N)beginif(!iRST_N)beginoRed <= 0;oYellow <= 0;oBlue <= 0;endelsebegin// 这里只是简单的判断,实际上你需要进行RGB到HSV的转换,并把HSV空间的值用来判断颜色if(iRed > iGreen && iRed > iBlue) oRed <= 1;elseoRed <= 0;if(iGreen > iRed && iGreen > iBlue) oYellow <= 1;elseoYellow <= 0;if(iBlue > iGreen && iBlue > iRed) oBlue <= 1;elseoBlue <= 0;endendendmodule

最近发现如果用YCbCr也可以判断,

module color_detector(input [7:0] Y_in, Cb_in, Cr_in,output reg is_red, is_blue, is_yellow, is_gray);always @* begin// 判断是否为蓝色if ((Cb_in >= 240) && (Cr_in <= 125) ) is_blue = 1;else is_blue = 0;// 判断是否为红色if ((Cb_in <= 100) && (Cr_in >= 220)) is_red = 1;else is_red = 0;// 判断是否为黄色if ((Cb_in <= 80) && (Cr_in <= 170 && Cr_in >= 140)) is_yellow = 1;else is_yellow = 0;// 判断是否为灰色if ((Cb_in >= 125 && Cb_in <= 130) && (Cr_in >= 125 && Cr_in <= 130)) is_gray = 1;else is_gray = 0;
endendmodule

总体来说颜色的实现还是比较简单的

module color_detector_rgb(input [7:0] R, G, B,output reg is_red, is_blue, is_yellow, is_gray);always @* begin// 判断是否为红色if (R > 128 && G < 100 && B < 100)is_red = 1;else is_red = 0;// 判断是否为蓝色if (B > 128 && R < 100 && G < 100)is_blue = 1;elseis_blue = 0;// 判断是否为黄色if (R > 128 && G > 128 && B < 100) is_yellow = 1;elseis_yellow = 0;// 判断是否为灰色if ((R == G) && (G == B)) is_gray = 1;else is_gray = 0;
endendmodule

形状识别:先进行Sobel边缘检测,然后对于物体形状的识别,要对Sobel运算符的输出进行形状识别,比如说轮廓跟踪(常用的轮廓跟踪算法有韦更斯托姆链码,Freeman链码,K方向链码等。这些算法的基本思想是从某一个边缘像素开始,搜索其邻域像素,寻找边缘点,然后将其连在一起,形成一个链。遇到分叉,则优先选择右方向的像素。这些算法用于轮廓跟踪的Verilog实现可以很复杂,需要处理大量的边缘点和可能的轮廓形状。)、特征提取(存储图像数据,并实现一个简单的面积计算模块)、Hough变换(可以判断图像中有几条线段来判断形状)

让chatgpt写的关于特征提取的代码如下:

module shape_detector(input [7:0] pixel_data,input pixel_valid,input pixel_clk,output wire is_square,output wire is_triangle,output wire is_circle
);// Parameters for image dimensionsparameter WIDTH = 640;parameter HEIGHT = 480;// Memory for imagereg [WIDTH-1:0] img [0:HEIGHT-1];integer x, y;// Area calculationinteger area;always @(posedge pixel_clk) beginif(pixel_valid) begin// Store pixel data in memoryimg[x][y] <= pixel_data;// Simple area calculationarea = area + (pixel_data ? 1 : 0);// Update x and y coordinatesx = x + 1;if(x == WIDTH) beginx <= 0;y <= y + 1;endif(y == HEIGHT) beginy <= 0;endendend// Shape recognition logic// These are placeholders - actual logic will need to be much more complex!assign is_square = (area > 5000 && area < 10000) ? 1 : 0;assign is_triangle = (area > 10000 && area < 20000) ? 1 : 0;assign is_circle = (area > 20000) ? 1 : 0;
endmodule

参考文献:

1】https://blog.csdn.net/qq_47281915/article/details/126041967

2】

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

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

相关文章

gin源码分析(1)--初始化中间件,路由组与路由树

目标 关于gin.Default()&#xff0c;gin.New()&#xff0c;gin.Use()group与子group之间的关系&#xff0c;多group与middleware之间关系中间件的类型&#xff0c;全局&#xff0c;group&#xff0c;get&#xff0c;不同类型的中间件什么时候执行。中间件 next 和abort行为如何…

ElasticSearch的常用数据类型

常见的数据类型 Text类型&#xff08;文本数据类型&#xff09; 用于索引全文值的字段&#xff0c;例如电子邮件的正文或产品的描述。这些字段是analyzed&#xff0c;也就是说&#xff0c;它们通过分析器传递&#xff0c;以便 在被索引之前将字符串转换为单个术语的列表。通过…

Clickhouse为什么如此快?

在大数据处理和分析领域&#xff0c;ClickHouse以其卓越的性能和高效的查询能力而备受瞩目。许多企业和开发者选择ClickHouse作为其数据处理的核心引擎&#xff0c;主要源于其出色的查询速度和数据处理能力。那么&#xff0c;ClickHouse为何能够如此快速地处理数据呢&#xff1…

radash 工具整理常用 API

正在替代 lodash 的新JS工具, 旧的 lodash 语法太老, 新的 radash 集合了 ES6 语法, 效率更高 安装 : npm i radash 常用API整理 : 数组 API : 1. 数组排序 alphabetical 按字母顺序, 正序倒序排列 import { alphabetical } from radashconst gods [{name: Ra,power: …

产品经理功法修炼(3)之产品设计

点击下载《产品经理功法修炼(3)之产品设计》 1. 前言 产品经理的能力修炼并非局限于某一技能的速成,而是需要全面参与到产品的整个生命周期中,通过不断的实践来逐步提升自己的各项能力。尽管在企业的日常运作中,我们不可能身兼数职去扮演每一个角色,但作为产品的核心负…

Go-Gin中优雅的实现参数校验,自定义错误消息提示

问题描述 在参数校验的时候我们一般会基于"github.com/go-playground/validator/v10"这个库给结构体加标签实现校验参数&#xff0c;当参数校验错误的时候&#xff0c;他的提示一般是英文的&#xff0c;怎么自定义参数错误提示呢&#xff1f;跟着我一步步来 注册校…

OpenAI 宣布, ChatGPT 网页端无需注册就能立即使用(2024年4月1日)

今天&#xff0c;OpenAI宣布&#xff0c;为了让更多人轻松体验人工智能的强大功能&#xff0c;现在无需注册账户即可立即使用 ChatGPT。这一变化是他们使命的核心部分&#xff0c;即让像 ChatGPT 这样的工具广泛可用&#xff0c;让世界各地的人们都能享受到 AI 带来的好处。 网…

PostgreSQL的学习心得和知识总结(一百三十五)|深入理解PostgreSQL数据库之查找 PostgreSQL C 代码中的内存泄漏

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、参考书籍&#xff1a;《PostgreSQL数据库内核分析》 2、参考书籍&#xff1a;《数据库事务处理的艺术&#xff1a;事务管理与并发控制》 3、PostgreSQL数据库仓库…

【苍穹外卖】SkyApplication类启动报错

报的这个错 The PoM for com.sky:sky-common:jar:1.0-SNAPSHoT is missing, no dependency information available Maven里重新install一下就好

01-​JVM学习记录-类加载器

一、类加载器子系统 1. 作用-运输工具&#xff08;快递员&#xff09; 负责从文件系统或者网络中加载Class文件&#xff08;DNA元数据模板&#xff09;&#xff0c;Class文件开头有特定标识&#xff0c;魔术&#xff0c;咖啡杯壁&#xff08;class文件存于本地硬盘&#xff0c…

Java 设计模式系列:备忘录模式

简介 备忘录模式是一种软件设计模式&#xff0c;用于在不破坏封闭的前提下捕获一个对象的内部状态&#xff0c;并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 备忘录模式提供了一种状态恢复的实现机制&#xff0c;使得用户可以方便地回到一个特定…

js动态替换字符串中所有匹配到的片段(replace + RegExp实现)

把字符串中匹配到的所有’A’替换成’哈’ <script>var text A12A34A56A789Avar result text.replace(new RegExp(A, g), 哈)console.log(result)//哈12哈34哈56哈789哈 </script>

版本排序,(如果 版本 是 1,1a,1.1a, 2, 2c , 1c , 1.2a, 3 , 5b , 5)进行排序

如果 版本 是 1&#xff0c;1a&#xff0c;1.1a&#xff0c; 2&#xff0c; 2c &#xff0c; 1c &#xff0c; 1.2a&#xff0c; 3 &#xff0c; 5b &#xff0c; 5 对上面的进行排序 利用 VersionComparator 导入依赖 <dependency><groupId>cn.hutool</groupId…

微信小程序开发学习笔记——4.8【小案例】初识wx.request获取网络请求并渲染至页面

>>跟着b站up主“咸虾米_”学习微信小程序开发中&#xff0c;把学习记录存到这方便后续查找。 课程连接&#xff1a;4.8.【小案例】初识wx.request获取网络请求并渲染至页面_哔哩哔哩_bilibili up主提供的网络请求常用接口&#xff1a; 随机猫咪&#xff0c;用来获取一些…

【Kotlin】委托模式

1 委托模式简介 委托模式的类图结构如下。 对应的 Kotlin 代码如下。 fun main() {var baseImpl BaseImpl()var baseWrapper BaseWrapper(baseImpl)baseWrapper.myFun1() // 打印: BaseImpl, myFun1baseWrapper.myFun2() // 打印: BaseImpl, myFun2 }interface Base {fun my…

非关系型数据库(缓存数据库)redis的基础认知与安装

目录 一.关系型数据库和非关系型数据库 关系型数据库 非关系型数据库 关系数据库与非关系型数据库的区别 ①非关系数据 关系型数据库 非关系型数据库产生背景 数据存储流向 非关系型数据库 关系数据库 二.redis的简介 1.概念 2.Redis 具有以下几个优点: 3.Redi…

Nginx请求upstream timed out 错误时通常会尝试重新请求上游服务器(504 Gateway Timeout)

重新记录一下这个重复的nginx请求的问题&#xff1a; 背景 一个导出报表任务&#xff0c;下载报表时&#xff0c;发生了导出超时&#xff1a;504 Gateway Timeout的错误。 504 Gateway Timeout的原因如下&#xff1a; Nginx配置问题&#xff1a;检查您的Nginx配置是否正确。…

测斜仪在边坡安全监测中的重要作用

边坡作为土木工程和地质工程领域中常见的结构形式&#xff0c;其稳定性直接关系到工程安全以及人民生命财产的安全。因此&#xff0c;对边坡进行精确、及时的监测是至关重要的。在众多边坡监测仪器中&#xff0c;测斜仪以其独特的优势在边坡安全监测中发挥着重要的作用。 测斜仪…

uniapp:小程序腾讯地图程序文件qqmap-wx-jssdk.js 文件一直找不到无法导入

先看问题&#xff1a; 在使用腾讯地图api时无法导入到qqmap-wx-jssdk.js文件 解决方法&#xff1a;1、打开qqmap-wx-jssdk.js最后一行 然后导入&#xff1a;这里是我的路径位置&#xff0c;可以根据自己的路径位置进行更改导入 最后在生命周期函数中输出&#xff1a; 运行效果…

vivado 高级编程功能1

适用于 7 系列、 UltraScale 和 UltraScale FPGA 和 MPSoC 的回读和验证 为 7 系列器件生成已加密文件和已经过身份验证的文件 注释 &#xff1a; 如需获取其它信息 &#xff0c; 请参阅《使用加密确保 7 系列 FPGA 比特流的安全》 ( XAPP1239 ) 。 要生成加密比特流…