matlab导向滤波磨皮,图像处理(七)导向滤波磨皮
导向滤波磨皮的对应文献为:Guided Image Filtering,这个算法速度极其之快,比其他的保边缘磨皮算法都快,甚至快上好几倍。这个算法最初来自于何明凯的图像去雾算法中,现在已然被应用封装与matlab图像处理函数库中,可见算法堪称经典。
看以下算法的伪代码:
这儿算法中有大量的用到均值卷积,因此可以用快速积分图的方法,进行简单加速。这个算法也是一种保边缘的滤波算法,然而它的用处远远不仅仅用于滤波,还有其它非常好用的功能,比如可以用于升采样,这个感觉非常爽。在一些抠图算法中,如果对大图直接进行抠图,速度非常慢,比如现在的grub cut 分割算法,这个时候我们可以对图像进行下采样,然后在小图上进行抠图,最后再进行升采样,这样速度就非常快了,这是现在一些大图处理常用的一种思路,因此这个算法的用处可想而知。最后我把我写代码贴出来,以供学习,这个代码没有经过整理优化,只是用了快速积分图进行加速:
float* CGuidedfiler::Guidedfiler(float*inimg,float*guidedimg,int height,int widht,int Radius,float eps)
{
int lenght=height*widht;
float*mult=new float[lenght];
float*oned=new float[lenght];
for (int i=0;i
{
mult[i]=inimg[i]*guidedimg[i];
oned[i]=1;
}
float *covmult=new float[lenght];
float *covone=new float[lenght];
FastGetAVG(covmult,mult,widht,height,Radius);
FastGetAVG(covone,oned,widht,height,Radius);
for (int i=0;i
{
covmult[i]/=covone[i];
}
delete []mult;
delete []oned;
//计算导向图、原图的窗口均值
float *mean_inimg=new float[lenght];
FastGetAVG(mean_inimg,inimg,widht,height,Radius);
float*mean_guideimg=new float[lenght];
FastGetAVG(mean_guideimg,guidedimg,widht,height,Radius);
for (int i=0;i
{
mean_guideimg[i]/=covone[i];
mean_inimg[i]/=covone[i];
}
//计算ak的除数
float *var_guideimg=new float[lenght];
float *sqr_guideimg=new float[lenght];
for (int i=0;i
{
sqr_guideimg[i]=guidedimg[i]*guidedimg[i];
}
FastGetAVG(var_guideimg,sqr_guideimg,widht,height,Radius);
delete []sqr_guideimg;
for (int i=0;i
{
var_guideimg[i]=var_guideimg[i]/covone[i]-mean_guideimg[i]*mean_guideimg[i];
}
//计算ak
float*a=new float[lenght];
for (int i=0;i
{
a[i]=(covmult[i]-mean_guideimg[i]*mean_inimg[i])/(var_guideimg[i]+eps);
}
//计算bk
float*b=new float[lenght];
for (int i=0;i
{
b[i]=mean_inimg[i]-a[i]*mean_guideimg[i];
}
delete []covmult;
delete []mean_guideimg;
delete []mean_inimg;
delete []var_guideimg;
float*mean_a=new float[lenght];
float*mean_b=new float[lenght];
FastGetAVG(mean_a,a,widht,height,Radius);
FastGetAVG(mean_b,b,widht,height,Radius);
for (int i=0;i
{
mean_a[i]/=covone[i];
mean_b[i]/=covone[i];
}
delete []a;
delete []b;
//输出图像
float *outimg=new float[lenght];
for (int i=0;i
{
outimg[i]=mean_a[i]*guidedimg[i]+mean_b[i];
}
delete []mean_a;
delete []mean_b;
return outimg;
}
然后把结果用于磨皮,测一测效果:
原图
美图秀秀智能磨皮
导向滤波磨皮
总的来说美图的磨皮好像边缘细节方面保持的不是很好,据此可以推断,美图的磨皮没有用到其他肤色检测技术,而我是结合了肤色检测技术在里面的,所以在头发细节方面会保持的比较好。美图的磨皮还有:自然磨皮、快速磨皮、普通磨皮,除了普通磨皮、智能磨皮,其它的算法结合了美白技术在里面,而且美白技术好像也没有肤色结合肤色检测技术,好像是对全图进行白偏色处理,感觉美图的美白效果很差,因为我觉得美白应该是只对皮肤进行美白,而不是整幅图像进行美白,这边仅代表我个人观点,如有冒犯,请联系本人。更多资源请关注我的博客:http://blog.csdn.net/hjimce 原创文章,版权所有,转载请保留这两行作者信息
matlab导向滤波磨皮,图像处理(七)导向滤波磨皮相关推荐
- 领域平均法matlab代码实验,数字图像处理邻域平均法滤波实验报告matlab实现.doc...
数字图像处理邻域平均法滤波实验报告matlab实现 数字图像处理 实验报告 实验三 邻域平均法滤波 学号 姓名 实验三 邻域平均法滤波 一.实验内容 选取噪声较明显的图像,分别采用3*3.5*5.7* ...
- java 中值滤波_matlab图像处理-中值滤波原理(示例代码)
中值滤波原理 ??中值滤波本质上是一种统计排序滤波器.对于原图像中某点(i,j),中值滤波以该点为中心的邻域内的所有像素的统计排序中值作为(i,j)点的响应. ??中值不同于均值,是指排序队列中位于中 ...
- 三种经典图像滤波方法介绍——双边滤波(Bilateral filter)、导向滤波(Guided Fliter)、滚动导向滤波(RollingGuidedFilter)
文章目录 一.前言 二.双边滤波(Bilateral filter) 2.1 双边滤波的理论介绍及公式推导 2.2 双边滤波的matlab程序实现 三.导向滤波(Guided Fliter) 3.1 ...
- matlab imfilter与fft,Matlab图像处理图像平滑与滤波
<Matlab图像处理图像平滑与滤波>由会员分享,可在线阅读,更多相关<Matlab图像处理图像平滑与滤波(7页珍藏版)>请在技术文库上搜索. 1.交换位置,对于矩阵 X,将其 ...
- 《OpenCv视觉之眼》Python图像处理七 :Opencv图像处理之高通滤波和低通滤波原理及构造
本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...
- 数字图像处理 中值滤波 MATLAB实验
一.原理_中值滤波 中值滤波的基本思想是将图像中每个像素的灰度值用其邻域内像素灰度的中值代替,它是一种非线性平滑滤波算法. 设加噪图像为 f(x,y) ,经中值滤波处理后的图像为g(x,y) ,则: ...
- matlab 均值滤波_数字图像处理基础 — 高斯滤波
高斯滤波,本文主要讲其如何通过C语言实现.不太擅长写理论性质的文章,这里仅仅阐述自己怎么实现以及简单的优化过程. 通常我们对获取的图像进行进一步处理时,往往需要先进行一次降噪,而通常我们选择的是高斯滤 ...
- 关于平滑滤波,中值滤波,KNN滤波的图像处理(附matlab代码)
前些天小编上了数字图像的课程,里面提到了均值平滑滤波操作,中值滤波操作,和KNN平滑滤波操作. 1.何为均值平滑滤波呢? 均值滤波的核心就是在一定的小范围内,给这个小范围的像素取平均值(此操作是在原图 ...
- matlab图像处理-中值滤波原理
中值滤波原理 中值滤波本质上是一种统计排序滤波器.对于原图像中某点(i,j),中值滤波以该点为中心的邻域内的所有像素的统计排序中值作为(i,j)点的响应. 中值不同于均值,是指排序队列中位于中 ...
最新文章
- 写给那些想升职管理层的同学
- 50个ggplot2可视化案例
- java 查看变量类型
- 【好程序员笔记分享】——UIView与CALayer详解
- 北斗云计算机怎么样,北斗定位2.0版服务平台来了
- [SpringBoot2]welcomefavicon
- express-cli入门_使用Express.js入门
- Stone Game, Why are you always there? HDU - 2999(sg定理)
- 如何手动实现C语言中的字符串操作
- 链表——【线性表(二)】
- Hacker News的全文输出RSS地址
- 网络安全及包分析实验报告
- decimal.JS 快速入门
- AUTO CAD 2020许可证过期(许可证超时),亲测有效,已中招
- 字节跳动「突袭」美团,抖音竟然要做外卖
- php测试教程,PHP单元测试基础教程
- JavaScript 数组对象切片
- TM1637 MSP430 单片机 数码管 程序 驱动 G2553
- 《梵高》-孤独的天才
- securecrt修改服务器密码,securecrt怎么修改密码