Zynq-7000 人體膚色識別
- 2019 年 10 月 29 日
- 筆記
Zynq-7000 人體膚色識別
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 zynq-7000的膚色識別實現
本節工程的建立基於《Zynq-7000電子相冊的實現》,工程創建以及arm端代碼的編寫請參考《Zynq-7000電子相冊的實現》。
2.1 膚色識別IP的介紹

Pin name |
function |
---|---|
Pix_clk |
像素時鐘 |
I_rgb |
Rgb888輸入 |
I_gray |
灰度輸入 |
I_ycbcr |
Ycbcr顏色空間輸入 |
Skin_binary_image |
二值圖像輸出,膚色為白色,背景為黑色 |
Skin_rgb_image |
膚色為白色,背景為rgb |
Skin_gary_image |
膚色為白色,背景為灰度 |
2.2system 模塊圖

從總體模塊圖可以看到首先實現rgb顏色空間轉ycbcr顏色空間,其次實現膚色識別。
2.3 實驗結果

實驗原圖1

實驗原圖2

實驗結果圖1

實驗結果圖2
結果分析:從實驗原圖和實驗結果來看,膚色識別模塊將某些非膚色部分也識別稱膚色,這裡我們需要改變的對膚色進行判定的條件:
Cb > 77 && Cb < 127
Cr > 133 && Cr < 173
調整cb和cr分量的閾值來達到最佳的膚色識別效果。