guided filter(导向滤波)导读


本文为笔者阅读Kaiming He于2013年发表的guided image filtering时的笔记和实验合集,作者在文中省略的一些步骤给予了补充,在此记录下来,希望对后来者有益。
本文分为如下两部分:
1.论文阅读及算法原理介绍
2.基于matlab的简单实现


  1. 论文阅读及算法原理介绍
    先给出线性移-变滤波器的基本概念:给出输入图像p,指导图像I,得到输出图像,输入图像p和指导图像I可以是同一幅图像。滤波之后的图像可以用如下加权公式表示:
    q i = ∑ j W i j ( I ) p j q_i=\sum_j^{}W_{ij}(I)p_j qi=jWij(I)pj
    其中 i i i为当前滤波点的索引, j j j为滤波器模版覆盖的所有像素点的索引,滤波器(卷积核) W i j W_{ij} Wij是指导图像 I I I的函数,与输入图像 p p p独立。

可以用如下图简单解释上述过程:
在这里插入图片描述

所谓线性移-变滤波器包含两个性质:(1)线性性:滤波器通过线性加权进行滤波;(2)移-变:滤波其系数 W i j W_{ij} Wij随着图像中心的变化而变化,与之相对应的是移-不变滤波器,如传统的高斯滤波器/边缘检测算子等滤波器,一旦滤波器定下来不随着像素点的移动而改变。上述公式中的下标索引 i i i为红色像素点所对应的空间位置(下标),下标索引 j j j为所有蓝色和黄色像素点对应的空间位置。

一个简单的线性移-变滤波器就是联合双边滤波器,示意图如下图:
在这里插入图片描述
其核函数为:
W i j b f ( I ) = 1 K i exp ⁡ ( − ∥ x i − x j ∥ 2 σ s 2 ) exp ⁡ ( − ∥ I i − I j ∥ 2 σ r 2 ) W_{ij}^{bf}(I)=\frac{1}{K_i}\exp\left(-\frac{\Vert{x_i-x_j}\Vert^2}{\sigma_s^2}\right)\exp\left(-\frac{\Vert{I_i-I_j}\Vert^2}{\sigma_r^2}\right) Wijbf(I)=Ki1exp(σs2xixj2)exp(σr2IiIj2)
其中 K i K_i Ki为归一化系数,与传统的双边滤波器不同的是,这里在range方向上用指导图像 I I I来衡量相似度,如果range方向上相似度用原始图像来作指导,那么联合滤波器就退化为传统的双边滤波器。
下面给出guided filter的建模及推导过程:guided filter是指导图像和输出图像在一个局部区域内的线性模型,即假定输出图像 q q q是指导图像 I I I在以 k k k为中心的窗口 ω k \omega_k ωk线性变换:
q i = a k I i + b k , ∀ i ∈ ω k q_i=a_kI_i+b_k,\quad\forall i \in \omega_k qi=akIi+bk,iωk
这里 ( a k , b k ) (a_k,b_k) (ak,bk)在窗口 ω k \omega_k ωk中为常数。对公式两边求导可知 ∇ q = a ∇ I \nabla q=a\nabla I q=aI,因此如果指导图像 I I I中为边缘的地方,输出图像也有边缘。

在这里插入图片描述

