您好,登錄后才能下訂單哦!
基于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實驗程序
圖1 實驗原圖
由于圖1不是800*600的圖像,我們使用畫圖工具將圖1轉化成800*600。
通過matlab查找人臉膚色范圍如圖2.
圖2 matlab查找人臉膚色范圍(cb,cr)
人臉顏色轉化為黑色,其他顏色轉化為背景白色。
/*
Modulename: face_location.v
Description: face location
Data: 2018/11/21
e-mail: 137194782@qq.com
微信公眾號: FPGA開源工作室
*/
`timescale1ns/1ps
moduleface_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
);
//*****************************************
// skindetection parameter define
//*****************************************
parameterY_LOW = 8'd35;
parameterY_HIGH = 8'd60;
parameterCB_LOW = 8'd93;
parameterCB_HIGH = 8'd120;
parameterCR_LOW = 8'd135;
parameterCR_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
assigno_h_sync = h_sync_delay;
assigno_v_sync = v_sync_delay;
assigno_de = de_delay;
assignskin_binary_image = skin_binary_r;
assignskin_rgb_image = skin_rgb_r;
assignskin_gray_image = skin_gray_r;
endmodule
3 實驗結果
圖3 實驗結果
從圖3中可以看出img5提取出了人臉膚色,img6框出了人臉范圍。實驗成功。
本節實驗只是簡單的人臉位置定位仿真程序,對于多個人臉,或者有其他類似膚色干擾暫時還不能識別。
看完上述內容,你們掌握基于FPGA的人臉位置定位的仿真實現是怎么樣的的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。