步驟20 :篩選膚色區(qū)域中人臉所在位置處的第一膚色子區(qū)域,該人臉所在位置通 過人臉識別得到;
[0057] 利用人臉識別技術,將人物圖像中的人臉所在位置,現(xiàn)有技術中的人臉識別技術 已經(jīng)很成熟,常用的算法有:基于adaboost機器學習的算法,開源庫有OpenCV,商業(yè)的有 Face++等;將獲取到的人臉所在位置與提取到的膚色區(qū)域相對應,篩選出膚色區(qū)域中人臉 所在位置處的第一膚色子區(qū)域;
[0058] 可選地,為提高膚色區(qū)域提取和人臉識別的準確性,在獲取人物圖像中的膚色區(qū) 域的步驟之前還包括:對人物圖像進行預處理操作,預處理需經(jīng)過必要的去噪濾波,如果該 人物圖像的亮度較差,比較昏暗的話,需進行彩色均衡化增強處理,具體方法如下:把人物 圖像從RGB空間轉(zhuǎn)換到Y(jié)IQ空間,對I進行均衡化,均衡化后轉(zhuǎn)回到RGB空間;算法可以采 用經(jīng)典的直方圖均衡化算法。
[0059] 步驟30 :提取第一膚色子區(qū)域的像素特征信息;
[0060] 統(tǒng)計第一膚色子區(qū)域內(nèi)的像素點,計算像素總數(shù)的算法如下:
[0061] SkinPixCount = Weight*Height (ifValue (pix) !=白色)
[0062] 其中,SkinPixCount表示符合條件的像素點的總數(shù);Weight表示第一膚色子區(qū)域 的長度;Height表示第一膚色子區(qū)域的寬度;Value(pix)表示第一膚色內(nèi)任何一點的像 素,且該像素滿足一個條件,就是該像素為非白色,這就是說白色作為非膚色區(qū)域;采用這 個算法就可以將第一膚色區(qū)域長度和寬度范圍內(nèi)的全部像素點都統(tǒng)計到,從而得到該區(qū)域 內(nèi)的像素總數(shù);根據(jù)像素點的統(tǒng)計結(jié)果計算第一膚色子區(qū)域的像素均值;
[0063] 計算人物圖像中人臉所在的中心區(qū)域,經(jīng)驗算法為:取人臉面積的1/4大小,長和 寬分別是人臉大小的1/2,該區(qū)域的中心和人臉中心一致;依據(jù)本算法的思想,可采用以下 算法得到該中心區(qū)域的左上角坐標和右下角坐標,從而確定該中心區(qū)域的位置:
[0066] 其中,GreenBox(LU)表示該中心區(qū)域的左上角坐標;GreenBox(RB)表示該中心區(qū) 域的右下角坐標;FaceWidth表示人臉所在位置區(qū)域的寬度;FaceHeight表示人臉所在位 置區(qū)域的高度,在進行人臉識別后,會獲取到人臉所在位置區(qū)域的寬度和高度這兩個參數(shù), 進而可以計算得到中心區(qū)域的左上角坐標和右下角坐標,從而得到該中心區(qū)域;
[0067] 計算人物圖像中人臉所在的中心區(qū)域內(nèi)像素的HSI均值,即色度、飽和度和強度 的平均值,得到第一膚色子區(qū)域的顏色特征;具體可根據(jù)以下算法實現(xiàn):
[0068] HAvg = Η/SkinPixCount
[0069] SAvg = S/SkinPixCount
[0070] IAvg = Ι/SkinPixCount
[0071] 其中,HAvg表示該中心區(qū)域內(nèi)色度的平均值;SAvg表示該中心區(qū)域內(nèi)飽和度的平 均值;IAvg表示該中心區(qū)域內(nèi)強度的平均值;SkinPixCount表示該中心區(qū)域內(nèi)像素總數(shù), 利用上述計算第一膚色子區(qū)域內(nèi)像素總數(shù)的算法,只需將該中心區(qū)域的長度和寬度的數(shù)值 代替原第一膚色子區(qū)域的長度和寬度數(shù)值,即可計算出該中心區(qū)域的像素總數(shù)。
[0072] 步驟40 :采用聚類算法將膚色區(qū)域劃分為多個第二膚色子區(qū)域;
[0073] 這個步驟是核心步驟之一,分割的輸入是第一次分割得到的人物圖像中的膚色區(qū) 域,在這個基礎上進行第二次分割能大大減少非膚色區(qū)域的干擾;分割時我們一般會設定 經(jīng)驗塊數(shù)6,分割后我們會得到6個第二膚色子圖,其中包括我們所需要的真正的膚色子圖 和無用的其它類膚色子圖;我們需要把真正的膚色子圖找出來,其中真正的膚色子圖可能 不止一個,有多個真正的膚色子圖時則需要合并;這就需要利用之前提取的第一膚色子區(qū) 域內(nèi)的像素特征信息。將相應的第二膚色子區(qū)域準確地找出來;
[0074] 可選地,通過對RGB/LUV/HSV多個顏色空間的測試比較,HSI空間的膚色分割效果 相對最好,而第一次分割得出的膚色區(qū)域是基于RGB顏色空間得到的,首先需利用RGB轉(zhuǎn) HIS算法,將該膚色區(qū)域轉(zhuǎn)換到HIS顏色空間下;然后再利用聚類算法將該膚色區(qū)域劃分為 多個子圖,進而得到第二膚色子區(qū)域;其中,現(xiàn)階段成熟的聚類算法有很多,如:K-MEANS、 ROCK、STING 等。
[0075] 步驟50 :合并與第一膚色子區(qū)域像素特征信息比值在預定范圍內(nèi)的第二膚色子 區(qū)域,得到初級膚色子圖;
[0076] 經(jīng)過聚類分割后會得到多個第二膚色子區(qū)域,其中包括真正的膚色子圖和好多個 類膚色子圖,這就需要把類膚色子圖過濾掉;在這里過濾的方法是根據(jù)計算第一膚色子區(qū) 域的像素特征信息的算法計算所有第二膚色子區(qū)域的像素特征信息,再將第二膚色子區(qū)域 的像素特征信息與第一膚色子區(qū)域的像素特征信息相比,比值落在預定范圍內(nèi)的第二膚色 子區(qū)域則為真正的膚色子圖,將符合條件的第二膚色子區(qū)域進行合并,即可得到該人物圖 像的初級膚色子圖;其中確定第二膚色子圖中的真正的膚色子圖可采用以下算法實現(xiàn):
[0077]
[0078]
[0079]
[0080] 其中,HsubAvg表示第二膚色子區(qū)域的色調(diào)的平均值,具體可根據(jù)計算第一膚色 子區(qū)域的色調(diào)平均值的算法進行計算;SsubAvg表示第二膚色子區(qū)域的飽和度平均值,具 體可根據(jù)計算第一膚色子區(qū)域的飽和度平均值的算法進行計算;IsubAvg表示第二膚色子 區(qū)域的強度平均值,具體可根據(jù)計算第一膚色子區(qū)域的強度平均值的算法進行計算;當?shù)?二膚色子區(qū)域與第一膚色子區(qū)域中的色調(diào)、飽和度和強度的平均值的差值均滿足預定閥值 內(nèi)時,則認為找到了一個真正的膚色子圖;其中,為確定主膚色子圖,則需利用下述算法確 定:
[0081] SkinPixCount (subFace)/SkinPixCount (Face) e [0.8,1.2]
[0082] 其中,SkinPixCount (subFace)表示第二膚色子區(qū)域內(nèi)的像素點總數(shù), SkinPixCount (face)表示第一膚色區(qū)域內(nèi)的像素點總數(shù),當這兩個數(shù)值的比值在預定的閥 值內(nèi),則可提取出真正膚色子圖中的主膚色子圖。
[0083] 在經(jīng)過兩次分割后,我們得到了初級膚色子圖,該膚色子圖的膚色邊界可能需要 修正,還有該初級膚色子圖有時并不能包括所有的膚色子圖,如果皮膚有高光等原因,可能 只會取到一部分;這樣就有必要使用連通域的方法,得到全部的膚色子圖,如圖2所示,本 發(fā)明的圖像分離方法還包括:
[0084] 步驟60 :對人物圖像進行灰度化處理,提取人物圖像中人物的輪廓;
[0085] 此步驟中可以使用經(jīng)典的canny算法提取,具體實現(xiàn)可以使用開源的OpenCV ;
[0086] 步驟70 :采用連通域算法,在輪廓中找到初級膚色子圖的所在位置,得到初級膚 色子圖的連通區(qū)域;
[0087] 根據(jù)得到的初級膚色子圖和提取到的輪廓,可以在輪廓中找到初級膚色子圖所在 的位置,利用連通域算法,如常用的漫水填充算法,即可將輪廓內(nèi)的區(qū)域找齊,這樣就得到 了初級膚色區(qū)域的連通區(qū)域;
[0088] 步驟80 :獲取人物圖像中對應該連通區(qū)域的區(qū)域,則得到完整的膚色子圖;
[0089] 在原人物圖像中將對應初級膚色區(qū)域的連通區(qū)域提取出來,即可得到完整的膚色 子圖。
[0090] 本發(fā)明的圖像分離方法,用于分離人物圖像中的膚色子圖,通過對人物圖像進行 兩次過濾得到膚色區(qū)域,并對該膚色區(qū)域進行第一次分割得到人臉所在位置處的第一膚色 子區(qū)域,進行第二次分割得到第二膚色子區(qū)域,再將與第一膚色子區(qū)域像素特征信息比值 在預定范圍內(nèi)的第二膚色子區(qū)域進行合并,得到該人物圖像中初級膚色子圖,通過兩次分 割方式,避免了現(xiàn)有圖像分離技術中存在漏檢的現(xiàn)象;而基于人臉識別獲得的第一膚色子 區(qū)域的像素特征信息最接近人物膚色的像素特征信息,將與第一膚色子區(qū)域像素特征信息 的比值在預定范圍內(nèi)的第二膚色子區(qū)域進行合并,得到初級膚色子圖,這樣就將膚色區(qū)域 篩選出來