使用Matlab实现美颜功能(双边滤波器)

使用Matlab实现美颜功能(双边滤波器)

先晒美颜效果

借用一张lena小姐的图
在这里插入图片描述
可以看出美颜效果还是有的,下面进行过程实现

基本原理

保留边界细节,模糊变化不明显的区域

我们知道高斯滤波器可以起到模糊图像的作用,而上述的过程是选择性地进行模糊,在这里是对图像的灰度变化进行一个判断,达到模糊该模糊的地方,并保留边缘的细节

这里可以推断,我们需要一个高斯滤波器和一个反映灰度判断的矩阵,来处理高斯滤波器各个位置的权重。

获取图片
img0 = imread('lena.jpg');

tempsize = 5; 	%控制高斯滤波器大小的参数

sigma1 = 3;   	%控制高斯滤波器的标准差

sigma2 = 0.04;	%控制灰度的敏感性,越大的灰度差,权重越小

%模板补零,便于卷积操作,不然会使得图片区域出现黑边
img = double(padarray(img0,[tempsize,tempsize],0))/255;

%色彩通道提取
imgr = img(:,:,1);
imgg = img(:,:,2);
imgb = img(:,:,3);
设计滤波器
function out = B_filter(Img,tempsize,sigma0,sigma1)

%高斯滤波器模板定义
gauss = fspecial('gauss',2*tempsize+1,sigma0);

[m,n] = size(Img);

for i = 1+ tempsize : m - tempsize
    for j = 1+ tempsize : n - tempsize
       % 提取处理区域得到梯度敏感矩阵
       % Img(i - tempsize:i + tempsize,j - tempsize:j + tempsize)
       % 为卷积区域,Img(i,j))为卷积中心点
       
       % 得到灰度差值矩阵,并用高斯函数处理为灰度差越大则最终数值越小的权重矩阵
       temp = abs(Img(i - tempsize:i + tempsize,j - tempsize:j + tempsize) - Img(i,j));
       temp = exp(-temp.^2/(2*sigma1^2));
       
       %将权重矩阵与高斯滤波器相乘,得到双边滤波器,并将权值和化为一
       filter = gauss.*temp;
       filter = filter/sum(filter(:));
       % 卷积求和
       Img(i,j) = sum(sum((Img(i - tempsize:i + tempsize,j - tempsize:j + tempsize).*filter)));
    end
end
       
out = Img;
end
使用滤波器依次处理三个色彩通道

最终显示

figure(1)
subplot(121)
imshow(img0)

subplot(122)
% 只显示彩色区域,去除黑边
imshow(img(tempsize+1:m-tempsize,tempsize+1:n-tempsize,:))

在这里插入图片描述
磨皮美颜用在lena小姐上效果还是不是太明显,换一张图

在这里插入图片描述
源码下载:
CSDN下载
网盘链接:
提取码:ie4i

  • 31
    点赞
  • 224
    收藏
    觉得还不错? 一键收藏
  • 28
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值