基本原理
【一种具有肤质保留功能的磨皮算法】1、复制原图Src作为层: = Copy(Src) 。
2、对层磨皮(就是进行保边滤波,可以选择表面模糊、导向滤波、双边滤波、各向异性扩散、BEEP、局部均方差、 、、 Local等任何具有保边效果的EPF-): = EPF-() 。
3、得到高频信息: =- Src + 128 。
4、对高频信息进行平滑: = (, ); 其中为高斯模糊的半径 。
5、进行图层混合,利用线性光混合:Dest =(Src * (100 - ) + (Src + 2 * ((Src) - Src + 128) - 256) * ) /100 ;
补充说明下线性光混合的计算公式 。假定两个相邻图层X和Y,X在下方,Y在上方,X与Y混合,则X是基色,Y是混合色,X与Y混合得到的颜色是结果色Z,对于线性光混合模式,其计算公式为:
Z = X + 2 * Y - 256;(原先以为是 - 255,后用PS CS6验证是 - 256)
不透明度的计算公式就更为简单,如果表示Y的不透明度,则合成公式为:
Z = (X * (100- ) + Y *) / 100;
那么两个综合在一起的计算公式为:
Z = (X * (100- ) + (X + 2 * Y - 256)*) / 100;
![一种具有肤质保留功能的磨皮算法](http://img.gansulong.com/230623/09502045D-0.gif)
文章插图
其中关键的恢复皮肤质感的步骤是第四步的高斯模糊,这个模糊的半径一般越大,质感越强,但是太大,磨皮效果就没有了,因此,这里需要把握合适的度,一般半径在0.5-2之间比较合适 。
示例演示
#include#include using namespace cv;int main(int argc, char *argv[]){Mat image = cv::imread("1.jpg", 1);std::vector images;split(image, images);for (int i = 0; i < image.channels(); i++){Mat& img = images[i];img.convertTo(img, CV_32F, 1, 0);cv::MathighPass;img.convertTo(highPass, CV_32F, 1, 0);cv::Mat EPFFilter;cv::bilateralFilter(highPass, EPFFilter, 15, 30, 60);//cv:imwrite("bilateralFilter.jpg", EPFFilter);EPFFilter = EPFFilter - img;EPFFilter = EPFFilter + 128.0;//cv::imwrite("GaussianBlur0.jpg", EPFFilter);cv::GaussianBlur(EPFFilter, highPass, cv::Size(5, 5), 0, 0);//cv::imwrite("GaussianBlur.jpg", highPass);double opacity = 90.0;cv::Matdst = (img * (100.0 - opacity) + (img + 2.0 * highPass - 256.0) * opacity) / 100.0;//cv::imwrite("dst.jpg", dst);images[i] = dst;}Mat dst;merge(images, dst);cv::imwrite("dst.jpg", dst);waitKey(0);return EXIT_SUCCESS;}
磨皮后
- 祛疤痕最好的药排名,最好的祛疤痕药是哪一种
- 元朝皇帝为了防止盗墓用了一种特殊葬法,至今无人能解!
- STM32之EXTI
- 新娘手捧花禁忌
- 慈禧太后能年老不衰?其中用的一种让人脸红
- 眠馨寝具排第几,清丰眠馨寝具有限公司介绍?
- 科学家发现世界上第一种巨大温血鱼长得还蛮有喜感的
- 第一种手动实现, 第二种导入库实现 python数据分析的回归方程的简单讲解
- 皇后生病野郎中出奇招因此却发明了一种小吃
- 揭秘:木乃伊到底是怎么样的一种存在?