董迎春
摘 要:在Matlab上采用膚色范圍靜態(tài)膚色建模方式,利用閾值化法統(tǒng)計輸入像素在YCbCr色彩空間下色度Cb,Cr的集中落點區(qū)域;采取基于YCbCr信號閾值的膚色分割,灰階值作為膚色檢測結果的輸出,在Quartus Ⅱ上進行功能仿真,F(xiàn)PGA驗證表明:在所用資源比較少的情況下,可實現(xiàn)人體膚色的實時檢測。
關鍵詞:Matlab;閾值化;YCbCr;膚色檢測;Quartus Ⅱ;FPGA
中圖分類號:TP39文獻標識碼:A文章編號:2095-1302(2019)08-00-03
0 引 言
在先進信息技術的不斷迭代更新下,膚色檢測已成為與人相關的絕大多數(shù)機器視覺[1-2]感官應用的基石,例如手勢識別及控制、人的臉部檢測及定位和一些不合法規(guī)的圖片或視頻的過濾等。膚色檢測不僅可應用于人體臉部及手部動作的識別體系,且在安全保密系統(tǒng)及醫(yī)療[3]方面也尤為重要。隨著攝像頭的大眾化,掀起了對視頻圖像膚色分割[4]的研究熱潮。利用FPGA的邏輯粘合性、實時控制性和對高速信號的采集及處理[5],結合OV5640作為視頻圖像采集設備采集視頻信息送至FPGA做膚色檢測處理,隨后通過VGA顯示輸出結果。
1 膚色檢測設計
在雙色差或色調(diào)飽和度平面上,不同地域的人膚色變化不大,具備一致性和穩(wěn)定性,膚色存在差異的原因在于灰階值而非色度[6]。因此將灰階值剝離出來,只在CbCr平面檢測像素點。
1.1 Matlab統(tǒng)計閾值
Matlab對膚色進行建模,利用imhist函數(shù)分別對黑人和黃種人的部分膚色圖像Cb和Cr值進行直方圖統(tǒng)計,找出其集中落點區(qū)域,并將此區(qū)域標記為膚色區(qū)域。圖1所示為不同膚色原圖像,圖2為對應膚色Cb,Cr值直方圖。
由圖2、圖3可以看出不同人種膚色的Cb和Cr值都集中在Cb=[100,126],Cr=[132,165]區(qū)域,因此將落在此區(qū)域的像素點認作人體的膚色。
1.2 膚色檢測原理
通常的色度彩色信號以RGB形式儲存,因此要先將彩色視頻信息從RGB信號轉換成YCbCr信號,再對其進行膚色分割、膚色建模[7]。YCbCr是一種分別從灰階值和色度兩方面對圖像信號進行編碼的色彩空間,其中灰階值、明亮度用Y表示,色調(diào)與飽和度用CbCr表示[8-10],其通過輸入RGB彩色信號生成,將RGB信號的特定部分依據(jù)一定的關系進行疊加[11],公式如下:
轉換過程中有浮點小數(shù)的存在,由于FPGA很難完成浮點運算,因此將浮點小數(shù)轉換成定點小數(shù),利用8 bit來表示小數(shù)部分,將小數(shù)擴大28倍,計算完成后,再右移8位即可,操作如下:
為了提高硬件運行性能,降低組合邏輯的復雜程度,采用流水線處理,將一個復雜的運算分布到4個時鐘周期完成轉換。
轉換完成后,根據(jù)Matlab統(tǒng)計的結果,對Cb和Cr分量設置閾值,人體的膚色從背景里分離出來。如果輸入信號Cb和Cr分量在閾值之間,將輸出設置為全1,即把膚色標記為白色;反之則將輸出設置為全0,即把非膚色標記為黑色。閾值設置如下:
100≤Cb≤126
132≤Cr≤165
2 設計仿真
2.1 Matlab仿真
隨機找了兩張不同膚色的圖片,用Matlab仿真膚色檢測方案,證明該方案的可行性,結果如圖3所示??梢?,即便膚色、背景大相徑庭,依然能夠將人體的膚色成功剝離出來,總體效果較好,說明該方案可行。
2.2 Quartus Ⅱ仿真
繼Matlab仿真之后,將其轉換成Verilog語言在Quartus Ⅱ平臺上進一步驗證。
膚色檢測的RTL圖如圖4所示。rgb_to_ycbcr模塊完成了RGB565到YCbCr的轉換并且將膚色區(qū)域用白色標記出來。攝像頭通過cmos_write_req_gen模塊寫入請求并生成讀寫地址索引;lut_ov5640_rgb565_1024_768模塊進行配置查找表;video_timing_data模塊進行生成幀讀取數(shù)據(jù)請求;frame_read_write模塊進行視頻幀數(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接口來完成寄存器的配置,將攝像頭的輸出分辨率和顯示器的分辨率設置一致,并在0x4300寄存器里將OV5640配置成RGB565輸出格式。外部存儲器選用同步動態(tài)隨機存儲器,其存取數(shù)據(jù)的速度比FLASH高,內(nèi)部結構采用同步接口和完全流水線[12-13],數(shù)據(jù)的傳輸速率較高,設計的運行速率大幅提高。
由于光線分布不均及攝像頭像素等因素,導致圖像出現(xiàn)像素點化且伴有光斑,離攝像頭越近,膚色剝離效果越好,圖5為膚色檢測驗證結果。
4 結 語
使用Matlab對不同膚色仿真得到膚色在色調(diào)和飽和度上的閾值,利用FPGA的并行性,在使用少量資源的前提下實現(xiàn)膚色檢測,將人體膚色從復雜背景中抽離出來,其結構相對來說比較簡單且實時控制性強,實驗效果較好,同時還能將其封裝成專用IP核[14],便于其他系統(tǒng)使用,為后續(xù)建立與人體膚色相關的體系或過濾不雅觀圖片、視頻提供基礎。
參 考 文 獻
[1]李昌盛,王亞娟,黃啟俊,等.基于FPGA的人臉檢測系統(tǒng)設計
[J].電子技術應用,2011,37(10):13-16.
[2]潘志庚,鄒鵬程,梁榮華.基于特征人臉和膚色統(tǒng)計的人臉檢測
[J].系統(tǒng)仿真學報,2004(6).
[3]陳鍛生,劉政凱.膚色檢測技術綜述[J].計算機學報,2006,29(2):194-207.
[4] PHUNG S L,BOUZERDOUM A , CHAI D. Skin segmentation using color pixel classification:analysis and comparison [J]. IEEE transactions on pattern analysis and machine intelligence,2005,2(1):148-154.
[5]吳厚航.勇敢的芯伴你玩轉Altera FPGA[M].北京:清華大學出版社,2017.
[6]張星.基于內(nèi)容的不良圖像人體軀干檢測技術研究[D].蘭州:蘭州大學,2009.
[7]楊振潔,賈皓強,趙富康.基于Matlab的人臉識別與分割[J].通訊世界,2017(12):289.
[8]肖柏清.基于FPGA的人臉檢測系統(tǒng)的研究與設計[D].長沙:中南大學,2014.
[9]樂斌.一種基于OpenCV的人臉輪廓化方法[J].工業(yè)控制計算機,2014(10):107-108.
[10]袁曉鵬.基于Rentinex理論的圖像增強研究[D].天津:中國民航大學,2015.
[11]張闖.單通道雙譜微光彩色夜視技術研究[D].南京:南京理工大學,2008.
[12]呂曉明.基于DSP的視覺傳感器的關鍵技術研究[D].天津:天津大學,2007.
[13]王玉冰.基于FPGA+DSP的圖像融合系統(tǒng)設計[D].西安:中國科學院研究生院(西安光學精密機械研究所),2011.
[14]張晉,莊再姣,劉會剛,等.一種區(qū)域逐像素點膚色檢測算法[J].南開大學學報(自然科學版),2016,49(4):38-42.