L0Smoothing学习笔记
2015-07-22 22:51
597 查看
L0Smoothing学习笔记
参考文献:ImageSmoothing via L0 Gradient Minimization
声明:文中的图,大部分来自上述论文的作者的演讲PPT,而且这只是本人学习笔记,未经同意,不得装载。
L0Smothing是大四上学期接触的,大四下学期放开没关注。研一时由于导师需要,则再次学习起来。不过也是上学期的时候了,现在觉得这个思想也是杠杠的,赶紧写个笔记,记录一下。
L0范数表示集合的非零个数。关于范数的知识还是不说,这方面的数学知识略薄弱,这里只需要理解成非零个数了。
因此先撇开L0范数的概念,对一张图片,一个信号来说。如图:取花图中小方框里的一个纵向信号。
可以看到,白色的信号(原来的信号)存在很多波动,这些波动在花图中变现为细节,比如花瓣上的脉络。而红色的信号则是白色信号的一个近似。可以看到,红色信号保留了白色信号的主要特征,同时,剔除了一些“多余”的波动(细节)。这样其实是一个Smoothing的过程。根据这一思想,去处理得到的对比结果,如下图。
为了实现这样的目的,则需要建立如下方程:
这里,使用L0范数,‘#’表示计数,fp为输出,因此该表达式表示输出的非零个数或者说梯度不为零的个数等于k。
这里,fp为输出,gp为输入,这样最小化,可以让输出与输入相似。因此加起来,可以得到下面的优化方程。
从1D去理解这条方程:
可以看到,随着K的增长,输出(红色信号)不断的近似输入(白色信号),而K的不同,优化的结果也不同程度地保留了信号的主要特征。
接着,便是怎么去优化这个方程。可以做如下变换:
该变换,我的理解是使用了拉格朗日乘数法,将约束条件与优化问题相结合。详情可以去百度一下。
不过做了这样的变化,还是不能直接求解,原因在于方程的前边段是基于像素的,可以说是局部的。而方程的后半段是约束了整个信号的梯度非零,可以说是全局的。这样不能直接求解。因此作者又做了一个变换:
通过引入两个变量,将L0范数的全局约束变成了局部约束。而这样的问题虽然去找一个全局最优节是一个NP难题,但是还是有法子去求解的。思想则是迭代。这个思想有点类似EM(ExceptionMaximization)算法。但个人还没有去证明是否等同,这个问题日后再说!?
注意:这时候已经转换到了2D图像的情况了。而要求解上图的问题,可以用一个近似:
这样近似,再用迭代的思想去求解,直到收敛即可。(看过代码,似乎是达到了迭代的最大次数)。而迭代则是分为两个问题。
其中,λ和β都是事先设置的,用于控制迭代的。剩下的便是实现细节了。这个日后有空在继续补充吧,暂时只需要记录这些。
参考文献:ImageSmoothing via L0 Gradient Minimization
声明:文中的图,大部分来自上述论文的作者的演讲PPT,而且这只是本人学习笔记,未经同意,不得装载。
L0Smothing是大四上学期接触的,大四下学期放开没关注。研一时由于导师需要,则再次学习起来。不过也是上学期的时候了,现在觉得这个思想也是杠杠的,赶紧写个笔记,记录一下。
L0范数表示集合的非零个数。关于范数的知识还是不说,这方面的数学知识略薄弱,这里只需要理解成非零个数了。
因此先撇开L0范数的概念,对一张图片,一个信号来说。如图:取花图中小方框里的一个纵向信号。
可以看到,白色的信号(原来的信号)存在很多波动,这些波动在花图中变现为细节,比如花瓣上的脉络。而红色的信号则是白色信号的一个近似。可以看到,红色信号保留了白色信号的主要特征,同时,剔除了一些“多余”的波动(细节)。这样其实是一个Smoothing的过程。根据这一思想,去处理得到的对比结果,如下图。
为了实现这样的目的,则需要建立如下方程:
这里,使用L0范数,‘#’表示计数,fp为输出,因此该表达式表示输出的非零个数或者说梯度不为零的个数等于k。
这里,fp为输出,gp为输入,这样最小化,可以让输出与输入相似。因此加起来,可以得到下面的优化方程。
从1D去理解这条方程:
可以看到,随着K的增长,输出(红色信号)不断的近似输入(白色信号),而K的不同,优化的结果也不同程度地保留了信号的主要特征。
接着,便是怎么去优化这个方程。可以做如下变换:
该变换,我的理解是使用了拉格朗日乘数法,将约束条件与优化问题相结合。详情可以去百度一下。
不过做了这样的变化,还是不能直接求解,原因在于方程的前边段是基于像素的,可以说是局部的。而方程的后半段是约束了整个信号的梯度非零,可以说是全局的。这样不能直接求解。因此作者又做了一个变换:
通过引入两个变量,将L0范数的全局约束变成了局部约束。而这样的问题虽然去找一个全局最优节是一个NP难题,但是还是有法子去求解的。思想则是迭代。这个思想有点类似EM(ExceptionMaximization)算法。但个人还没有去证明是否等同,这个问题日后再说!?
注意:这时候已经转换到了2D图像的情况了。而要求解上图的问题,可以用一个近似:
这样近似,再用迭代的思想去求解,直到收敛即可。(看过代码,似乎是达到了迭代的最大次数)。而迭代则是分为两个问题。
其中,λ和β都是事先设置的,用于控制迭代的。剩下的便是实现细节了。这个日后有空在继续补充吧,暂时只需要记录这些。
相关文章推荐
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- 基于C++实现的各种内部排序算法汇总
- C++线性时间的排序算法分析
- C++实现汉诺塔算法经典实例
- PHP实现克鲁斯卡尔算法实例解析
- C#获取关键字附近文字算法实例