论文笔记:Image Smoothing via L0 Gradient Minimization
今天要分享的这篇论文是我个人最喜欢的论文之一,它的思想简单、巧妙,而且效果还相当不错。这篇论文借助数学上的 \(L_0\) 范数工具对图像进行平滑,同时保留重要的边缘特征,可以实现类似水彩画的效果(见下图)。
另外这篇论文的作者徐立也是一个相当高产的研究员。
论文的目的
所谓图像平滑,就是突出图像中的低频成分,抑制高频成分,减小突变的梯度。大部分情况下,这么做的目的是为了去除图像中的噪声,因为噪声一般就是一些孤立的像素点,是像素变化比较大的区域。在传统的图像处理中,大部分操作都是用一些具有平滑性质的卷积核对图像进行模糊处理,最常用的如:高斯模糊、均值滤波等等。这些方法都有一个缺陷,就是在模糊噪声的同时,也模糊了边缘。当然之后也有一些改进的方法,如:双边滤波等,这些方法都在边缘保持上进行了很多改进,但多少还是会损失边缘的信息。本文的方法完全不同于以往的这些算法,它从图像梯度的角度出发,在平滑掉大部分细小的噪声的同时,又能最大限度的保持重要的边缘信息。
论文主要思想
一维图像信号
在正式讲思想之前,我们先回忆一下图像平滑的目标是什么。
为了简单起见,我们先从一维出发,把图像当作一维的信号。那么,图像平滑就是要把那些比较小的类似「褶皱」的地方抹平,而把那些大的「褶皱」,或者更准确地说,变化很大的梯度(边缘)保留下来。上面这幅图展示的是不同算法的平滑效果。可以发现,之前的算法在平滑掉那些坑坑洼洼的「褶皱」的同时,也把可能把属于真正边缘的大的梯度给模糊了(细节放大图如下)
为了避免这种问题,论文提出一种基于 \(L_0\) 范数的能量最小化方法。
所谓 \(L_0\) 范数,指的就是向量中非 0 元素的个数。论文中借用这个概念,提出一个图像梯度数量的计算公式:
\[
c(f)=\#\{p\ \big |\ |f_p-f_{p+1}|\neq 0 \}
\]
公式中,\(f\) 表示我们平滑后的图像,\(\#\) 表示集合中元素 \(p\) 的个数,而 \(p\) 则表示像素位置,因此 \(f_p\) 其实就代表图像 \(f\) 在 \(p\) 这个位置的像素值。
因此这个公式其实就是在计算:满足 \(|f_p-f_{p+1}| \neq 0\) 的像素数量,这个不等式正好就是 \(L_0\) 范数。它的现实意义就是计算图片信号中梯度的数量。
有了这个公式后,论文抛出它最核心的目标函数:
\[
\underset{f} {\operatorname {min}} \sum_{p}(f_p-g_p)^2 \ \ \ \ \operatorname{s.t.} \ c(f)=k
\]
公式中的 \(g\) 表示原图像,\(f\) 表示平滑后的图像,\(c(f)\) 就是上面提到的计算梯度数量的公式,它表示 \(f\) 中的梯度数量应该为 \(k\) 个。
这个公式表示的是图像 \(f\) 中每个像素 \(f_p\) 和原图 \(g\) 中每个像素 \(g_p\) 之间的平方差之和。
最小化这个目标函数,其实就是要最小化 \(f\) 和 \(g\) 之间的像素差。如果没有 \(c(f)\) 这个限制,那么最终的优化结果就是 \(f=g\)。但加上 \(c(f)\) 限制后,这个目标函数在尽可能减少两个信号之间的能量差的同时,又要让 \(f\) 中的梯度数量满足 \(k\) 个。换句话说,它要尽可能让 \(f\) 和 \(g\) 相似,同时又抹平 \(f\) 中的梯度。因此,最后的优化结果只能是保留住 \(f\) 中那些梯度比较大的边缘,而平滑掉那些梯度比较小的「褶皱」。
\(c(f)\) 这个限制最大的作用就是防止 \(f\) 出现对边缘的模糊。如果仔细观察上面那张边缘模糊的细节图,你就会发现,造成模糊的原因是我们把原来很「抖」的梯度变「缓」了,而缓的梯度其实是由很多小梯度组成的。\(c(f)\) 的限制正是为了减少这种梯度的数量。因此,为了满足 \(c(f)\),目标函数会让 \(f\) 中的梯度倾向于更「抖」。
在最小化能量差和减少梯度数量这两个约束的共同博弈下,最终得到了下面的这种很平滑、同时边缘很尖锐的结果:
这种相互制约的想法实在是简单而又精彩!
不过,实际应用中存在一个问题,就是 \(k\) 的变化范围很大,是很难选择的。为了控制 \(k\) 的选择范围,论文把 \(c(f)=k\) 这个约束也加入到目标函数中:
\[
\underset{f}{\operatorname{min}} \{ \sum_p{(f_p-g_p)^2+\lambda c(f)} \}
\]
现在 \(\lambda\) 代替 \(k\) 作为可以调节的参数。\(\lambda\) 越大,目标函数对 \(c(f)\) 的抑制就越大,梯度数量就越少(即边缘越少),反之,梯度数量越大。
二维图像信号
一维信号的约束可以很容易引申到二维信号:
\[
C(S)=\#\{p\ \big | \ |\partial_x S_p|+|\partial_y S_p| \neq 0 \}
\]
\(S\) 类似上面提到的 \(f\),在这里它表示处理后的二维图像,\(\partial_x S_p\) 和 \(\partial_y S_p\) 分别代表在 \(x\) 方向和 \(y\) 方向计算 \(L_0\) 范数。
然后,我们可以用同样的方法得到目标函数:
\[
\underset{S}{\operatorname{min}} \{ \sum_p{(S_p-I_p)^2+\lambda C(S)} \}
\]
公式中 \(I\) 表示原图,其他的类比一维信号的公式。
优化方法
希望有生之年看懂补上。。。
实验结果
上图(e)是论文的方法和其他图像平滑方法的对比,可以看出,这种基于 \(L_0\) 平滑的方法不仅平滑的效果好,而且几乎是原封不动地保留了色块之间的边缘信息。而其他方法在色块(尤其是红色)上的平滑力度不如 \(L_0\) 平滑,且边缘也模糊了不少。
另外,论文的平滑方法在边缘提取上效果也相当的好,下图中,左边(e)是直接对原图用 Canny 提取边缘的结果,右边是先用 \(L_0\) smoothing 进行平滑,再提取边缘的结果,可以看到,平滑后提取的边缘中抹去了很多不重要的细节,而主要的边缘信息都被提取出来。
除此之外,另一个很重要的用途是图像失量化。图像失量化要求图像中的色块数量尽可能少,而这一点正中 \(L_0\) smoothing 下怀。下图中的输入图像具有很多噪声细节,而这些细节用一般的平滑方向是很难根除的,但 \(L_0\) smoothing 由于限制了梯度数量,因此可以产生很「光滑」的色块区域,非常利于失量化操作。
参考
论文笔记:Image Smoothing via L0 Gradient Minimization的更多相关文章
- 论文笔记:LightGBM: A Highly Efficient Gradient Boosting Decision Tree
引言 GBDT已经有了比较成熟的应用,例如XGBoost和pGBRT,但是在特征维度很高数据量很大的时候依然不够快.一个主要的原因是,对于每个特征,他们都需要遍历每一条数据,对每一个可能的分割点去计算 ...
- 论文笔记:Towards Diverse and Natural Image Descriptions via a Conditional GAN
论文笔记:Towards Diverse and Natural Image Descriptions via a Conditional GAN ICCV 2017 Paper: http://op ...
- Video Frame Synthesis using Deep Voxel Flow 论文笔记
Video Frame Synthesis using Deep Voxel Flow 论文笔记 arXiv 摘要:本文解决了模拟新的视频帧的问题,要么是现有视频帧之间的插值,要么是紧跟着他们的探索. ...
- 论文笔记:Mastering the game of Go with deep neural networks and tree search
Mastering the game of Go with deep neural networks and tree search Nature 2015 这是本人论文笔记系列第二篇 Nature ...
- 论文笔记:CNN经典结构1(AlexNet,ZFNet,OverFeat,VGG,GoogleNet,ResNet)
前言 本文主要介绍2012-2015年的一些经典CNN结构,从AlexNet,ZFNet,OverFeat到VGG,GoogleNetv1-v4,ResNetv1-v2. 在论文笔记:CNN经典结构2 ...
- 【论文笔记系列】AutoML:A Survey of State-of-the-art (下)
[论文笔记系列]AutoML:A Survey of State-of-the-art (上) 上一篇文章介绍了Data preparation,Feature Engineering,Model S ...
- Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现(转)
Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现 zouxy09@qq.com http://blog.csdn.net/zouxy09 自己平时看了一些论文, ...
- 论文笔记之:Visual Tracking with Fully Convolutional Networks
论文笔记之:Visual Tracking with Fully Convolutional Networks ICCV 2015 CUHK 本文利用 FCN 来做跟踪问题,但开篇就提到并非将其看做 ...
- Deep Learning论文笔记之(八)Deep Learning最新综述
Deep Learning论文笔记之(八)Deep Learning最新综述 zouxy09@qq.com http://blog.csdn.net/zouxy09 自己平时看了一些论文,但老感觉看完 ...
随机推荐
- 在Winform开发框架中对附件文件进行集中归档处理
在我们Winform开发中,往往需要涉及到附件的统一管理,因此我倾向于把它们独立出来作为一个附件管理模块,这样各个模块都可以使用这个附件管理模块,更好的实现模块重用的目的.在涉及附件管理的场景中,一个 ...
- golang学习和使用经验总结
学习网址 https://studygolang.com/pkgdoc go标准库网站 https://blog.csdn.net/sanxiaxugang/article/details/60324 ...
- windows 监控
监控time_wait状态tcp/ip连接 > netstat -an | findstr "TIME_WAIT" 如果监控此值发现量比较大,且有类似socketExcept ...
- Python静态网页爬取:批量获取高清壁纸
前言 在设计爬虫项目的时候,首先要在脑内明确人工浏览页面获得图片时的步骤 一般地,我们去网上批量打开壁纸的时候一般操作如下: 1.打开壁纸网页 2.单击壁纸图(打开指定壁纸的页面) 3.选择分辨率(我 ...
- sql server 复制表结构
1:复制表结构及数据到新表 select * into 目的数据库名.dbo.目的表名 from 原表名 select * into my0735home.dbo.infoMianTest from ...
- 资源预加载preload和资源预读取prefetch简明学习
前面的话 基于VUE的前端小站改造成SSR服务器端渲染后,HTML文档会自动使用preload和prefetch来预加载所需资源,本文将详细介绍preload和prefetch的使用 资源优先级 在介 ...
- 改善python程序的建议[转]
<编写高质量代码 改善Python程序的91个建议> <编写高质量代码 改善Python程序的91个建议>读后程序学习小结 - BigDeng_2014的专栏 - CSDN博客 ...
- P4137 Rmq Problem / mex (莫队)
题目 P4137 Rmq Problem / mex 解析 莫队算法维护mex, 往里添加数的时候,若添加的数等于\(mex\),\(mex\)就不能等于这个值了,就从这个数开始枚举找\(mex\): ...
- 互联网+ 何人能挡?带着你的Code飞奔吧!
Python方向: 早期方向 Web全栈 擅长专栏 爬虫系列 数据分析 人工智能 物联网系(lot万物互联)[逆天很看好未来的前景] 自动化运维(安全与测试) 其他系列 游戏开发(最近很火) 导航栏: ...
- JAVA之锁-cas
CAS是什么? CAS是英文单词CompareAndSwap的缩写,中文意思是:比较并替换.CAS需要有3个操作数:内存地址V,旧的预期值A,即将要更新的目标值B. CAS指令执行时,当且仅当内存地址 ...