基于FPGA的肤色识别算法实现

         大家好,给大家介绍一下,这是基于FPGA的肤色识别算法实现。

         我们今天这篇文章有两个内容一是实现基于FPGA的彩色图片转灰度实现,然后在这个基础上实现基于FPGA的肤色检测算法实现。

将彩色图像转化为灰度的方法有两种,一个是令RGB三个分量的数值相等,输出后便可以得到灰度图像,另一种是转化为YCbCr格式,将Y分量提取出来,YCbCr格式中的Y分量表示的是图像的亮度和浓度所以只输出Y分量,得到的图像就是灰度图像了。我在这里选择第二种方法实现。

YCBCr是通过有序的三元组来表示的,三元由Y(Luminance)、Cb(Chrominance-Blue)和Cr(Chrominance-Red)组成,其中Y表示颜色的明亮度和浓度,而Cb和Cr则分别表示颜色的蓝色浓度偏移量和红色浓度偏移量。人的肉眼对由YCbCr色彩空间编码的视频中的Y分量更敏感,而Cb和Cr的微小变化不会引起视觉上的不同,根据该原理,通过对Cb和Cr进行子采样来减小图像的数据量,使得图像对存储需求和传输带宽的要求大大降低,从而达到在完成图像压缩的同时也保证了视觉上几乎没有损失的效果,进而使得图像的传输速度更快,存储更加方便。我们要的到灰度图像,首先要将采集到的彩色图像转化为YCbCr。

         我通过串口发送的彩色图片数据是RGB332 8bit,根据官方给出的转化公式是RGB888->YCbCr,所以我首先要将8bit RGB332转化为24bit RGB888。转化如下,这里用到了循环补偿的概念。

从如上转化可以看出,B分量进行了四轮补偿。进行这样的补偿,在做色彩格式转化的时候,能够明显的改善色彩效果,减少精度上的损失。代码实现部分如下。

下面是官方给的RGB888 to YCbCr的算法公式,我们可以直接把算法移植到FPGA上,但是我们都知道FPGA无法进行浮点运算,所以我们采取将整个式子右端先都扩大256倍,然后再右移8位,这样就得到了FPGA擅长的乘法运算和加法运算了。

这个计算式子看起来是十分简单的,但是要是直接用Verilog直接写出来,那么只能说,这个人的代码写的一塌糊涂,所以这里就引出FPGA中流水线的设计思想。

         在这里我们选择加3级流水线,就第一个Y分量而言,先计算括号中得乘法运算,消耗一个时钟,然后将括号中的数据求和,消耗一个时钟,这里为了计算方便,将128也扩大256倍,放到括号中,最终结果除以256就行了也就是右移8位,在FPGA中我们只需要舍弃低8位取高8位就行。

将RGB565—>YCbCr成功后,提取出Y的值输出,就可以得到灰度色彩的图像了。

将采集到的RGB565的像素数据,输入到算法处理模块进行操作,由RGB565——>YCbCr——Gray官方给出的公式来算,先将RGB565拆分开R G B三个分量,使用如上公式计算的到Y Cb Cr是三个分量。

RGB转YCbCr算法的仿真过程,从图中可以看出,加了流水线后的运算过程,每一级运算相差一个时钟,然而每一级都在进行新的运算,我们加了3级流水线,这样运算速度可以提升3倍。

最后将Y分量的数据输出,进行位拼接,16位的RGB565像素R、G、B分量分别对应的取Y分量的高位,最后的输出显示出来就是灰度图像了。

视频演示请看我微博链接http://t.cn/RO9DJoZ

         对于肤色检测其实也是基于这个基础上,首先利用如上图公式将RGB转化为YCbCr,然后通过对Cb和Cr分量设置阈值,我这边设置的是当Cb和Cr分量在这个阈值之间时,输出为全1,即白色,其他情况输出为全0,即为黑色,我使用前面的200x200的图片做实验,效果不怎么好,最后借用业界前辈CrazyBingo大神的摄像头驱动,试了一下这个肤色识别算法,最后得到的效果还是可以的。这个用YCbCr阈值法实现肤色识别的方法,是不很精确,后面我会尝试用另一种识别方法来试着实现。

肤色识别YCbCr阈值

77 < Cb < 127

133 < Cr < 173

最终的效果如下视频:http://t.cn/ROwEnrb

转载请注明出处:NingHeChuan(宁河川)

图像处理系列文章

第一篇:基于FPGA的VGA显示静态图片

第二篇:基于FPGA的RGB565_YCbCr_Gray算法实现

第三篇:基于FPGA的Uart接收图像数据至VGA显示

番外篇:数字图像处理界标准图像 Lena 后面的故事

第四篇:纠错:基于FPGA串口发送彩色图片数据至VGA显示

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏专知

【论文推荐】最新八篇强化学习相关论文—残差网络、QMIX、元学习、动态速率分配、分层强化学习、抽象概况、快速物体检测、SOM

【导读】专知内容组整理了最近八篇强化学习(Reinforcement learning)相关文章,为大家进行介绍,欢迎查看! 1.BlockDrop: Dyna...

4595
来自专栏专知

【论文推荐】最新十篇度量学习相关论文—可量化表示、非线性度量学习、在线深度量学习、大间隔最近邻、判别深度度量、域自适应

1652
来自专栏专知

【论文推荐】最新六篇生成式对抗网络(GAN)相关论文—半监督学习、对偶、交互生成对抗网络、激活、纳什均衡、tempoGAN

【导读】专知内容组整理了最近六篇生成式对抗网络(GAN)相关文章,为大家进行介绍,欢迎查看! 1. Exploiting the potential of un...

4059
来自专栏机器之心

资源 | 生成对抗网络新进展与论文全集

选自GitHub 参与:蒋思源、吴攀 生成对抗网络(GAN)是近段时间以来最受研究者关注的机器学习方法之一,深度学习泰斗 Yann LeCun 就曾多次谈到 这...

36911
来自专栏深度学习与数据挖掘实战

【今日热门&优质资源】Kaggle竞赛优秀者code精选&机器学习中的核函数选择技巧

843
来自专栏专知

【论文推荐】最新八篇生成对抗网络相关论文—条件翻译、RGB-D动作识别、量子生成对抗网络、语义对齐、视频摘要、视觉-文本注意力

1943
来自专栏开源FPGA

基于FPGA的彩色图像转灰度算法实现

  昨天才更新了两篇博客,今天又要更新了,并不是我垃圾产,只不过这些在上个月就已经写好了,只是因为比赛忙,一直腾不出时间整理出来发表而已,但是做完一件事情总感觉...

2539
来自专栏专知

【论文推荐】最新八篇生成对抗网络相关论文—离散数据生成、设计灵感、语音波形合成、去模糊、视觉描述、语音转换、对齐方法、注意力

【导读】专知内容组整理了最近八篇生成对抗网络(Generative Adversarial Networks )相关文章,为大家进行介绍,欢迎查看! 1.Cor...

3277
来自专栏专知

【论文推荐】最新5篇度量学习(Metric Learning)相关论文—人脸验证、BIER、自适应图卷积、注意力机制、单次学习

【导读】专知内容组整理了最近五篇度量学习(Metric Learning)相关文章,为大家进行介绍,欢迎查看! 1. Additive Margin Softm...

1.5K8
来自专栏专知

【论文推荐】最新六篇命名实体识别相关论文—跨专业医学、阿拉伯命名实体、中国临床、深度多任务学习、多模态、图卷积网络

2082

扫码关注云+社区