通常的加性去噪模型假设输入图像 p p p为输出图像 q q q(恢复图像)加上某些分量 n n n(这里的 n n n可以理解成噪声或者某些细小的结构或振荡,比如纹理),因此有如下模型:
p i = q i + n i p_i=q_i+n_i pi=qi+ni
写成输出图像的形式:
q i = p i − n i q_i=p_i-n_i qi=pini
guided filter建模的思想在于寻找这样 ( a k , b k ) (a_k,b_k) (ak,bk),使得 q i = a k I i + b k q_i=a_kI_i+b_k qi=akIi+bk指导滤波之后的输出图像 q i q_i qi和输入图像尽可能相似(差异尽可能小),基于这样的想法,很自然就有了将 ω k \omega_k ωk窗口中滤波后的 q i q_i qi和滤波之前的 p i p_i pi的所有误差(差异)都累加起来,使得误差最小的 ( a k , b k ) (a_k,b_k) (ak,bk)就是我们要找的guided filter,于是很自然就建立的下面的模型:
min ⁡ E ( a k , b k ) = min ⁡ ∑ i ∈ ω k ( a k I i + b k − p i ) 2 \min E(a_k,b_k)=\min\sum_{i\in\omega_k}(a_kI_i+b_k-p_i)^2 minE(ak,bk)=miniωk(akIi+bkpi)2
仔细观察这个模型会发现一个问题,我们寻找输出 q i q_i qi是为了在结构上尽可能地和输入图像 p i p_i pi相似,但是如果通过求解这个最小化模型给出的结果使得 q i q_i qi p i p_i pi相等,即输出图像和输入图像一模一样,那么做这个滤波就失去了意义,在该式中,令 b k = 0 , a k = p i / I i b_k=0,a_k=p_i/I_i bk=0,ak=pi/Ii即可得到描述的结果,此时 min ⁡ E ( a k , b k ) = 0 \min E(a_k,b_k)=0 minE(ak,bk)=0,此乃我们在机器学习/模式识别/人工智能中常说的“过拟合”。于是需要考虑的是改造上面的模型,给它引入一个惩罚项,让输出图像 q i q_i qi尽可能的和输入图像 p i p_i pi尽可能相似,但又不能让它们完全相等,于是给模型加上一个 L 2 L^2 L2范数的正则项,并且给正则项加入一个 ϵ \epsilon ϵ来控制惩罚的强度,为什么 L 2 L^2 L2范数的正则项可以达到“泛化”和防止“过拟合”的目的,后面会给出一个详细的解释。于是上面的模型修正为:
min ⁡ E ( a k , b k ) = min ⁡ ∑ i ∈ ω k ( ( a k I i + b k − p i ) 2 + ϵ a k 2 ) \min E(a_k,b_k)=\min \sum_{i\in\omega_k}((a_kI_i+b_k-p_i)^2+\epsilon a_k^2) minE(ak,bk)=miniωk((akIi+bkpi)2+ϵak2)
这样才得到了作者在文中给出的模型,这个模型的求解很简单,不用去查所谓的回归分析等内容,这是一个无约束的二次最优话问题,显然是一个凸优化问题,极值点乃最优点,简单运用一下高等数学中的极值点的必要条件即可求解出 ( a k , b k ) (a_k,b_k) (ak,bk),这里送佛送到西,给出推导的详细过程:
使得 E ( a k , b k ) E(a_k,b_k) E(ak,bk)取得极小值的必要条件是:
∂ E ( a k , b k ) ∂ a k = 0 ∂ E ( a k , b k ) ∂ b k = 0 \frac{\partial E(a_k,b_k)}{\partial a_k}=0\\ \frac{\partial E(a_k,b_k)}{\partial b_k}=0 akE(ak,bk)=0bkE(ak,bk)=0
E ( a k , b k ) E(a_k,b_k) E(ak,bk)的具体模型有:
KaTeX parse error: Expected 'EOF', got '&' at position 43: …{\partial a_k} &̲=\sum_{i\in\ome…
先对 b k b_k bk的偏导数进行化简:
∑ i ∈ ω k ( a k I i + b k − p i ) = 0 ∑ i ∈ ω k b k = ∑ i ∈ ω k ( p i − a k I i ) ∑ i ∈ ω k b k = ∑ i ∈ ω k p i − a k ∑ i ∈ ω k ( I i ) \begin{aligned} & \sum_{i\in\omega_k}(a_kI_i+b_k-p_i)=0 \\ & \sum_{i\in\omega_k}b_k=\sum_{i\in\omega_k}(p_i-a_kI_i) \\ & \sum_{i\in\omega_k}b_k=\sum_{i\in\omega_k}p_i-a_k\sum_{i\in\omega_k}(I_i) \\ \end{aligned} iωk(akIi+bkpi)=0iωkbk=iωk(piakIi)iωkbk=iωkpiakiωk(Ii)
ω k \omega_k ωk中像素的个数有 ∣ ω ∣ \lvert\omega\rvert ω个,那么
b k ∣ ω ∣ = ∑ i ∈ ω k p i − a k ∑ i ∈ ω k I i b_k\lvert\omega\rvert=\sum_{i\in\omega_k}p_i-a_k\sum_{i\in\omega_k}I_i bkω=iωkpiakiωkIi
两边同时除以 ∣ ω ∣ \lvert\omega\rvert ω
b

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值