L0范数图像平滑

article/2025/9/22 7:19:40

图像平滑是计算摄影学一门基础重要的工具,其作用是拂去不重要的细节,保留较大的图像边缘,主要应用于边缘检测,JPEG压缩图像人工伪迹去除,非真实绘制等领域。

图像平滑应用

图像平滑大体上可以分为两类:基于局部和基于全局方法,基于局部的方法像有名 双边滤波, 各向异性扩散,将图像分成一些局部块进行处理;全局方法比如全变分( Total Variation)和最小二乘滤波( Weighted Least Square),同时处理整幅图像,可以达到全局最优的目的。
以往的方法,拂去图像中去对图像细节部分也会对图像中大的边缘进行惩罚,这样也会导致图像中大的边缘减弱或丢失,因此徐立等人提出使用图像L0范数平滑,该滤波器是一种基于稀疏策略的全局平滑滤波器。
本文是对香港中文大学徐立等人所做的《Image Smoothing via L0 Gradient Minimization》的读后笔录,也可以看成是论文的翻译吧。使用图像梯度L0范数平滑图像,具有以下优点:

  • 通过去除小的非零梯度,抚平不重要的细节信息
  • 增强图像显著性边缘

图像梯度L0范数最小化

L0范数可以理解为向量中非零元素的个数。
图像梯度L0范数可以如下表示

c(f):=#{p|fpfp10}

这里 p p+1是图像中相邻元素, |fpfp1| 就是图像梯度,也即图像的前向差分, #{} 表示计数,输出图像中满足 |fpfp1|0 的个数,即 c(f) 是图像梯度的L0范数。这样表示有一个优点,就是 c(f) 是非零梯度个数的函数,与图像的梯度本身无关,也就是
#{p|fpfp10}=#{p|α(fpfp1)0}

这还不是我们的目标函数,只是一个约束条件。

图像梯度最小化平滑

一维信号

先以一维信号为例,输入信号 g ,输出信号f,那么我们的目标函数可以如下表示:

minfp(fpgp)2s.t.c(f)=k

左边使得输入信号与输出信号尽可能接近,右边非零约束梯度个数为 k 。下图依次是k=1,k=2,k=5,k=200时恢复的信号。

一维信号

实际上, k 的取值变化范围很大,特别是对于二维图像来说。将上式子转换成无约束问题
minfp(fpgp)2+λc(f)

这里 λ 是一个权重控制两者之间的比重,实际上它是一个平滑参数,当其值越大越平滑。图像中非零梯度个数与 1λ 呈单调递增关系。
从下图中可以看到梯度 L0 范数的优点,即信号的尖锐部分没有被减弱。
比较

二维图像

二维图像中,我们需要约束图像水平和垂直方向的梯度数目,形式上如下

minfp(fpgp)2+λc(xf,yf)

c(xf,yf)=#{p|xfp+yfp0}

由于L0范数不可导,全局最优问题是一个NP难问题,所以这里使用变量分裂法,松弛为两个二次规划问题,每个问题都有其闭式解(closed-form)(因为二次函数都可以求导,得到其最小值)。
minfp(fpgp)2+λc(xf,yf)+βp((xfphp)2+(yfpvp)2)

