本文针对咸鱼FPGA的FPGA实现人脸检测以及直方图拉伸进行原理学习。工程在文末。
获取人脸图像——肤色提取(Ycbcr+阈值)——滤波处理(中值、腐蚀膨胀)——人脸框选——显示
肤色提取:顾名思义,将肤色从外界环境中提取出。在肤色识别算法中,常用YCbCr颜色空间(亮度、蓝色、红色分量),因为肤色在 YCbCr 空间受亮度信息的影响较小,从而肤色类聚性好,由此,在Ycbcr空间基础上,我们用人工阈值法将肤色与非肤域分开,最终形成二值图像,实现肤色的提取。
滤波处理:人脸内部可能存在黑点、人脸外的某些地方也可能会被误检测为人脸,这些情况都会造成识别失败,因此加入中值滤波以及腐蚀、膨胀,这些之前都整理过,不展开说了。
原理:先进行Ycbcr空间转换得到亮度、蓝色、红色分量,给cb和cr设置阈值,即可将肤色提取出来。(共采用四级流水线)
首先三级流水线后,可得到三分量如下:
Cb和Cr设置阈值:;(前人大量研究得到的经验值),最终输出的结果是,目的是减少运算量!
RTL图如下: 可看到,输入是RGB565原图数据,内部进行Ycbcr转换,分别得到8位的Y,Cb,Cr分量,后根据蓝红分量的阈值得到16位的二值化肤色数据face_data,阈值内为白色,阈值外为黑色;
检测出肤色后,为提高图像质量,进行中值滤波、腐蚀膨胀处理。
通过肤色检测出人脸后,我们用行列坐标画框,将人脸框选出来,最终人脸框和图像数据同时输出,原图图像数据是16位,因此前面肤色数据face_data也用的16位。
RGB信号:原图数据、使能以及行场有效信号。 face信号:人脸肤色提取后的图像数据、使能以及行场有效信号。
如何得到人脸框的四个顶点坐标?
因为两帧图像差别较小,因此我们将人脸肤色图像分两帧来处理,通过这两帧图像得到人脸框的坐标,这样可防止图像结果偏移的情况出现。其中第一帧得到框的四个顶点坐标,当前帧的输出即可实时的使用人脸框的四个顶点坐标。
1、既然要用连续的两帧肤色图像,我们就要对图像延迟一拍。
2、通过连续两帧图像的场有效信号得到最终的边沿信号,上升沿为人脸肤色图像开始标志,下降沿为结束标志。
3、利用显示驱动生成的行场计数器,得到人脸图像的横纵坐标
3中得到了图像的横纵坐标,从而可确定出框的四个顶点坐标,然后利用延迟后的一帧图像来将人脸框和图像数据同时实时输出。
5、实时顶点坐标值的保存
前一帧到当前帧的间隙来保存坐标值,从而供当前帧来实时使用。
至此,得到了人脸框,接下来找该人脸框下对应的原图数据。
6、原图行列计数器
7、人脸框和原图输出 用按键来控制识别效果,一种是原图的人脸检测,一种是二值化腐蚀膨胀后的人脸检测效果。
本文主要学习:人脸肤色如何提取(为蓝红分量设置阈值),以及人脸框如何得到(延迟一拍得到连续两帧图像,从而实时地使用这四个顶点坐标,根据四个顶点的横纵坐标值赋予颜色,得到方框)。木有想到一个假期竟然只看了这………………
基于人脸识别获取顶点坐标的方法,对直方图拉伸的图像算法进行分析并编写verilg代码。
参考:在视频图像处理中,为了能够实时调节图像对比度,通常进行直方图拉伸,直方图拉伸是指将图像灰度直方图较窄的灰度级区间向两端拉伸,从而增强整幅图像像素的灰度级对比度,达到增强图像的效果。
A:Imin,表示最小灰度级 B:Imax,表示最大灰度级 和人脸框求顶点坐标相同,直方图拉伸也采用两帧图像进行处理。只有一帧图像流过之后,我们才能得到该图像的最大和最小灰度级,才能进行后续直方图拉伸公式的计算,由于连续两帧图像差别小,我们分成两帧图像。
方法: 1、帧延迟一拍,获得前一帧和当前帧 2、前一帧计算最小最大灰度级AB 3、在前一帧和当前帧的间隙,保存AB的值 4、在当前帧计算公式——公式用三级流水线来实现(分子分母,商,大括号)
获得一帧图像的开始结束标志
前一帧获得AB 图像流经未开始或者结束的时候,最小像素值255,最大像素值0;当图像流过且像素有效时候,开始进行像素比较,得到一帧图像中的最小最大像素值。
如何确定间隙? nge_vsnyc高电平处为间隙,此时保存AB值即可。
三级流水线:
第一级流水线:计算分子分母
第二级流水线:分子分母除法计算
第三级流水线:大括号的计算
本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕,E-mail:xinmeigg88@163.com
本文链接:http://www.dbeile.cn/news/2069.html