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

news/2024/5/20 20:12:33

四月份进度

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】


https://www.xjx100.cn/news/3365577.html

相关文章

浅谈物联网高速公路智慧配电室系统构建方案

关键词&#xff1a;高速公路&#xff1b;智慧供配电&#xff1b;电力监控&#xff1b;配电室智能运维托管&#xff1b;安全隐患 0、引言 随着高速公路事业的不断发展和路网的不断延伸&#xff0c;传统的管理方式已难以满足日益增长的需求&#xff0c;动态管理和安全隐患预警成…

大话设计模式之适配器模式

适配器模式是一种结构型设计模式&#xff0c;它允许将一个类的接口转换成客户端所期望的另一个接口。这种模式通常用于使原本由于接口不兼容而不能一起工作的类能够协同工作。 适配器模式涉及以下几个关键角色&#xff1a; 1. 目标接口&#xff08;Target&#xff09;&#x…

chromium源码学习-调试日志 LOG

在学习 chromium 源码时&#xff0c;我们经常需要增加调试日志&#xff0c;常见的用法一般是 // TurboNet.mm133134 LOG(INFO) << "TurboNet Engine started.";其中 INFO 代表当前这条日志的级别&#xff0c;使用的时候就是输入 INFO 就行。接下来我们在探索…

css预编译sass,css也可以变得优雅

1. 嵌套选择器 #content {article {h1 { color: #333 }p { margin-bottom: 1.4em }}aside { background-color: #EEE } }编译后 #content article h1 { color: #333 } #content article p { margin-bottom: 1.4em } #content aside { background-color: #EEE }2. 变量声明和使…

【Java+Springboot】----- 通过Idea快速创建SpringBoot项目操作方法

一、第一步&#xff1a; 点击选择【File】->【New】-> 【Project】 最后弹出[new Project]界面。 二、第二步&#xff1a; 1. 选择【Spring Initializr】 2. 然后选择【Project SDK】的版本 3. 然后 Choose Initializr Service URL 选择默认&#xff08;Default&#x…

自定义注解@Log 插入操作日志

一&#xff0c;注解描述 // 作用位置&#xff0c;参数 方法 Target({ElementType.PARAMETER, ElementType.METHOD}) // 作用范围 运行时 Retention(RetentionPolicy.RUNTIME) Documented public interface Log {/*** 模块*/public String title() default "";/*** 模…

搜维尔科技:借助 ARVR 的力量缩小现代制造业的技能差距

借助ARVR的力量缩小现代制造业的技能差距 搜维尔科技&#xff1a;Senseglove案例-扩展机器人技术及其VR应用

mybatis批量新增数据

数据量大的时候如果在循环中执行单条新增操作&#xff0c;是非常慢的。那么如何在mybatis中实现批量新增数据呢&#xff1f; 方法 insert 标签的 foreach 属性可以用于批量插入数据。您可以使用 foreach 属性遍历一个集合&#xff0c;并为集合中的每个元素生成一条插入语句。…