迭代优化

  • 给定 hv ,计算 f
    E(f)=p(fpgp)2+β((xfphp)2+(yfpvp)2)

    对上式求解,结果取傅里叶变换,可得
    f=F1(F(g)+β(F(x)F(h)+F(y)F(v))F(1)+β(F(x)F(x)+F(y)F(y))

    本应该ℱ是傅里叶变换专用符号,但这里不支持,因此用了大写 F
  • 给定 f,计算 hv
    E(h,v)=p((xfphp)2+(yfpvp)2)+λβc(h,v)

    c(h,v) |h|+|v| 中非零元素的个数
    E(h,v)=p((xfphp)2+(yfpvp)2)+λβH(|hp|+|vp|)

    这里 H(|hp|+|vp|) 是一个二值函数,如果 |hp|+|vp|0 返回1,否则0。对于每一个像素来说,有下式
    Ep={(xfphp)2+(yfpvp)2+λβH(|hp|+|vp|)}

    上式取得最小值时,得到
    hp,vp={(0,0)(xSp,ySp)(xSp)2+(ySp)2λ/βotherwise

    这个证明比较简单,详细推到可以看论文。

代码

%   Distribution code Version 1.0 -- 09/23/2011 by Jiaya Jia Copyright 2011, The Chinese University of Hong Kong.
%
%   The Code is created based on the method described in the following paper 
%   [1] "Image Smoothing via L0 Gradient Minimization", Li Xu, Cewu Lu, Yi Xu, Jiaya Jia, ACM Transactions on Graphics, 
%   (SIGGRAPH Asia 2011), 2011. 
%  
%   The code and the algorithm are for non-comercial use only.function S = L0Smoothing(Im, lambda, kappa)
%L0Smooth - Image Smoothing via L0 Gradient Minimization
%   S = L0Smooth(Im, lambda, kappa) performs L0 graidient smoothing of input
%   image Im, with smoothness weight lambda and rate kappa.
%
%   Paras: 
%   @Im    : Input UINT8 image, both grayscale and color images are acceptable.
%   @lambda: Smoothing parameter controlling the degree of smooth. (See [1]) 
%            Typically it is within the range [1e-3, 1e-1], 2e-2 by default.
%   @kappa : Parameter that controls the rate. (See [1])
%            Small kappa results in more iteratioins and with sharper edges.   
%            We select kappa in (1, 2].    
%            kappa = 2 is suggested for natural images.  
%
%   Example
%   ==========
%   Im  = imread('pflower.jpg');
%   S  = L0Smooth(Im); % Default Parameters (lambda = 2e-2, kappa = 2)
%   figure, imshow(Im), figure, imshow(S);if ~exist('kappa','var')kappa = 2.0;
end
if ~exist('lambda','var')lambda = 2e-2;
end
S = im2double(Im);
betamax = 1e5;
fx = [1, -1];
fy = [1; -1];
[N,M,D] = size(Im);
sizeI2D = [N,M];
otfFx = psf2otf(fx,sizeI2D);
otfFy = psf2otf(fy,sizeI2D);
Normin1 = fft2(S);
Denormin2 = abs(otfFx).^2 + abs(otfFy ).^2;
if D>1Denormin2 = repmat(Denormin2,[1,1,D]);
end
beta = 2*lambda;
while beta < betamaxDenormin   = 1 + beta*Denormin2;% h-v subproblemh = [diff(S,1,2), S(:,1,:) - S(:,end,:)];v = [diff(S,1,1); S(1,:,:) - S(end,:,:)];if D==1t = (h.^2+v.^2)<lambda/beta;elset = sum((h.^2+v.^2),3)<lambda/beta;t = repmat(t,[1,1,D]);endh(t)=0; v(t)=0;% S subproblemNormin2 = [h(:,end,:) - h(:, 1,:), -diff(h,1,2)];Normin2 = Normin2 + [v(end,:,:) - v(1, :,:); -diff(v,1,1)];FS = (Normin1 + beta*fft2(Normin2))./Denormin;S = real(ifft2(FS));beta = beta*kappa;fprintf('.');
end
fprintf('\n');
end

代码也是非常清晰,容易理解的。关于其更多应用,可以查看原文。但是该方法基于迭代优化,迭代次数与kappa对数下降关系, kappa=0.02 迭代22次。

可执行程序

比较

点此可下载exe程序,基于OpenCV编写,仅供学习交流。
界面框架致谢: 人在旅途

参考文献

Image Smoothing via L0 Gradient Minimization
Image Smoothing via L0 Gradient Minimization PPT

Licenses

作者日期联系方式
风吹夏天2015年9月26日wincoder@qq.com

http://chatgpt.dhexx.cn/article/UQgsHqI5.shtml

相关文章

L0、L1、L2、Elastic Net正则项

L1正则化使得模型更加稀疏&#xff0c;L2使得模型参数更趋近于0&#xff0c;提高泛化能力(这里是另外一个解释:https://www.zhihu.com/question/38081976/answer/74895039) 先介绍下各自的用处&#xff1a; L0范数&#xff1a;就是指矩阵中非零元素的个数&#xff0c;很显然&…

深入理解L0,L1和L2正则化

正则化技术是机器学习中常用的技术&#xff0c;一般是用来解决过拟合问题的。为什么范数可以作为机器学习的正则化项&#xff1f;为什么L1正则化可以用来进行特征选择的工作&#xff1f;为什么正则化可以解决过拟合问题&#xff1f;本篇博客从机器学习中为什么需要范数讲起&…

L0、L1、L2范数的理解

一、什么是L1、L2、L3范数 L0范数是指向量中非0的元素的个数。(L0范数很难优化求解) L1范数是指向量中各个元素绝对值之和 L2范数是指向量各元素的平方和然后求平方根 L1范数可以进行特征选择&#xff0c;即让特征的系数变为0&#xff0c;使稀疏离散化. L2范数可以防止过拟…

Linux中的0.0.0.0和 ::

IP地址表示&#xff0c;IP地址有两个部分组成&#xff0c;net-id和host-id&#xff0c;即网络号和主机号。 127.0.0.1 127.0.0.1属于{127&#xff0c;}集合中的一个&#xff0c;所有的网络号为127的地址都被称为环回地址&#xff0c;所以环回地址不等价于127.0.0.1&#xff0…

L0,L1范数详解

机器学习中的范数规则化之&#xff08;一&#xff09;L0、L1与L2范数 zouxy09qq.com http://blog.csdn.net/zouxy09 今天我们聊聊机器学习中出现的非常频繁的问题&#xff1a;过拟合与规则化。我们先简单的来理解下常用的L0、L1、L2和核范数规则化。最后聊下规则化项参数的选择…

对于无人驾驶技术(驾驶自动化)L0-L5分级的说明

通过此文的阅读您将了解&#xff1a; 无人驾驶的基本概念&#xff1b; 无人驾驶的分级标准&#xff1b; 无人驾驶的不同级别定义。 一、什么是无人驾驶 首先说一下无人驾驶的概念&#xff0c;无人驾驶技术就是车辆以自动的方式持续地执行部分或全部动态驾驶任务。“通过多种车…

机器学习——L0、L1、L2范数

今天我们聊聊机器学习中出现的非常频繁的问题&#xff1a;过拟合与规则化。我们先简单的来理解下常用的L0、L1、L2和核范数规则化。最后聊下规则化项参数的选择问题。 监督机器学习问题无非就是“minimize your error while regularizing your parameters”&#xff0c;也就是…

L0范数、L1范数和L2范数的区别

我的个人微信公众号&#xff1a;Microstrong 微信公众号ID&#xff1a;MicrostrongAI 公众号介绍&#xff1a;Microstrong(小强)同学主要研究机器学习、深度学习、计算机视觉、智能对话系统相关内容&#xff0c;分享在学习过程中的读书笔记&#xff01;期待您的关注&#xff0c…

机器学习中的范数规则化之(一)L0、L1与L2范数

机器学习中的范数规则化之&#xff08;一&#xff09;L0、L1与L2范数 zouxy09qq.com http://blog.csdn.net/zouxy09 今天我们聊聊机器学习中出现的非常频繁的问题&#xff1a;过拟合与规则化。我们先简单的来理解下常用的L0、L1、L2和核范数规则化。最后聊下规则化项参数的选…

一文弄懂L0、L1和L2正则化范式

文章目录 正则化L0范数L1范数L2范数elastic net总结讨论几个问题为什么L1稀疏&#xff0c;L2平滑&#xff1f;实现参数的稀疏有什么好处吗&#xff1f;参数值越小代表模型越简单吗&#xff1f; 正则式的应用场景 正则化 正则化的作用实际上就是防止模型过拟合&#xff0c;提高…

正则化与L0、L1、L2范数祥解

1、范数 范数是衡量某个向量空间&#xff08;或矩阵&#xff09;中的每个向量以长度或大小。范数的一般化定义&#xff1a;对实数p>1&#xff0c; 范数定义如下&#xff1a; L1范数 当p1时&#xff0c;是L1范数&#xff0c;其表示某个向量中所有元素绝对值的和。L2范数 当p…

汽车自动驾驶的L0-L5是什么意思?

一、问题 汽车L0、L1、L2、L3、L4、L5自动驾驶都是什么意思呢&#xff1f; 近年来「自动驾驶」对我们来说不再陌生&#xff0c;很多人虽然早有所闻&#xff0c;但是真不懂自动驾驶的L0、L1、L2、L3、L4、L5是什么意思&#xff0c;都有哪些功能&#xff0c;今天就来为大家科普一…

L0到L5自动驾驶的区别

L0到L5自动驾驶的区别 具有某些自主功能的汽车已经出现&#xff1a;现在就来了解接下来会发生什么。 自动驾驶汽车不再是科幻小说。 今天&#xff0c;您已经可以购买一辆能够在高速公路和平行停车场的高峰时段自动驾驶的汽车。 但是&#xff0c;要一辆能做司机的车&#xff0c…

区块链中L0、L1、L2、L3分别是什么

区块链有六层架构:数据层、网络层、共识层、激励层、合约层和应用层。 Layer 0又称数据传输层&#xff0c;对应OSI模型的底层&#xff0c;主要涉及区块链和传统网络之间的结合问题。 Layer 1扩容方案又称链上扩容&#xff0c;指在区块链基层协议上实现的扩容解决方案。 Lay…

1.机器学习中的L0、L1与L2范数到底是什么意思?

一、L0范数与L1范数 L0范数是指向量中非0的元素的个数。如果我们用L0范数来规则化一个参数矩阵W的话&#xff0c;就是希望W的大部分元素都是0。让参数W是稀疏的。 L1范数是指向量中各个元素绝对值之和&#xff0c;也叫“稀疏规则算子”&#xff08;Lasso regularization&…

L0,L1,L2正则,lasso,岭回归

L0正则&#xff1a; 我们要讨论的第一个规范是L0规范。根据定义&#xff0c;x的L0范数是 严格来说&#xff0c;L0范数实际上不是一个范数。它是基数函数&#xff0c;其定义形式为L0-norm&#xff0c;尽管许多人称其为范数。使用它有点棘手&#xff0c;因为其中存在零次幂和零…

自学网络安全的三个必经阶段(含路线图)

一、为什么选择网络安全&#xff1f; 这几年随着我国《国家网络空间安全战略》《网络安全法》《网络安全等级保护2.0》等一系列政策/法规/标准的持续落地&#xff0c;网络安全行业地位、薪资随之水涨船高。 未来3-5年&#xff0c;是安全行业的黄金发展期&#xff0c;提前踏入…

网络安全学习指南:新手入门建议

&#x1f482; 个人网站:【海拥】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 目录 前言网络安全基础知识学…

网络安全学习路线-超详细

零基础小白&#xff0c;到就业&#xff01;入门到入土的网安学习路线&#xff01; 在各大平台搜的网安学习路线都太粗略了。。。。看不下去了&#xff01; 建议的学习顺序&#xff1a; 一、网络安全学习普法&#xff08;心里有个数&#xff0c;要进去坐几年&#xff01;&#…

如何学习网络安全?(网络安全学习笔记)

概括来说&#xff0c;网络安全课程的主要内容包括&#xff1a; 安全基本知识 应用加密学 协议层安全 Windows安全&#xff08;攻击与防御&#xff09; Unix/Linux安全&#xff08;攻击与防御&#xff09; 防火墙技术 入侵监测系统 审计和日志分析 下面分别对每部分知识介绍相应…