基于MATLAB实现磨皮美颜SurfaceBlur算法附完整代码

简介: 基于MATLAB实现磨皮美颜SurfaceBlur算法附完整代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法       神经网络预测       雷达通信      无线传感器        电力系统

信号处理              图像处理               路径规划       元胞自动机        无人机

⛄ 内容介绍

Image noises are usually generated in the processes of collection, transmission, and storage of images, while some noises, named internal noises, come from the image itself. The noises decrease image visual effect and quality. Thus, it is very important to remove the noises from the images. In this paper, we propose a one-dimensional surface blur algorithm based on wavelet transform and bilateral filtering for image internal noise elimination and detail preservation. In our algorithm, we first transform the two-dimensional image into one-dimensional signal vectors by merging the pixels in each row and column of the image. Then, we decompose each of the vectors into two parts: the low-frequency and high-frequency components with a discrete wavelet transform. We further perform the bilateral filtering and a local variance-based thresholding method on the two components to smooth and denoise signals, respectively. Finally, we evaluate our algorithm's performance in a group of face images. The experimental results show that our algorithm achieved better performance on image denoising and detail preservation than a set of traditional smoothing methods and the state-of-the-art. Our algorithm is a simple, effective, and easy-to-implement method, and it is suitable for image smoothing to improve the image's visual effect and quality.

⛄ 完整代码

close all

A=imread('images.jpg');%A:读取图像

r=2; %r:半径

T=10; %T:阈值

w=zeros(2*r+1,2*r+1);   %模板矩阵的尺寸

 

%图像初始化处理

figure,subplot(121);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;

 

imgn1(1:r,r+1:r+n1)=G(1:r,1:n1);                         %上边界填充

imgn1(1:m1+r,n1+r+1:n1+2*r)=imgn1(1:m1+r,n1+1:n1+r);            %右边界填充

imgn1(m1+r+1:m1+2*r,r+1:n1+2*r)=imgn1(m1+1:m1+r,r+1:n1+2*r);    %下边界填充

imgn1(1:m1+2*r,1:r)=imgn1(1:m1+2*r,r+1:2*r);                %左边界填充


[m2,n2]=size(B);                                        

imgn2=zeros(m2+2*r,n2+2*r);                                %创建一个长宽各增加[2r]的扩容矩阵

imgn2(r+1:r+m2,r+1:r+n2)=B;

 

imgn2(1:r,r+1:r+n2)=B(1:r,1:n2);                         %上边界填充

imgn2(1:m2+r,n2+r+1:n2+2*r)=imgn2(1:m2+r,n2+1:n+r);            %右边界填充

imgn2(m2+r+1:m2+2*r,r+1:n2+2*r)=imgn2(m2+1:m2+r,r+1:n2+2*r);    %下边界填充

imgn2(1:m2+2*r,1:r)=imgn2(1:m2+2*r,r+1:2*r);                %左边界填充

%开始计算每个像素,共计算m*n次

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));      %一个sum()对一维数组求和,sum(sum())就是对二维矩阵求和  

   end

end

