<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 人臉美妝之唇色檢測算法研究 目前,隨著人臉檢測識別技術的日趨成熟,人臉美化技術的競爭也愈演愈烈,諸如移動設備應用類中的美咖相機,美圖秀秀,Perfect 365,天天P圖等等,這些應用無疑都在給人們的感官生活帶來新的樂趣與新的體驗,今天,我在這里給大家介紹一下,這些人臉美妝技術中一個必不可少的內容—-唇彩。 # 唇彩的實現分為以下幾個步驟: * **嘴唇粗略檢測** * **嘴唇精確檢測** * **嘴唇涂色** * * * ##嘴唇粗略檢測 嘴唇粗略檢測的方法包括兩種:? - 1\. 手動標記? 手動標記往往是讓用戶自己移動特征點來定位嘴唇區域。這種方式略繁瑣。? - 2\. 自動標記? 自動標記往往是通過人臉識別技術,獲取嘴唇的大概位置。人臉識別的技術目前已經日趨成熟,市面上諸如Face++等等,我們可以直接調用。? 一般而言,目前的美妝軟件中,首先使用自動標記,得到嘴唇的大概位置,如果無法檢測到人臉,那么,會進一步讓用戶手動標記,這樣給用戶一種友好的用戶體驗。 ##嘴唇精確檢測 嘴唇精確位置檢測,關系到唇彩的準確度,進而影響美妝的整體效果。這里我介紹兩種簡單的嘴唇檢測算法:? - 1\. 基于YIQ顏色空間的唇色檢測算法? -參考論文:基于膚色和唇色信息的人臉檢測方法的研究 ~~~ 算法原理:在YIQ顏色空間中,Y表示亮度信號,I和Q表示色度信號,Q分量代表的顏色變化正好覆蓋了嘴唇的顏色范圍,因此,通過對嘴唇樣本的分析,得到嘴唇區域在YIQ顏色空間中的分布范圍,以此來判斷唇色。 YIQ顏色空間與RGB顏色空間對應關系如下: Y = 0.299 * r + 0.587 * g + 0.114 * b; I = 0.596 * r - 0.275 * g - 0.321 * b; Q = 0.212 * r - 0.523 * g + 0.311 * b; ~~~ 唇色統計的分布結果: | 分量 | 范圍 | | --- | --- | | Y | [80,220] | | I | [12,78] | | Q | [7,25] | 對于當前像素P(x,y),先轉換為YIQ,然后分辨判斷YIQ分量是否符合上述唇色分布結果,如果符合,則該像素為唇色像素。? -2\. 基于R,G分量分析的唇色檢測算法? -參考文獻:一種快速魯棒的唇部檢測方法? 這個算法主要是提出了一個唇色判斷公式:? logG(B0.391?R0.609)T 這個公式的由來,是作者根據另外一篇文獻TW Lewis.Lip feature extraction using ed exclusion.改進而來,至于原因什么的我們不用關心,我們關心的是如何最簡單的理解與實現效果呵呵。? 這篇論文中并沒有給出T的取值,這里我給一個經驗值:T= - 0.15;? 公式中的B,R自然就是RGB顏色空間的對應分量了,對應于某個像素P(x,y),如果符合這個公式,那么,這個像素就是唇色像素了。? -3\. 算法效果? 以上兩種算法的效果如下所示:? ![](https://box.kancloud.cn/2015-12-30_56837dec55256.jpg)? 以上兩種方法是基于顏色空間唇色統計的方法,具有速度快,計算簡單的特點,但是,由于統計的結果只代表大多數,并非全部,因此,這兩種像素都不可能完全判斷各種條件下的唇色像素,尤其是不同環境光條件下,容易出現誤判。對于這個缺點,一般,我們會在人臉識別后,得到嘴唇的大概位置,在這個大概位置中,使用這些算法,這樣一般就可以檢測到相對準確的嘴唇區域了,后期在結合一些形態學算子,就可以得到準確的嘴唇區域了,對于唇彩涂色,也就完成了關鍵的一步了。 ##嘴唇涂色 嘴唇涂色就是根據嘴唇檢測得到的準確區域,結合顏色Color的RGB值對其進行上色的過程。? 嘴唇涂色一般使用YUV顏色空間,Y表示灰度值,UV表示顏色特征。假設嘴唇區域某像素P(x,y),涂色值Color(R,G,B),我們先計算P的Y值,然后計算Color的UV值,這樣我們就得到了涂色之后的目標YUV,在將這個YUV映射到RGB即可。 ##主要代碼 這里放上嘴唇檢測的代碼程序,供大家參考: ~~~ public Bitmap LipsDetectBmp(Bitmap src) { Bitmap a = new Bitmap(src); int w = a.Width; int h = a.Height; BitmapData srcData = a.LockBits(new Rectangle(0, 0, a.Width, a.Height), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb); byte* p = (byte*)srcData.Scan0; int r = 0, g = 0, b = 0, offset = srcData.Stride - w * 4; double Y = 0, I = 0, Q = 0; double k = 0; for (int j = 0; j < h; j++) { for (int i = 0; i < w; i++) { b = p[0]; g = p[1]; r = p[2]; ////////////////Process image... //算法1 Y = 0.299 * r + 0.587 * g + 0.114 * b; I = 0.596 * r - 0.275 * g - 0.321 * b; Q = 0.212 * r - 0.523 * g + 0.311 * b; if ((Y >= 80 && Y <= 220 && I >= 12 && I <= 78 && Q >= 7 && Q <= 25)) { p[0] = (byte)255; p[1] = 0; p[2] = (byte)255; } //算法2 //k = Math.Log((double)g / (Math.Pow((double)b, 0.391) * Math.Pow((double)r, 0.609)));//使用算法 ////2時把算法1注釋掉即可 //if (k < -0.15) //{ // p[0] = (byte)255; // p[1] = 0; // p[2] = (byte)255; //} p += 4; } p += offset; } a.UnlockBits(srcData); return a; } ~~~ ## 總結 以上就是美妝算法中的唇彩算法過程了,跟大家分享一下,共勉!有什么不明白的可以給我留言或郵件dongtingyue@163.com? 最后,分享一個專業的圖像處理網站,里面有很多源代碼下載:? [http://www.zealpixel.com/portal.php](http://www.zealpixel.com/portal.php)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看