一種數字圖像的快速美容方法
【專利摘要】一種數字圖像的快速美容方法,通過對原始圖像進行高斯模糊處理,提取綠色通道值,對綠色通道值進行線性光混合、強光混合,并重新計算混合后的綠色通道值,同時對原始圖像進行皮膚識別與美白處理,最后將重新計算的綠色通道值與皮膚識別得到的概率值相乘的積作為透明度,對原始圖像與美白圖像進行透明度混合形成美容圖像;本發明的圖像美容方法不僅高效而且美容效果好,可以廣泛應用于圖像處理領域,可利用在目前的個人電腦或者是手機、平板等平臺上的圖像后期處理軟件中,也可以用在帶數碼攝像頭的一些設備的相機實時濾鏡中;并且通過對原始圖像進行膚色識別,使算法不對黑色像素進行處理,從而保留了頭發、眼睛等關鍵部位不被處理,使得整個美容的效果更佳、更自然。
【專利說明】一種數字圖像的快速美容方法
【技術領域】
[0001]本發明涉及一種圖像處理方法,特別是一種數字圖像的快速美容方法。
【背景技術】
[0002]隨著科技的進步,越來越多載有高清或者微型攝像頭或者圖像獲取裝置的設備出現。如數碼相機,手機,平板,甚至是筆記本等等。無論是攝像設備的像素、光圈或者是拍攝環境的光線、平穩度甚至是設備的I/o性能等都會對成像質量造成影響,帶來的結果是成像與現實世界真實畫面有差距。這種差距可能與設備使用者的意愿相違背,或者是達不到使用者的美觀要求。由此衍生出來的各種圖像后期處理軟件,通過能圖像進行色彩上的處理,使得圖像在視覺上達到相比原始圖像更加符合使用者審美觀的效果。
[0003]但是許多處理方式由于在圖像的智能檢測方面做的不到位,或者處理方法不正確或者是處理過程復雜,耗時太久而造成圖像達不到使用者要求,甚至是使處理后的圖像往“丑”的方向進一步發展。
[0004]綜上所述,目前的一些對圖像美容方面的技術還遠不能滿足人們的需要,開發一種高效、有效的美容方法很有必要。
【發明內容】
[0005]本發明為解決上述問題,提供了一種效率較高的并且效果明顯的數字圖像的快速美容方法,可很大程度上對圖像進行美化,使得圖像更加符合使用者的審美觀念,并且通過對原始圖像進行膚色識別,使算法不對黑色像素進行處理,從而保留了頭發、眼睛等關鍵部位不被處理,使得整個美容的效果更佳、更自然。
[0006]為實現上述目的,本發明采用的技術方案為:
[0007]—種數字圖像的快速美容方法,其特征在于,包括以下步驟:
[0008]步驟1.從本地或遠程讀取原始圖像;
[0009]步驟2.對原始圖像進行高斯模糊處理,得到模糊圖像;
[0010]步驟3.依次提取原始圖像單個像素的綠色通道值G,該綠色通道與所述模糊圖像的對應像素進行線性光混合,得到第一綠色通道值Gl ;
[0011]步驟4.所述經過線性光混合后的第一綠色通道值Gl與其自身Gl進行連續的強光混合,得到第二綠色通道值G2 ;
[0012]步驟5.將第二綠色通道值G2與高斯模糊后的紅色通道值R和藍色通道值B相結合,計算出第三綠色通道值G3 ;
[0013]步驟6.對原始圖像進行顏色映射,得到美白圖像;
[0014]步驟7.對原始圖像進行膚色識別,得到對應的膚色概率值;
[0015]步驟8.以所述第三綠色通道值G3與對應的膚色概率值相乘得到的積作為透明度,對原始圖像與所述美白圖像進行透明度混合,形成美容圖像。
[0016]作為優選,所述步驟3中線性光混合的公式為:
[0017]Gl = (2*G_2*fg+l)/2
[0018]其中,Gl是指單個像素經過線性光混合后的綠色通道的顏色值,G是指單個像素的原始圖像的綠色通道的顏色值,fg是指步驟2中高斯模糊后的圖像中對應相同位置的像素的綠色通道的顏色值。
[0019]作為優選,所述步驟4中的連續的強光混合,其連續次數為I至10次。
[0020]作為優選,所述步驟4中強光混合的公式為:
[0021]resultColor = ((base) <=128? (base)*(base)/128:255-(255-(base))*(255-(base) )/128)
[0022]其中,resultColor為強光計算后的結果,base為步驟3中線性光混合計算后得到的G1。
[0023]作為優選,所述步驟5中的計算方法為:
[0024]if (Red < 0.5)
[0025]{
[0026]alphaValue = 1.0- (0.5-Red) *2.0 ;
[0027]}
[0028]Else
[0029]{
[0030]alphaValue =1.0;
[0031]}
[0032]G3 = G2*max(0.0, alphaValue_Blue*0.0019608);
[0033]其中,G3為第三綠色通道值,G2的初始值為所述步驟4中強光混合計算的結果,Red為高斯模糊后的紅色通道的值,Blue為高斯模糊后的藍色通道的值。
[0034]作為優選,所述步驟6中,對原始圖像進行顏色映射,得到美白圖像;其中,顏色映射的公式為:
[0035]oralColor = arrayCurve[oralColor];
[0036]其中arrayCurve為預定的一組顏色映射,oralColor為原始圖像中單個像素的紅色通道、綠色通道、藍色通道的顏色值。
[0037]作為優選,所述的步驟7中對原始圖像進行膚色識別,得到對應的膚色概率值,進一步包括以下步驟:
[0038]步驟71.對圖像進行人臉識別,獲取人臉區域;
[0039]步驟72.對所述的人臉區域進行均值計算,獲取平均膚色;
[0040]步驟73.根據所述的平均膚色計算當前圖像的膚色概率映射表;
[0041]步驟74.根據所述的膚色概率映射表對當前圖像進行膚色識別,并獲得當前圖像的膚色概率值。
[0042]作為優選,所述的步驟72進一步包括:
[0043]步驟721.初始化原始皮膚模型;
[0044]步驟722.計算整個圖像的顏色均值,作為初始皮膚的閾值;
[0045]步驟723.根據獲取得的初始皮膚的閾值計算人臉區域的平均膚色。
[0046]作為優選,所述的步驟722進一步包括:
[0047]步驟7221.遍歷整個圖像的像素點,將紅色通道、綠色通道、藍色通道的顏色值累力口,得到顏色累加和;
[0048]步驟7222.將顏色累加值除以像素點的總數,得到紅色通道、綠色通道、藍色通道的均值,作為初始皮膚的閾值。
[0049]作為優選,所述的步驟723進一步包括:
[0050]步驟7231.根據如下公式計算平均膚色的黑白值:
[0051]GRAY I = 0.299*RED+0.587*GREEN+0.114*BLUE
[0052]其中,GRAYl為灰度圖的當前像素點的灰度值;RED、GREEN、BLUE分別為圖像的當前像素點的紅、綠、藍通道的顏色值;
[0053]步驟7232.將所述的黑白值作為閾值,用來排除人臉區域非皮膚的部分;
[0054]步驟7233.依次遍歷人臉區域里的像素點的顏色值,根據如下公式獲得平均膚色:
[0055]skin = SkinModel[red][blue];
[0056]其中,skin為經過皮膚模型的顏色映射后的皮膚值;SkinModel為初始化原始皮膚模型;red為紅色通道的顏色值;blue為藍色通道的顏色值。
[0057]作為優選,所述的步驟73中根據所述的平均膚色計算當前圖像的膚色概率映射表,所述的膚色概率映射表通過如下步驟獲取:
[0058]步驟731.創建膚色概率映射表,大小為256*256 ;
[0059]步驟731.依次對膚色概率映射表進行賦值,具體偽代碼如下;
[0060]預設臨時變量1、j、SkinRed_Left、AlphaValue、Offset、TempAlphaValue、OffsetJ為整數類型;
[0061]膚色概率映射表的變量為SkinProbability[256] [256];
[0062]SkinRed為步驟7222計算得到的紅色通道的均值;SkinBlue為步驟7222計算得到的藍色通道的均值;
[0063]預設SkinRed_Left 的值,計算公式為:SkinRed_Left = SkinRed-128 ;
[0064]For(i = O ;i < 256 ;i++)
[0065]{
[0066]計算Offset 的值,公式為 Offset = max (0, min (255, i_SkinRed_Left));
[0067]判斷Offset的值是否小于128,如果小于的,話則AlphaValue = 0ffset*2 ;如果大于等于128的話,則AlphaValue = 255 ;
[0068]For(j = O ;j < 256 ;j++)
[0069]{
[0070]計算OffsetJ 的值,公式為 OffsetJ = max (O, j-SkinBlue);
[0071]計算TempAlphaValue 的值,公式為 TempAlphaValue =max (AlphaValue-(OffsetJ*2),0);
[0072]判斷TempAlphaValue 的值。如果大于 160 的話,則 SkinProbability [i] [j]的值為 255 ;
[0073]如果小于90的話,則SkinProbability [i] [j]的值為0;否貝丨JSkinProbability[i] [j]的值為 TempAlphaValue+30 ;
[0074]}
[0075]}
[0076]。
[0077]作為優選,所述的步驟74中根據所述的膚色概率映射表對當前圖像進行膚色識另IJ,并獲得當前圖像的膚色概率值,計算方法如下:
[0078]skinColor = SkinProbability[red][blue];
[0079]其中,skinColor為當前圖像的膚色概率值;SkinProbability為膚色概率映射表;red為像素點的紅色通道的顏色值;blue為像素點的藍色通道的顏色值。
[0080]作為優選,所述的步驟71中對圖像進行人臉識別,獲取人臉區域,當人臉區域識別失敗時,則將整個圖像定義為人臉區域。
[0081]作為優選,所述步驟8中以所述第三綠色通道值G3與對應的膚色概率值相乘得到的積作為透明度將原始圖像與所述美白圖像進行透明度混合的公式如下:
[0082]resultColor = oralColor*alpha+(1.0-alpha)^arrayColor ;
[0083]其中resultColor為處理后的美容圖像的顏色值;oralColor為原始圖像的顏色值;arrayColor為步驟6中得到的美白圖像的顏色值;alpha為步驟5中得到的G3進行歸一化的值乘以其對應的膚色概率值得到的積,所述歸一化即做以下公式:G3/255.0。
[0084]本發明的有益效果如下:
[0085]本發明可以廣泛應用于圖像處理領域,可用在目前的個人電腦或者是手機、平板等平臺上的圖像后期處理軟件中,也可以用在帶數碼攝像頭的一些設備的相機實時濾鏡中。總體來說,可以根據軟件設計者的意愿用于不同的圖像處理軟件領域。并且通過對原始圖像進行膚色識別,并以所述第三綠色通道值G3與膚色識別所得到的對應的膚色概率值相乘得到的積作為透明度將原始圖像與所述美白圖像進行透明度混合,從而形成美容圖像,使算法不對黑色像素進行處理,從而保留了頭發、眼睛等關鍵部位不被處理,使得整個美容的效果更佳、更自然。
【專利附圖】
【附圖說明】
[0086]此處所說明的附圖用來提供對本發明的進一步理解,構成本發明的一部分,本發明的示意性實施例及其說明用于解釋本發明,并不構成對本發明的不當限定。在附圖中:
[0087]圖1為本發明數字圖像的快速美容方法的具體流程圖。
【具體實施方式】
[0088]為了使本發明所要解決的技術問題、技術方案及有益效果更加清楚、明白,以下結合附圖及實施例對本發明進行進一步詳細說明。應當理解,此處所描述的具體實施例僅用以解釋本發明,并不用于限定本發明。
[0089]如圖1所示,本發明的一種數字圖像的快速美容方法,其特征在于,包括以下步驟:
[0090]步驟1.從本地或遠程讀取原始圖像;
[0091]步驟2.對原始圖像進行高斯模糊處理,得到模糊圖像;
[0092]步驟3.依次提取原始圖像單個像素的綠色通道值G,該綠色通道與所述模糊圖像的對應像素進行線性光混合,得到第一綠色通道值Gl ;
[0093]步驟4.所述經過線性光混合后的第一綠色通道值Gl與其自身Gl進行連續的強光混合,得到第二綠色通道值G2 ;
[0094]步驟5.將第二綠色通道值G2與高斯模糊后的紅色通道值R和藍色通道值B相結合,計算出第三綠色通道值G3 ;
[0095]步驟6.對原始圖像進行顏色映射,得到美白圖像;
[0096]步驟7.對原始圖像進行膚色識別,得到對應的膚色概率值;
[0097]步驟8.以所述第三綠色通道值G3與對應的膚色概率值相乘得到的積作為透明度,對原始圖像與所述美白圖像進行透明度混合,形成美容圖像。
[0098]步驟2中的高斯模糊是用正態分布計算圖像中每個像素的變換,
[0099]在N維空間的正態分布方程為:
[0100]C?|r) =....................-................................................................—ζ~* 扉*.I
[0101]在二維空間的正態分布方程為:
J1.\? -.!*.
[0102]CIitI, P) =
% - #
[0103]其中r是模糊半徑r2 = u2+v2, σ是正態分布的標準偏差,u是原像素點在χ軸上的位置偏移值,V是原像素點在y軸上的位置偏移值。
[0104]步驟3中線性光混合的公式為:
[0105]Gl = (2*G_2*fg+l)/2
[0106]其中,Gl是指單個像素經過線性光混合后的綠色通道的顏色值,G是指單個像素的原始圖像的綠色通道的顏色值,fg是指步驟2中高斯模糊后的圖像中對應相同位置的像素的綠色通道的顏色值。
[0107]步驟4中的強光混合步驟主要是為了將圖像顏色的差異拉大,從而達到美容的效果;連續的強光混合的次數為I至10次之間,連續的強光混合的次數較少時,美容效果較不明顯;連續的強光混合的次數較多時,美容效果容易失真;但都能夠實現美容的目的;本實施例中,連續的強光混合的次數為3次,其能夠更好地解決技術問題并達到更好的美容效果;本領域技術人員很可能根據不同的圖像美容方案選擇不同的混合次數。其強光混合的公式為:
[0108]resultColor = ((base) <=128? (base)*(base)/128:255-(255-(base))*(255-(base) )/128)
[0109]其中,resultColor為強光計算后的結果,base為步驟3中線性光混合計算后得到的G1。
[0110]步驟5中的計算方法的公式為:
[0111]if (Red < 0.5)
[0112]{
[0113]alphaValue = 1.0- (0.5-Red) *2.0 ;
[0114]}
[0115]Else
[0116]{
[0117]alphaValue =1.0;
[0118]}
[0119]G3 = G2*max(0.0, alphaValue_Blue*0.0019608);
[0120]其中,G3為第三綠色通道值,G2的初始值為步驟4中強光混合計算的結果,Red為高斯模糊后的紅色通道的值,Blue為高斯模糊后的藍色通道的值。
[0121]步驟6中,對原始圖像進行顏色映射,得到美白后的圖像;顏色映射的公式為:
[0122]oralColor = arrayCurve[oralColor];
[0123]其中arrayCurve為預定的一組顏色映射,oralColor為原始圖像中單個像素的紅色通道、綠色通道、藍色通道的顏色值。
[0124]步驟7中,所述的步驟7中對原始圖像進行膚色識別,得到對應的膚色概率值,進一步包括以下步驟:
[0125]步驟71.對圖像進行人臉識別,獲取人臉區域;當人臉區域識別失敗時,將整個圖像定義為人臉區域;
[0126]步驟72.對所述的人臉區域進行均值計算,獲取平均膚色;
[0127]步驟73.根據所述的平均膚色計算當前圖像的膚色概率映射表;
[0128]步驟74.根據所述的膚色概率映射表對當前圖像進行膚色識別,并獲得當前圖像的膚色概率值。
[0129]步驟71中涉及到的人臉識別,由于不涉及本發明的主要內容,因此不進行贅述。本實施例中,人臉識別方法采用常規方法,比如文獻“P.V1la and M.Jones.RapidObject Detect1n using a Boosted Cascade of Simple Features,in:Computer Vis1nand Pattern Recognit1n,2001.CVPR 2001.Proceedings of the 2001IEEE ComputerSociety Conference on”。根據定位獲得人臉的大致區域位置。
[0130]所述的步驟72進一步包括:
[0131]步驟721.初始化原始皮膚模型;
[0132]步驟722.計算整個圖像的顏色均值,作為初始皮膚的閾值;
[0133]步驟723.根據獲取得的初始皮膚的閾值計算人臉區域的平均膚色。
[0134]步驟721中,初始化原始皮膚模型的步驟如下:
[0135]步驟7211.創建膚色模型,大小為256*256 ;
[0136]步驟7212.依次對膚色模型進行賦值,具體偽代碼如下;
[0137]預設臨時變量AlphaValue、nMax、1、j為整數類型。
[0138]膚色模型變量為SkinModel [256] [256]
[0139]For(i = O ;i < 256 ;i++)
[0140]{
[0141]判斷i是否大于128,如果大于128,則AlphaValue為255,否則為i*2 ;
[0142]計算獲得nMax 的值,計算公式為 nMax = min (256, AlphaValue*2);
[0143]For(j = 0 ;j < nMax ;j++)
[0144]{
[0145]計算對應位置的膚色模型的值,計算公式為SkinModel [i] [j]=AlphaValue-(j/2);
[0146]}
[0147]For (j = nMax.j < 256 ; j++)
[0148]{
[0149]初始對應位置的膚色模型的值為O ;
[0150]}
[0151]}
[0152]。
[0153]如以程度代碼形式表示,則初始化原始皮膚模型的公式如下:
[0154]BYTE SkinModel[256][256];
[0155]BYTE AlphaValue = 255 ;
[0156]for(i = O ;i < 256 ;i++)
[0157]{
[0158]AlphaValue = (i < 128 ? (i << I):255);
[0159]int nMax = min(256, (AlphaValue << I));
[0160]for (j = 0 ;j < nMax ;++j)
[0161]{
[0162]SkinModel [i] [j] = AlphaValue- (j > > I);
[0163]}
[0164]for (j = nMax ; j < 256 ;++j)
[0165]{
[0166]SkinModel [i] [j] = 0 ;
[0167]}
[0168]}。
[0169]所述的步驟722進一步包括:
[0170]步驟7221.遍歷整個圖像的像素點,將紅色通道、綠色通道、藍色通道的顏色值累力口,得到顏色累加和;
[0171]步驟7222.將顏色累加值除以像素點的總數,得到紅色通道、綠色通道、藍色通道的均值,作為初始皮膚的閾值。
[0172]所述的步驟723進一步包括:
[0173]步驟7231.根據如下公式計算平均膚色的黑白值:
[0174]GRAY I = 0.299*RED+0.587*GREEN+0.114祁LUE
[0175]其中,GRAYl為灰度圖的當前像素點的灰度值;RED、GREEN、BLUE分別為圖像的當前像素點的紅、綠、藍通道的顏色值;
[0176]步驟7232.將所述的黑白值作為閾值,用來排除人臉區域非皮膚的部分;
[0177]步驟7233.依次遍歷人臉區域里的像素點的顏色值,根據如下公式獲得平均膚色:
[0178]skin = SkinModel [red] [blue];
[0179]其中,skin為經過皮膚模型的顏色映射后的皮膚值;SkinModel為初始化原始皮膚模型;red為紅色通道的顏色值;blue為藍色通道的顏色值。
[0180]所述的步驟73中根據所述的平均膚色計算當前圖像的膚色概率映射表,所述的膚色概率映射表通過如下步驟獲取:
[0181]步驟731.創建膚色概率映射表,大小為256*256 ;
[0182]步驟731.依次對膚色概率映射表進行賦值,具體偽代碼如下;
[0183]預設臨時變量1、j、SkinRed_Left、AlphaValue、Offset、TempAlphaValue、OffsetJ為整數類型;
[0184]膚色概率映射表的變量為SkinProbability[256] [256];
[0185]SkinRed為步驟7222計算得到的紅色通道的均值;SkinBlue為步驟7222計算得到的藍色通道的均值;
[0186]預設SkinRed_Left 的值,計算公式為:SkinRed_Left = SkinRed-128 ;
[0187]For(i = O ;i < 256 ;i++)
[0188]{
[0189]計算Offset 的值,公式為 Offset = max (0, min (255, i_SkinRed_Left));
[0190]判斷Offset的值是否小于128,如果小于的,話則AlphaValue = 0ffset*2 ;如果大于等于128的話,則AlphaValue = 255 ;
[0191]For(j = O ;j < 256 ;j++)
[0192]{
[0193]計算OffsetJ 的值,公式為 OffsetJ = max (O, j-SkinBlue);
[0194]計算TempAlphaValue 的值,公式為 TempAlphaValue = max (AlphaValue-(OffsetJ*2),O);
[0195]判斷TempAlphaValue 的值。如果大于 160 的話,則 SkinProbability [i] [j]的值為 255 ;
[0196]如果小于90的話,則SkinProbability [i] [j]的值為O;否貝丨JSkinProbability[i] [j]的值為 TempAlphaValue+30 ;
[0197]}
[0198]}
[0199]。
[0200]如以程度代碼形式表示,所述的膚色概率映射表具體通過如下公式獲取:
[0201]BYTE SkinModel[256][256];
[0202]BYTE AlphaValue = 255 ;
[0203]int SkinRed_Left = SkinRed-128 ;
[0204]for (int i = 0 ;i < 256 ;i++)
[0205]{
[0206]int Offset = max (0, min (255, (i_SkinRed_Left)));
[0207]if (Offset < 128)
[0208]{
[0209] AlphaValue = (Offset << I);
[0210]}
[0211]else
[0212]{
[0213]AlphaValue = 255 ;
[0214]}
[0215]for (int j = 0 ; j < 256 ; j++)
[0216]{
[0217]int OffsetJ = max(0, (j-SkinBlue));
[0218]int TempAlphaValue = max (AlphaValue-(Off set J >> 1),0);
[0219]if (TempAlphaValue > 160)
[0220]{
[0221]SkinModel [i] [j] = 255 ;
[0222]}
[0223]el se if (TempAlphaValue < 90)
[0224]{
[0225]SkinModel [i] [j] = 0 ;
[0226]}
[0227]else
[0228]{
[0229]SkinModel[i][j] = TempAlphaValue+30 ;
[0230]}
[0231]}
[0232]}
[0233]其中,SkinRed和SkinBlue為步驟7222中獲取的紅色通道和藍色通道的均值。
[0234]所述的步驟74中根據所述的膚色概率映射表對當前圖像進行膚色識別,并獲得當前圖像的膚色概率值,計算方法如下:
[0235]skinColor = SkinProbability[red][blue]
[0236]其中,skinColor為當前圖像的膚色概率值;SkinProbability為膚色概率映射表;red為像素點的紅色通道的顏色值;blue為像素點的藍色通道的顏色值。
[0237]所述步驟8中以所述第三綠色通道值G3與對應的膚色概率值相乘得到的積作為透明度將原始圖像與所述美白圖像進行透明度混合的公式如下:
[0238]resultColor = oralColor*alpha+(1.0-alpha)^arrayColor ;
[0239]其中resultColor為處理后的美容圖像的顏色值;oralColor為原始圖像的顏色值;arrayColor為步驟6中得到的美白圖像的顏色值;alpha為步驟5中得到的G3進行歸一化的值乘以其對應的膚色概率值得到的積,所述歸一化即做以下公式:G3/255.0。
[0240]下面結合附圖1對整個美容方法的各個步驟進行詳細說明,其包括:
[0241]步驟1:從本地或遠程讀取原始圖像,圖像包括單張圖像或從視頻上截取的單幀圖像或GIF動畫里的單幀;
[0242]步驟2:對原始圖像進行高斯模糊,其中,初始值i = 0,j = 0,w為原始圖像的寬,h為原始圖像的高;若i < h,判斷是否j < W,否則程序結束;若j < W,進入下一步程序,否則進行i = ++計算,并重新判斷是否i < h;
[0243]步驟3:依次提取原始圖像高斯模糊后像素點的綠色通道值G與fg,對其進行線性光混合得到第一綠色通道值Gl ;這里使用綠光是為了避免計算亮度的時間,提高了運算速度。
[0244]步驟4:對步驟3得到的Gl與自身進行連續3次的強光混合,得到第二綠色通道值G2 ;這個步驟的作用是拉大對比度,亮的更亮,暗的更暗;
[0245]步驟5:將第二綠色通道值G2與高斯模糊后的紅色通道值R和藍色通道值B相結合,根據一種新的計算方法重新計算出第三綠色通道值G3 ;
[0246]步驟6:將原始圖像進行美白的顏色映射,得到美白圖像。
[0247]步驟7.對原始圖像進行膚色識別,得到對應的膚色概率值;
[0248]步驟8.以所述第三綠色通道值G3與對應的膚色概率值相乘得到的積作為透明度將原始圖像與所述美白圖像進行透明度混合,形成美容圖像。
[0249]通過以上的實施方式的描述,數字圖像處理領域的技術人員可以清楚地了解到本發明可以通過軟件實現,也可以借助軟件及必要的通用硬件平臺的方式來實現。基于這樣的理解,本發明的技術方案可以以軟件產品的形式體現出來,該軟件產品可以存儲在一個非易失性存儲介質(可以是⑶-R0M,U盤,移動硬盤等)中,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網絡設備等)執行本發明各個實施例的方法。
[0250]上述說明示出并描述了本發明的優選實施例,如前,應當理解本發明并非局限于本文所披露的形式,不應看作是對其他實施例的排除,而可用于各種其他組合、修改和環境,并能夠在本文發明構想范圍內,通過上述教導或相關領域的技術或知識進行改動。而本領域人員所進行的改動和變化不脫離本發明的精神和范圍,則都應在本發明所附權利要求的保護范圍內。
【權利要求】
1.一種數字圖像的快速美容方法,其特征在于,包括以下步驟: 步驟1.從本地或遠程讀取原始圖像; 步驟2.對原始圖像進行高斯模糊處理,得到模糊圖像; 步驟3.依次提取原始圖像單個像素的綠色通道值G,該綠色通道與所述模糊圖像的對應像素進行線性光混合,得到第一綠色通道值Gl ; 步驟4.所述經過線性光混合后的第一綠色通道值Gl與其自身Gl進行連續的強光混合,得到第二綠色通道值G2; 步驟5.將第二綠色通道值G2與高斯模糊后的紅色通道值R和藍色通道值B相結合,計算出第三綠色通道值G3; 步驟6.對原始圖像進行顏色映射,得到美白圖像; 步驟7.對原始圖像進行膚色識別,得到對應的膚色概率值; 步驟8.以所述第三綠色通道值G3與對應的膚色概率值相乘得到的積作為透明度,對原始圖像與所述美白圖像進行透明度混合,形成美容圖像。
2.根據權利要求1所述的一種數字圖像的快速美容方法,其特征在于:所述步驟3中線性光混合的公式為:
Gl = (2*G-2*fg+l)/2 其中,Gl是指單個像素經過線性光混合后的綠色通道的顏色值,G是指單個像素的原始圖像的綠色通道的顏色值,fg是指步驟2中高斯模糊后的圖像中對應相同位置的像素的綠色通道的顏色值。
3.根據權利要求1所述的一種數字圖像的快速美容方法,其特征在于:所述步驟4中的連續的強光混合,其連續次數為I至10次。
4.根據權利要求3所述的一種數字圖像的快速美容方法,其特征在于:所述步驟4中強光混合的公式為:
resultColor = ((base) < = 128 ? (base) * (base)/128:255-(255-(base)) * (255-(base))/128) 其中,resultColor為強光計算后的結果,base為步驟3中線性光混合計算后得到的Gl0
5.根據權利要求1所述的一種數字圖像的快速美容方法,其特征在于:所述步驟5中的計算方法為:
if (Red < 0.5)
{
alphaValue = 1.0- (0.5-Red) *2.0 ;
}
Else
{
alphaValue = 1.0;
}
G3 = G2*max(0.0, alphaValue_Blue*0.0019608); 其中,G3為第三綠色通道值,G2的初始值為所述步驟4中強光混合計算的結果,Red為高斯模糊后的紅色通道的值,Blue為高斯模糊后的藍色通道的值。
6.根據權利要求1所述的一種數字圖像的快速美容方法,其特征在于:所述步驟6中,對原始圖像進行顏色映射,得到美白圖像;其中,顏色映射的公式為:
oralColor = arrayCurve[oralColor]; 其中arrayCurve為預定的一組顏色映射,oralColor為原始圖像中單個像素的紅色通道、綠色通道、藍色通道的顏色值。
7.根據權利要求1所述的一種數字圖像的快速美容方法,其特征在于:所述的步驟7中對原始圖像進行膚色識別,得到對應的膚色概率值,進一步包括以下步驟: 步驟71.對圖像進行人臉識別,獲取人臉區域; 步驟72.對所述的人臉區域進行均值計算,獲取平均膚色; 步驟73.根據所述的平均膚色計算當前圖像的膚色概率映射表; 步驟74.根據所述的膚色概率映射表對當前圖像進行膚色識別,并獲得當前圖像的膚色概率值。
8.根據權利要求7所述的一種數字圖像的快速美容方法,其特征在于,所述的步驟72進一步包括: 步驟721.初始化原始皮膚模型; 步驟722.計算整個圖像的顏色均值,作為初始皮膚的閾值; 步驟723.根據獲取得的初始皮膚的閾值計算人臉區域的平均膚色。
9.根據權利要求8所述的一種數字圖像的快速美容方法,其特征在于,所述的步驟722進一步包括: 步驟7221.遍歷整個圖像的像素點,將紅色通道、綠色通道、藍色通道的顏色值累加,得到顏色累加和; 步驟7222.將顏色累加值除以像素點的總數,得到紅色通道、綠色通道、藍色通道的均值,作為初始皮膚的閾值。
10.根據權利要求8所述的一種數字圖像的快速美容方法,其特征在于,所述的步驟723進一步包括: 步驟7231.根據如下公式計算平均膚色的黑白值:
GRAY I = 0.299*RED+0.587*GREEN+0.114祁LUE 其中,GRAYl為灰度圖的當前像素點的灰度值;RED、GREEN、BLUE分別為圖像的當前像素點的紅、綠、藍通道的顏色值; 步驟7232.將所述的黑白值作為閾值,用來排除人臉區域非皮膚的部分; 步驟7233.依次遍歷人臉區域里的像素點的顏色值,根據如下公式獲得平均膚色: skin = SkinModel[red][blue]; 其中,skin為經過皮膚模型的顏色映射后的皮膚值;SkinModel為初始化原始皮膚模型;red為紅色通道的顏色值;blue為藍色通道的顏色值。
11.根據權利要求7所述的一種數字圖像的快速美容方法,其特征在于,所述的步驟73中根據所述的平均膚色計算當前圖像的膚色概率映射表,所述的膚色概率映射表通過如下步驟獲取: 步驟731.創建膚色概率映射表,大小為256*256 ; 步驟731.依次對膚色概率映射表進行賦值,具體偽代碼如下; 預設臨時變量 1、j、SkinRed_Left、AlphaValue、Offset、TempAlphaValue> OffsetJ 為整數類型; 膚色概率映射表的變量為SkinProbability [256] [256]; SkinRed為步驟7222計算得到的紅色通道的均值;SkinBlue為步驟7222計算得到的藍色通道的均值; 預設 SkinRed_Left 的值,計算公式為:SkinRed_Left = SkinRed-128 ;
For(i = O ;i < 256 ;i++)
{
計算 Offset 的值,公式為 Offset = max (0, min (255, i_SkinRed_Left)); 判斷Offset的值是否小于128,如果小于的,話則AlphaValue = 0ffset*2 ;如果大于等于 128 的話,則 AlphaValue = 255 ;
For (j = O ;j < 256 ;j++)
{ 計算 OffsetJ 的值,公式為 OffsetJ = max (O, j-SkinBlue);
計算 TempAlphaValue 的值,公式為 TempAlphaValue = max (AlphaValue- (0ffsetJ*2),O); 判斷TempAlphaValue的值。如果大于160的話,貝丨J SkinProbability[i] [j]的值為255 ; 如果小于 90 的話,則 SkinProbability [i] [j]的值為 O ;否則 SkinProbability [i] [j]的值為 TempAlphaValue+30 ;
}
}
ο
12.根據權利要求7所述的一種數字圖像的快速美容方法,其特征在于,所述的步驟74中根據所述的膚色概率映射表對當前圖像進行膚色識別,并獲得當前圖像的膚色概率值,計算方法如下:
skinColor = SkinProbability[red][blue] 其中,skinColor為當前圖像的膚色概率值;SkinProbability為膚色概率映射表;red為像素點的紅色通道的顏色值;blue為像素點的藍色通道的顏色值。
13.根據權利要求7所述的一種數字圖像的快速美容方法,其特征在于,所述的步驟71中對圖像進行人臉識別,獲取人臉區域,當人臉區域識別失敗時,則將整個圖像定義為人臉區域。
14.根據權利要求1所述的一種數字圖像的快速美容方法,其特征在于:所述步驟8中以所述第三綠色通道值G3與對應的膚色概率值相乘得到的積作為透明度將原始圖像與所述美白圖像進行透明度混合的公式如下:
resultColor = oralColor氺alpha+(1.0-alpha)^arrayColor ; 其中resultColor為處理后的美容圖像的顏色值;oralColor為原始圖像的顏色值;arrayColor為步驟6中得到的美白圖像的顏色值;alpha為步驟5中得到的G3進行歸一化的值乘以其對應的膚色概率值得到的積,所述歸一化即做以下公式:G3/255.0。
【文檔編號】G06T5/00GK104282002SQ201410488602
【公開日】2015年1月14日 申請日期:2014年9月22日 優先權日:2014年9月22日
【發明者】張偉, 傅松林, 張長定, 李志陽 申請人:廈門美圖網科技有限公司