在人像美化中,膚色檢測有助于防止磨掉頭發、胡子等需要保持細節的部分,也可以使美白算法僅作用于皮膚,不對人像周邊環境産生影響。
網上找了一下膚色檢測模型,效果都太差,換了一種思維,找個訓練集,自己做一個。
訓練結果,正确率大概85%,運作起來,确實還是比網上找的公式好,勉強可用了。
算法最終反映為 opengl 的一個片斷着色器,直接看shader代碼吧。

找到這個網站:
<a href="http://blog.csdn.net/wangkr111/article/details/44514097">http://blog.csdn.net/wangkr111/article/details/44514097</a>
下載下傳了一組膚色檢測的資料,用python腳本将其轉換為機器學習所需的矩陣資料。提取 r、g、b、y、cb、cr分量值。
機器學習算法庫是自己造的輪子,使用c++開發,特别重視cache命中率,部分地方引入opencl加速,性能可以說是一流的。
使用的代碼如下:
一開始本來用的是邏輯回歸,因為這個出來的預測公式很簡單,shader上運作速度快,但它的效果實在不行。後面改用了決策樹,限制樹深,以免模型太大。
至于為什麼不用svm:svm出來的模型在shader上根本沒法運作啊。。。