logo资料库

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

第1页 / 共7页
第2页 / 共7页
第3页 / 共7页
第4页 / 共7页
第5页 / 共7页
第6页 / 共7页
第7页 / 共7页
资料共7页,全文预览结束
微信公众号:FPGA 开源工作室 基于 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 实验程序
微信公众号:FPGA 开源工作室 图 1 实验原图 由于图 1 不是 800*600 的图像,我们使用画图工具将图 1 转化成 800*600。 通过 matlab 查找人脸肤色范围如图 2. 图 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
微信公众号:FPGA 开源工作室 module face_location( [23:0] [23:0] [23:0] pix_clk, reset_n, i_rgb, i_gray, i_ycbcr, i_h_sync, i_v_sync, i_de, [23:0] [23:0] [23:0] skin_binary_image, skin_rgb_image, skin_gray_image, o_h_sync, o_v_sync, o_de input input input input input input input input output output output output output output ); //***************************************** // skin detection parameter define
微信公众号:FPGA 开源工作室 //***************************************** 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 wire wire reg reg reg reg reg reg [7 : 0] [7 : 0] [7 : 0] y_8b; cb_8b; cr_8b; h_sync_delay; v_sync_delay; de_delay; [23:0] [23:0] [23:0] skin_binary_r; skin_rgb_r; skin_gray_r; assign y_8b = i_ycbcr[23:16];
微信公众号:FPGA 开源工作室 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
微信公众号:FPGA 开源工作室 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 实验结果
微信公众号:FPGA 开源工作室 图 3 实验结果 从图 3 中可以看出 img5 提取出了人脸肤色,img6 框出了人脸范围。实验成功。 图 4 实验结果图 总结:本节实验只是简单的人脸位置定位仿真程序,对于多个人脸,或者有其他类似肤 色干扰暂时还不能识别。 欢迎关注微信公众号:FPGA 开源工作室
分享到:
收藏