芯路恒电子技术论坛

 找回密码
 立即注册

扫一扫,访问微社区

热搜: 活动
查看: 180|回复: 2

基于FPGA的人脸位置定位的仿真实现

[复制链接]
  • TA的每日心情
    开心
    2018-8-6 10:25
  • 9

    主题

    9

    帖子

    904

    积分

    高级会员

    Rank: 6Rank: 6

    积分
    904
    发表于 2018-11-29 19:17:31 | 显示全部楼层 |阅读模式
    基于FPGA的人脸位置定位的仿真实现
    1 概述
    在肤色识别算法中,常用的颜色空间为Ycbcr,Y代表亮度,cb代表蓝色分量,cr代表红色分量。
    由于肤色在 YCbCr 空间受亮度信息的影响较小,本算法直接考虑 YCbCr 空间的 CbCr 分量,映射为两维独立分布的 CbCr 空间。在 CbCr 空间下,肤色类聚性好,利用人工阈值法将肤色与非肤色区域分开,形成二值图像。
    RGB YCbCr 的公式为:
    Y = 0.257*R+0.564*G+0.098*B+16
    Cb= -0.148*R-0.291*G+0.439*B+128
    Cr = 0.439*R-0.368*G-0.071*B+128
    对肤色进行判定的条件常使用如下判定条件:
    Cb > 77 && Cb < 127
    Cr > 133 && Cr < 173
    本节目标:在复杂环境中识别人脸肤色,并且提取肤色,完成人脸位置的定位。
    2实验程序
    图片1.png
    1 实验原图
    由于图1不是800*600的图像,我们使用画图工具将图1转化成800*600
    通过matlab查找人脸肤色范围如图2.
    file:///C:\Users\lijing\AppData\Local\Temp\ksohtml\wpsE8AB.tmp.jpg 图片2.png
    2 matlab查找人脸肤色范围(cb,cr
    人脸颜色转化为黑色,其他颜色转化为背景白色。
    /*
    Module name:  face_location.v
    Description:  face location
                  
    Data:         2018/11/21
    e-mail:       137194782@qq.com
    微信公众号:    FPGA开源工作室
    */
    `timescale 1ns/1ps
    module face_location(
           input                            pix_clk,
           input                            reset_n,
          
           input          [23:0]            i_rgb,
           input          [23:0]            i_gray,
           input          [23:0]            i_ycbcr,
           input                            i_h_sync,
           input                            i_v_sync,
           input                            i_de,
         
           output           [23:0]          skin_binary_image,
           output           [23:0]          skin_rgb_image,
           output           [23:0]          skin_gray_image,
           output                           o_h_sync,
           output                           o_v_sync,                                                                                                  
           output                           o_de  
           );
          
    //*****************************************
    // skin detection parameter define
    //*****************************************
    parameter Y_LOW   = 8'd35;
    parameter Y_HIGH  = 8'd60;
    parameter CB_LOW  = 8'd93;
    parameter CB_HIGH = 8'd120;
    parameter CR_LOW  = 8'd135;
    parameter CR_HIGH = 8'd165;
    wire                           [7 : 0]                    y_8b;
    wire               [7 : 0]         cb_8b;
    wire               [7 : 0]         cr_8b;
    reg                                h_sync_delay;
    reg                                v_sync_delay;                                                                                                  
    reg                                de_delay;  
    reg                [23:0]          skin_binary_r;
    reg                [23:0]          skin_rgb_r;
    reg                [23:0]          skin_gray_r;
    assign  y_8b  = i_ycbcr[23:16];
    assign  cb_8b = i_ycbcr[15:8];   
    assign  cr_8b = i_ycbcr[7:0];
    always @(posedge pix_clk or negedge reset_n) begin
      if(!reset_n) begin
        skin_binary_r <= 24'h000000;
        skin_rgb_r    <= 24'h000000;
        skin_gray_r   <= 24'h000000;
      end
      else if((cb_8b > CB_LOW && cb_8b < CB_HIGH) && (cr_8b > CR_LOW && cr_8b < CR_HIGH)) begin
        skin_binary_r <= 24'b000_000;
        skin_rgb_r    <= i_rgb;
        skin_gray_r   <= i_gray;
      end
      else begin
        skin_binary_r <= 24'hfff_fff;
        skin_rgb_r    <= 24'hFFFFFF;
        skin_gray_r   <= 24'hFFFFFF;
      end
    end
    always @(posedge pix_clk) begin
      h_sync_delay <= i_h_sync;
      v_sync_delay <= i_v_sync;
      de_delay     <= i_de;
    end
    assign o_h_sync = h_sync_delay;
    assign o_v_sync = v_sync_delay;
    assign o_de     = de_delay;
    assign skin_binary_image = skin_binary_r;
    assign skin_rgb_image    = skin_rgb_r;
    assign skin_gray_image   = skin_gray_r;   
          
    endmodule
    3 实验结果
    图片3.png
    图3 实验结果
    从图3中可以看出img5提取出了人脸肤色,img6框出了人脸范围。实验成功。
    file:///C:\Users\lijing\AppData\Local\Temp\ksohtml\wpsE8AD.tmp.jpg 图片4.png
    图4 实验结果图
    总结:本节实验只是简单的人脸位置定位仿真程序,对于多个人脸,或者有其他类似肤色干扰暂时还不能识别。
    欢迎关注微信公众号:FPGA开源工作室
    图片5.png

    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    1

    帖子

    12

    积分

    新手入门

    Rank: 1

    积分
    12
    发表于 2018-11-30 15:17:32 | 显示全部楼层
    赞一个:lol
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    昨天 08:40
  • 0

    主题

    9

    帖子

    611

    积分

    高级会员

    Rank: 6Rank: 6

    积分
    611
    发表于 2018-12-3 09:04:07 | 显示全部楼层
    ,厉害了,以后要多多向你学习
    回复 支持 反对

    使用道具 举报

    *滑动验证:
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|小黑屋|手机版|Archiver|芯路恒电子技术论坛  

    GMT+8, 2018-12-19 11:08 , Processed in 0.201461 second(s), 10 queries , File On.

    Powered by Discuz! X3.3

    © 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

    快速回复 返回顶部 返回列表