matlab实现磨皮美颜效果

原理

matlab实现磨皮美颜效果主要是对图像进行低通滤波,滤除或大部分衰减图像的高频分量,留下其中的低频分量,使得图像可以降噪,平滑。SurfaceBlur算法也是其中一种算法,主要思想还是计算当前像素X的邻域范围内不同像素的加权求和,边缘地方的像素,加权比较大,平滑的地方加权比较小,以此来保留边缘信息,平滑平坦区域;而彩色图像的滤波需要分别对红绿蓝三个色彩通道都进行算法处理,然后使用cat函数进行串联处理。

公式如下:
matlab实现磨皮美颜效果_第1张图片

部分代码如下

完整部分请前往我的资源
A=imread('images.jpg');%A:读取图像
r=2; %r:半径
T=10; %T:阈值
w=zeros(2*r+1,2*r+1);   %模板矩阵的尺寸
 
%图像初始化处理
figure,imshow(A);title("原图");
% img=rgb2gray(A);                                        %源图片转灰度图
% 
% img=double(img);                                        %转为矩阵
R=double(A(:,:,1));
G=double(A(:,:,2));
B=double(A(:,:,3));
%解决边界值问题
[m,n]=size(R);                                        
imgn=zeros(m+2*r,n+2*r);                                %创建一个长宽各增加[2r]的扩容矩阵
imgn(r+1:r+m,r+1:r+n)=R;
 
imgn(1:r,r+1:r+n)=R(1:r,1:n);                         %上边界填充
imgn(1:m+r,n+r+1:n+2*r)=imgn(1:m+r,n+1:n+r);            %右边界填充
imgn(m+r+1:m+2*r,r+1:n+2*r)=imgn(m+1:m+r,r+1:n+2*r);    %下边界填充
imgn(1:m+2*r,1:r)=imgn(1:m+2*r,r+1:2*r);                %左边界填充
[m1,n1]=size(G);                                        
imgn1=zeros(m1+2*r,n1+2*r);                                %创建一个长宽各增加[2r]的扩容矩阵
imgn1(r+1:r+m1,r+1:r+n1)=G;
 
for i=r+1:r+m
    for j=r+1:r+n   %遍历imgn 中部的源img部分
        %计算式子的分母
        w=1-abs(imgn(i-r:i+r,j-r:j+r)-imgn(i,j))/(2.5*T);  
         %w是一个以img中的元素为核心,size=[2r+1][2r+1]的矩阵,计算m*n次
         %灰度值溢出检查
        for p=1:2*r+1 
            for q=1:2*r+1              
                if w(p,q) <=0
                    w(p,q)=0;
                end
            end
        end
        %计算式子的分子
        s=w.*imgn(i-r:i+r,j-r:j+r); 
        %计算总式
        imgn(i,j)=sum(sum(s))/sum(sum(w));对二维矩阵求和  
    end
end
img=imgn(r+1:r+m,r+1:r+n);  %从imgn截取出源img部分
img1=imgn1(r+1:r+m1,r+1:r+n1);  
img2=imgn2(r+1:r+m2,r+1:r+n2);  
res=cat(3,img,img1,img2);
figure,imshow(uint8(res));title("SurfaceBlur算法后");

你可能感兴趣的:(MATLAB图像处理,matlab,图像处理,算法)