从对角线向O看下去的图。
色调:俯视图顺时针看去,不同的角度色调不一样。
饱和度:两边向中间
亮度:对角线看去
一、首先摄像头采集到的是RGB的格式,所以要将RGB色散空间转变为HSV色散空间,首先要完成将H分量提取出来的功能,提取H分量后就可以对H分量 进行一个角度判断,H值在0到360度之间不同的角度代表不同的颜色,我们只需要将人民币的H值提取出来之后皆可以判断它的颜色。
RGB转HSV的代码 verilog代码网上有。
二、将RGB转为HSV之后我们对它做了一个直方图统计,将不同颜色出现的次数进行了一个统计,在tb文件里通过统计直方图信息统计次数出现最多的色调。通过对不同钞票面额的仿真的直方图仿真出来,发现不同钞票所处的空间不一样,不同的钞票的基准色调不一样,最终汇总起来发现不同的钞票所在不同的色环位置上。现在有一张钞票我们要识别它的面额,我们可以通过将它的RGB转化为HSV,然后判断它的H在哪个区间从而判断一张钞票具体的面额为多少,这就是我们的整个设计思路。
在verliog代码里,我们要实现钞票出现时我们能检测到这个钞票,这实际上是一个运动目标的检测,我们首先要实现这样一个功能(帧差法运动目标检测),//在这个工程基础上去添加颜色功能的识别,在检测到运动目标之后,我们将摄像头采集到的的图像进行一个RGB转HSV的这样一个操作。//操作完之后,我们提取它的H分量(色调信息)把它传输到颜色检测的这样一个模块里,通过检验目标中心颜色,根据颜色判断钞票面额,在这个模块里的输入实际上只需要提取它的H调的信息,这里分为几大块。||首先,对这个区块的x和y进行统计,这样就可以获取整个中心点的颜色信息,中心点实际上是根据x和y统计出来的。||之后将中心点的颜色寄存下来,寄存条件为首先要有运动目标,即有钞票出现在中心区域,理由if判断条件,若有钞票出现在中心区域,此时将valid信号拉高,表明此时的信号有效,与此同时,将中心点的色调寄存下来,根据色调来判断面额。||在判断钞票面额之前还要进行一个消抖操作(对从中心点无目标到有目标进行记数,钞票到进入中心点之前或者之后可能会进行一个抖动,类似于按键消抖,就是按键消抖的逻辑,如果检测到无目标到有目标就会加载一个计时器,对帧同步信号进行计时,如果连续计数时间达到15帧,代表彻底稳定下来,这个时候才能对中心点的颜色进行识别。)//下面来到钞票计数功能,效抖后确实发现钞票存在,相当于我们的中心点目标从0到1的这样一个过程,这样的一个上升沿存在,那么我们就认定钞票被计数了一次,具体那个面额被计数了一次,根据之前判断出来的面额所决定。比如,点亮4个灯表示100元被检测到一次,点亮3个灯表示50元被检测到一次,点亮2个灯表示20元被检测到一次,等。
最后总结回顾4个功能模块:
1.先统计整个图像的x和y坐标。
2.寄存中心点的颜色。
3.对帧同步信号进行计数。(计数前对目标是否进行消抖)
4.色调判断。
5.计数器功能。文章来源:https://www.toymoban.com/news/detail-799034.html
以钞票检测为例,详细介绍了如何基于FPGA进行颜色的识别。关键点是使用Verilog进行 “RGB转HSV” 这一色彩空间的转换,代码经过Modelsim仿真,并最终在【正点原子】“新起点” FPGA开发板上进行验证。文章来源地址https://www.toymoban.com/news/detail-799034.html
到了这里,关于学习笔记(四):基于FPGA的颜色识别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!