基于 FPGA 的膚色檢測設(shè)計與實現(xiàn)
引 言
在先進(jìn)信息技術(shù)的不斷迭代更新下,膚色檢測已成為與人相關(guān)的絕大多數(shù)機(jī)器視覺 [1-2] 感官應(yīng)用的基石,例如手勢識別及控制、人的臉部檢測及定位和一些不合法規(guī)的圖片或視頻的過濾等。膚色檢測不僅可應(yīng)用于人體臉部及手部動作的識別體系,且在安全保密系統(tǒng)及醫(yī)療 [3] 方面也尤為重要。隨著攝像頭的大眾化,掀起了對視頻圖像膚色分割 [4] 的研究熱潮。利用 FPGA 的邏輯粘合性、實時控制性和對高速信號的采集及處理 [5],結(jié)合 OV5640 作為視頻圖像采集設(shè)備采集視頻信息送至 FPGA 做膚色檢測處理,隨后通過 VGA 顯示輸出結(jié)果。
1 膚色檢測設(shè)計
在雙色差或色調(diào)飽和度平面上,不同地域的人膚色變化不大,具備一致性和穩(wěn)定性,膚色存在差異的原因在于灰階值而非色度 [6]。因此將灰階值剝離出來,只在 CbCr 平面檢測像素點。
1.1 Matlab統(tǒng)計閾值
Matlab 對膚色進(jìn)行建模,利用 imhist 函數(shù)分別對黑人和黃種人的部分膚色圖像Cb 和 Cr 值進(jìn)行直方圖統(tǒng)計,找出其集中落點區(qū)域,并將此區(qū)域標(biāo)記為膚色區(qū)域。圖 1 所示為不同膚色原圖像,圖 2 為對應(yīng)膚色 Cb,Cr 值直方圖。
圖 1 不同膚色原圖
圖 2 對應(yīng)膚色 Cb,Cr 值直方圖
由圖 2、圖 3 可以看出不同人種膚色的 Cb 和 Cr 值都集中在 Cb=[100,126],Cr=[132,165] 區(qū)域,因此將落在此區(qū)域的像素點認(rèn)作人體的膚色。
1.2 膚色檢測原理
通常的色度彩色信號以 RGB 形式儲存,因此要先將彩色視頻信息從 RGB 信號轉(zhuǎn)換成 YCbCr 信號,再對其進(jìn)行膚色分割、膚色建模 [7]。YCbCr 是一種分別從灰階值和色度兩方面對圖像信號進(jìn)行編碼的色彩空間,其中灰階值、明亮度用 Y 表示,色調(diào)與飽和度用 CbCr 表示 [8-10],其通過輸入RGB 彩色信號生成,將 RGB 信號的特定部分依據(jù)一定的關(guān)系進(jìn)行疊加 [11],公式如下 :
轉(zhuǎn)換過程中有浮點小數(shù)的存在,由于 FPGA 很難完成浮點運算,因此將浮點小數(shù)轉(zhuǎn)換成定點小數(shù),利用 8 bit 來表示小數(shù)部分,將小數(shù)擴(kuò)大 28 倍,計算完成后,再右移 8 位即可, 操作如下 :
為了提高硬件運行性能,降低組合邏輯的復(fù)雜程度,采用流水線處理,將一個復(fù)雜的運算分布到 4 個時鐘周期完成轉(zhuǎn)換。
轉(zhuǎn)換完成后,根據(jù) Matlab 統(tǒng)計的結(jié)果,對 Cb 和 Cr 分量設(shè)置閾值,人體的膚色從背景里分離出來。如果輸入信號Cb 和 Cr 分量在閾值之間,將輸出設(shè)置為全 1,即把膚色標(biāo)記為白色 ;反之則將輸出設(shè)置為全 0,即把非膚色標(biāo)記為黑色。閾值設(shè)置如下 :
100 ≤ Cb ≤ 126
132 ≤ Cr ≤ 165
2 設(shè)計仿真
2.1 Matlab仿真
隨機(jī)找了兩張不同膚色的圖片,用 Matlab 仿真膚色檢測方案,證明該方案的可行性,結(jié)果如圖 3 所示。可見,即便膚色、背景大相徑庭,依然能夠?qū)⑷梭w的膚色成功剝離出來, 總體效果較好,說明該方案可行。
2.2 QuartusⅡ仿真
繼 Matlab 仿真之后,將其轉(zhuǎn)換成 Verilog 語言在 QuartusⅡ平臺上進(jìn)一步驗證。
膚色檢測的 RTL 圖如圖 4 所示。rgb_to_ycbcr 模塊完成了 RGB565 到 YCbCr 的轉(zhuǎn)換并且將膚色區(qū)域用白色標(biāo)記出來。攝像頭通過 cmos_write_req_gen 模塊寫入請求并生成讀寫地址索引 ;lut_ov5640_rgb565_1024_768 模塊進(jìn)行配置查找表 ;video_timing_data 模塊進(jìn)行生成幀讀取數(shù)據(jù)請求 ;frame_read_write 模塊進(jìn)行視頻幀數(shù)據(jù)讀寫控制 ;coms_8_16bit 模塊將 OV5640 輸出的 8 bit 數(shù)據(jù)拼接成 16 bit RGB565 數(shù)據(jù),完成一個圖像的傳輸 ;各模塊所需時鐘信號均通過 PLL 模塊倍頻或分頻得到。
3 硬件驗證
系統(tǒng)選用 Altera 公司的CycloneIV 系列EP4CE10F17FC8 芯片,500 萬像素的 OV5640 攝像頭組塊顯示 1 024×768 分辨率的視頻畫面,通過 DVP 接口與 FPGA 連接,先將視頻數(shù)據(jù)暫存到外部存儲器,再從外部存儲器將信息讀取出來, 送到 VGA 顯示模塊完成圖像的實時傳輸。其中 OV5640 通過硬件 FPGA 的 I2C 接口來完成寄存器的配置,將攝像頭的輸出分辨率和顯示器的分辨率設(shè)置一致,并在 0x4300 寄存器里將 OV5640 配置成 RGB565 輸出格式。外部存儲器選用同步動態(tài)隨機(jī)存儲器,其存取數(shù)據(jù)的速度比 FLASH 高,內(nèi)部結(jié)構(gòu)采用同步接口和完全流水線 [12-13],數(shù)據(jù)的傳輸速率較高,設(shè)計的運行速率大幅提高。
由于光線分布不均及攝像頭像素等因素,導(dǎo)致圖像出現(xiàn)像素點化且伴有光斑,離攝像頭越近,膚色剝離效果越好, 圖 5 為膚色檢測驗證結(jié)果。
圖 5 膚色檢測驗證結(jié)果
4 結(jié) 語
使用 Matlab 對不同膚色仿真得到膚色在色調(diào)和飽和度上的閾值,利用 FPGA 的并行性,在使用少量資源的前提下實現(xiàn)膚色檢測,將人體膚色從復(fù)雜背景中抽離出來,其結(jié)構(gòu)相對來說比較簡單且實時控制性強(qiáng),實驗效果較好,同時還能將其封裝成專用 IP 核 [14],便于其他系統(tǒng)使用,為后續(xù)建立與人體膚色相關(guān)的體系或過濾不雅觀圖片、視頻提供基礎(chǔ)。