基于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电子书和数学建模资料


相关文章
|
3天前
|
算法 数据挖掘 数据安全/隐私保护
基于FCM模糊聚类算法的图像分割matlab仿真
本项目展示了基于模糊C均值(FCM)算法的图像分割技术。算法运行效果良好,无水印。使用MATLAB 2022a开发,提供完整代码及中文注释,附带操作步骤视频。FCM算法通过隶属度矩阵和聚类中心矩阵实现图像分割,适用于灰度和彩色图像,广泛应用于医学影像、遥感图像等领域。
|
4天前
|
算法 调度
基于遗传模拟退火混合优化算法的车间作业最优调度matlab仿真,输出甘特图
车间作业调度问题(JSSP)通过遗传算法(GA)和模拟退火算法(SA)优化多个作业在并行工作中心上的加工顺序和时间,以最小化总完成时间和机器闲置时间。MATLAB2022a版本运行测试,展示了有效性和可行性。核心程序采用作业列表表示法,结合遗传操作和模拟退火过程,提高算法性能。
|
5天前
|
存储 算法 决策智能
基于免疫算法的TSP问题求解matlab仿真
旅行商问题(TSP)是一个经典的组合优化问题,目标是寻找经过每个城市恰好一次并返回起点的最短回路。本文介绍了一种基于免疫算法(IA)的解决方案,该算法模拟生物免疫系统的运作机制,通过克隆选择、变异和免疫记忆等步骤,有效解决了TSP问题。程序使用MATLAB 2022a版本运行,展示了良好的优化效果。
|
4天前
|
机器学习/深度学习 算法 芯片
基于GSP工具箱的NILM算法matlab仿真
基于GSP工具箱的NILM算法Matlab仿真,利用图信号处理技术解析家庭或建筑内各电器的独立功耗。GSPBox通过图的节点、边和权重矩阵表示电气系统,实现对未知数据的有效分类。系统使用MATLAB2022a版本,通过滤波或分解技术从全局能耗信号中提取子设备的功耗信息。
|
4天前
|
机器学习/深度学习 算法 5G
基于MIMO系统的SDR-AltMin混合预编码算法matlab性能仿真
基于MIMO系统的SDR-AltMin混合预编码算法通过结合半定松弛和交替最小化技术,优化大规模MIMO系统的预编码矩阵,提高信号质量。Matlab 2022a仿真结果显示,该算法能有效提升系统性能并降低计算复杂度。核心程序包括预编码和接收矩阵的设计,以及不同信噪比下的性能评估。
21 3
|
12天前
|
算法 测试技术 开发者
在Python开发中,性能优化和代码审查至关重要。性能优化通过改进代码结构和算法提高程序运行速度,减少资源消耗
在Python开发中,性能优化和代码审查至关重要。性能优化通过改进代码结构和算法提高程序运行速度,减少资源消耗;代码审查通过检查源代码发现潜在问题,提高代码质量和团队协作效率。本文介绍了一些实用的技巧和工具,帮助开发者提升开发效率。
15 3
|
10天前
|
分布式计算 Java 开发工具
阿里云MaxCompute-XGBoost on Spark 极限梯度提升算法的分布式训练与模型持久化oss的实现与代码浅析
本文介绍了XGBoost在MaxCompute+OSS架构下模型持久化遇到的问题及其解决方案。首先简要介绍了XGBoost的特点和应用场景,随后详细描述了客户在将XGBoost on Spark任务从HDFS迁移到OSS时遇到的异常情况。通过分析异常堆栈和源代码,发现使用的`nativeBooster.saveModel`方法不支持OSS路径,而使用`write.overwrite().save`方法则能成功保存模型。最后提供了完整的Scala代码示例、Maven配置和提交命令,帮助用户顺利迁移模型存储路径。
|
9天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于GA-PSO-SVM算法的混沌背景下微弱信号检测matlab仿真
本项目基于MATLAB 2022a,展示了SVM、PSO、GA-PSO-SVM在混沌背景下微弱信号检测中的性能对比。核心程序包含详细中文注释和操作步骤视频。GA-PSO-SVM算法通过遗传算法和粒子群优化算法优化SVM参数,提高信号检测的准确性和鲁棒性,尤其适用于低信噪比环境。
|
3月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
191 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
|
3月前
|
存储 算法 搜索推荐
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
本文提供了2022年华为杯数学建模竞赛B题的详细方案和MATLAB代码实现,包括方形件组批优化问题和排样优化问题,以及相关数学模型的建立和求解方法。
122 3
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
下一篇
无影云桌面