for i=r+1:r+m1

   for j=r+1:r+n1   %遍历imgn 中部的源img部分

       %计算式子的分母

       w1=1-abs(imgn1(i-r:i+r,j-r:j+r)-imgn1(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 w1(p,q) <=0

                   w1(p,q)=0;

               end

           end

       end

       %计算式子的分子

       s1=w1.*imgn1(i-r:i+r,j-r:j+r);

       %计算总式

       imgn1(i,j)=sum(sum(s1))/sum(sum(w1));      %一个sum()对一维数组求和,sum(sum())就是对二维矩阵求和  

   end

end

for i=r+1:r+m2

   for j=r+1:r+n2   %遍历imgn 中部的源img部分

       %计算式子的分母

       w2=1-abs(imgn2(i-r:i+r,j-r:j+r)-imgn2(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 w2(p,q) <=0

                   w2(p,q)=0;

               end

           end

       end

       %计算式子的分子

       s2=w2.*imgn2(i-r:i+r,j-r:j+r);

       %计算总式

       imgn2(i,j)=sum(sum(s2))/sum(sum(w2));      %一个sum()对一维数组求和,sum(sum())就是对二维矩阵求和  

   end

end

img=imgn(r+1:r+m,r+1:r+n);  %从imgn截取出源img部分

img1=imgn1(r+1:r+m1,r+1:r+n1);  %从imgn截取出源img部分

img2=imgn2(r+1:r+m2,r+1:r+n2);  %从imgn截取出源img部分

res=cat(3,img,img1,img2);

subplot(122);imshow(uint8(res));title("SurfaceBlur算法后");

⛄ 运行结果

⛄ 参考文献

[1] Liu C ,  Pang M . One-dimensional image surface blur algorithm based on wavelet transform and bilateral filtering[J]. Multimedia Tools and Applications, 2021:1-15

❤️部分理论引用网络文献,若有侵权联系博主删除
❤️ 关注我领取海量matlab电子书和数学建模资料


相关文章
|
4天前
|
算法 数据安全/隐私保护 计算机视觉
基于FPGA的图像双线性插值算法verilog实现,包括tb测试文件和MATLAB辅助验证
本项目展示了256×256图像通过双线性插值放大至512×512的效果,无水印展示。使用Matlab 2022a和Vivado 2019.2开发,提供完整代码及详细中文注释、操作视频。核心程序实现图像缩放,并在Matlab中验证效果。双线性插值算法通过FPGA高效实现图像缩放,确保质量。
|
3天前
|
算法
基于SOA海鸥优化算法的三维曲面最高点搜索matlab仿真
本程序基于海鸥优化算法(SOA)进行三维曲面最高点搜索的MATLAB仿真,输出收敛曲线和搜索结果。使用MATLAB2022A版本运行,核心代码实现种群初始化、适应度计算、交叉变异等操作。SOA模拟海鸥觅食行为,通过搜索飞行、跟随飞行和掠食飞行三种策略高效探索解空间,找到全局最优解。
|
1天前
|
传感器 算法
基于GA遗传算法的多机无源定位系统GDOP优化matlab仿真
本项目基于遗传算法(GA)优化多机无源定位系统的GDOP,使用MATLAB2022A进行仿真。通过遗传算法的选择、交叉和变异操作,迭代优化传感器配置,最小化GDOP值,提高定位精度。仿真输出包括GDOP优化结果、遗传算法收敛曲线及三维空间坐标点分布图。核心程序实现了染色体编码、适应度评估、遗传操作等关键步骤,最终展示优化后的传感器布局及其性能。
|
3天前
|
算法 数据可视化 数据安全/隐私保护
一级倒立摆平衡控制系统MATLAB仿真,可显示倒立摆平衡动画,对比极点配置,线性二次型,PID,PI及PD五种算法
本课题基于MATLAB对一级倒立摆控制系统进行升级仿真,增加了PI、PD控制器,并对比了极点配置、线性二次型、PID、PI及PD五种算法的控制效果。通过GUI界面显示倒立摆动画和控制输出曲线,展示了不同控制器在偏转角和小车位移变化上的性能差异。理论部分介绍了倒立摆系统的力学模型,包括小车和杆的动力学方程。核心程序实现了不同控制算法的选择与仿真结果的可视化。
31 15
|
5天前
|
传感器 算法 物联网
基于粒子群算法的网络最优节点部署优化matlab仿真
本项目基于粒子群优化(PSO)算法,实现WSN网络节点的最优部署,以最大化节点覆盖范围。使用MATLAB2022A进行开发与测试,展示了优化后的节点分布及其覆盖范围。核心代码通过定义目标函数和约束条件,利用PSO算法迭代搜索最佳节点位置,并绘制优化结果图。PSO算法灵感源于鸟群觅食行为,适用于连续和离散空间的优化问题,在通信网络、物联网等领域有广泛应用。该算法通过模拟粒子群体智慧,高效逼近最优解,提升网络性能。
|
2天前
|
机器学习/深度学习 算法 安全
基于深度学习的路面裂缝检测算法matlab仿真
本项目基于YOLOv2算法实现高效的路面裂缝检测,使用Matlab 2022a开发。完整程序运行效果无水印,核心代码配有详细中文注释及操作视频。通过深度学习技术,将目标检测转化为回归问题,直接预测裂缝位置和类别,大幅提升检测效率与准确性。适用于实时检测任务,确保道路安全维护。 简介涵盖了算法理论、数据集准备、网络训练及检测过程,采用Darknet-19卷积神经网络结构,结合随机梯度下降算法进行训练。
|
5天前
|
机器学习/深度学习 数据采集 算法
基于GWO灰狼优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目基于MATLAB2022a,展示了时间序列预测算法的运行效果(无水印)。核心程序包含详细中文注释和操作视频。算法采用CNN-GRU-SAM网络,结合灰狼优化(GWO),通过卷积层提取局部特征、GRU处理长期依赖、自注意力机制捕捉全局特征,最终实现复杂非线性时间序列的高效预测。
|
6月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
272 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
|
6月前
|
存储 算法 搜索推荐
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
本文提供了2022年华为杯数学建模竞赛B题的详细方案和MATLAB代码实现,包括方形件组批优化问题和排样优化问题,以及相关数学模型的建立和求解方法。
162 3
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
|
6月前
|
数据采集 存储 移动开发
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
本文介绍了2023年五一杯数学建模竞赛B题的解题方法,详细阐述了如何通过数学建模和MATLAB编程来分析快递需求、预测运输数量、优化运输成本,并估计固定和非固定需求,提供了完整的建模方案和代码实现。
138 0
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码

热门文章

最新文章