本文主要是介绍2006-TOG - Removing camera shake from a single photograph,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
项目地址:https://cs.nyu.edu/~fergus/research/deblur.html
- 多尺度
- 变分贝叶斯
- 高斯混合模型
- 用户选取区域及模糊核方向
- 泊松重构中间图像
- Richardson-Lucy (RL)算法恢复最终图像(优势:速度快)
假设为一致性模糊(卷积操作 ⊗ \otimes ⊗的边界条件为非周期 non-periodic):
B = K ⊗ L + N \bf B = K\otimes L+N B=K⊗L+N
In order to estimate the latent image from such limited measurements, it is essential to have some notion of which images are apriori more likely.
先验的作用:从有限的测量值B估计L(K未知),有很多解,有必要知道那种解更有可能。
研究表明,真实场景图像虽然像素分布变化很大,但是梯度分布服从重尾分布。
the distribution of gradients has most of its mass on small values but gives signicantly more probability to large values than a aussian distribution.
重尾分布相比高斯分布在梯度值大的区域具有更高的概率,如果使用高斯分布则恢复出的图像过于平滑。
The estimation process is performed in a coarse-to-fine fashion in order to avoid local minima.
估计模糊核时通过有粗到细的方式,可以避免局部最小值,特别是针对大模糊核。
算法需要用户提供(1)模糊的图像 P \bf P P,(2)模糊图像中的矩形块(局部区域 P \bf P P),(3)模糊核大小的上限(以像素为单位),以及(4)模糊核的初始方向(水平或垂直)。
由于先验是关于图像梯度的,因此算法优化需要从像素域转到梯度域。
因为卷积操作是线性操作,所以 ∇ P = ∇ L p ⊗ K \bf \nabla P=\nabla L_p \otimes K ∇P=∇Lp⊗K
论文使用C个分量(component)的高斯混合模型表示图像梯度先验,D个分量的混合指数模型表示模糊核先验。
论文首先通过最大后验概率MAP实现去卷积(deconvolution), 等价于解一个正则化的最小二乘问题(a regularized-least squares problem)传送门:最小二乘法的本质是什么
但结果并未成功。一种解释是,MAP的目标函数试图最小化所有的梯度(即使是较大的梯度),而我们期望自然图像具有一些较大的梯度。此外,作者发现MAP目标函数很容易受到局部极小值的影响。
论文采用变分贝叶斯(variational Bayesian, VB)估计一个分布 q ( K , ∇ L p ) q\bf (K,\nabla L_p) q(K,∇Lp)近似 p ( K , ∇ L p ∣ ∇ P ) p\bf (K,\nabla L_p|\nabla P) p(K,∇Lp∣∇P),代价函数为:
K L ( q ( K , ∇ L p , σ − 2 ) ∣ ∣ p ( K , ∇ L p ∣ ∇ P ) ) KL(q{\bf(K,\nabla L_p,\sigma^{-2})}||p\bf (K,\nabla L_p|\nabla P)) KL(q(K,∇Lp,σ−2)∣∣p(K,∇Lp∣∇P))
具体优化过程没看懂=_=
传送门:
- 变分贝叶斯相关PPT
- 变分贝叶斯初探
附:
绘制图像梯度分布代码:
f=imread('onion.png');
subplot(1,2,1);
if size(f,3) == 3f_gray = rgb2gray(f);
elsef_gray = f;
end
f_gray=double(f_gray);kx = [-1 1; 0 0];
ky = [-1 0; 1 0];f_grad_x=conv2(f_gray,kx,'valid');%水平方向梯度
f_grad_y=conv2(f_gray,ky,'valid');%垂直方向梯度
% g=sqrt(f_grad_x.^2+f_grad_y.^2);Ix=f_grad_x;
Value=unique(Ix(:));
Count=[hist(Ix(:),Value)]';
s=sum(Count(:));
count1=log2(Count/s);
figure,plot(Value,count1,'Color','black','LineWidth',2);
axis([-100 100 -18 0]);
title('Heavy-tailed distribution on image gradients');
xlabel('Gradient');
ylabel('Log2 probability density');
grid on;
这篇关于2006-TOG - Removing camera shake from a single photograph的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!