从单幅图像高质量去除运动模糊——读JiaYaJia同名英文论文总结
原始论文在这里 http://www.cse.cuhk.edu.hk/leojia/projects/motion_deblurring/
一、概述
论文根据以下的基本模糊图像模型建立

其中I是我们观测到的图像,L是真实的图像,f是运动模糊的卷积核,n是观测过程中叠加的噪声
然后从统计角度分析L,f,n服从的分布,从而作为先验,构造能量函数进行优化求解。
二、对已有图像统计得到先验
1.L统计
1)对多幅图像统计的结果,L的梯度在全局上满足如下分布(曲线已经对数化)

曲线拟合表示为

最终的全局先验

2)构造L的局部先验来抑制振铃现象
使用一个与模糊核相同大小的窗口覆盖图像,计算偏差sd,输出
图像 = sd<5?1:0,

将全局和局部先验组合起来

2.f统计
通过对模糊核的统计,f的直方图符合指数分布,即大部分像素是0附近的

3.n一般的表述为

统计表明噪声一般服从高斯分布,或者乘高斯分布

其中
表示标准差,在Simon 2002论文中证明
,递推出
。
三、如何进行优化?
由贝叶斯原理

构造能量函数
,得到

上式中
表示矩阵元素乘法,几个参数

实验中,初始化
,前面有
,从而得到
。
下面对(5)式进行分步优化
1.先优化L,将f去掉,(5)式可简化成

用
代替
,上式再简化成

最后带
的余项表示
的近似。(8)式是关于
和
的式子(当然还有I,这里先忽略),下面分开进行优化
1) 固定
的话,(8)式进一步简化成

上式可以看出关于x和y的组合
x和y等价,对每个具体的
可写成
,从而

这是一个关于
的优化函数,最小化它就能得到一个最小的
,即最小的
x和
y。
实验过程中,
在迭代开始时分别设置在0.002-0.5 和 10-25之间,每次迭代后分别除以k1和k2,k1取值范围为[1.1, 1.4],k2= 1.5。
2) 更新了
之后,我们固定
可以将(8)式简化成

这个式子怎么求解呢?麻烦在于有卷积。进而考虑傅里叶变换到频域进行处理,得到

时域和频域对应,
从而相当于求

这个优化在Gamelin .2003的文献里有求解原理说明,得到

其中的
,这里
和
还是对原L的导数吗?有点疑问。
重复交替迭代优化
和
直到收敛。实验过程中
最初设为2,迭代一次乘以2。最后得到的
最优值。
2.第二步就是优化模糊核
了,固定
则(5)式可简化为

这是关于
的二次函数,类似于Jia 2007和Levin 2007写的样子,抽象如下

其中A和B是分别受L和I影响的矩阵,标准形式在Kim 2007的论文中提出,求解的基本思想是利用对偶原理,使用内点法求解。
至此,
和
的最优化估计就已经得出,算法框架如下

参考文献
[1] GAMELIN, T. W. 2003. Complex Analysis. Springer.
[2] JIA, J. 2007. Single image motion deblurring using transparency.In CVPR.
[3] LEVIN, A., FERGUS, R., DURAND, F., AND FREEMAN, B. 2007.Image and depth from a conventional camera
with a coded aperture.In SIGGRAPH.
[4] KIM, S.-J., KOH, K., LUSTIG, M., AND BOYD, S. 2007. Anefcient method for compressed sensing. In ICIP.
[5] SIMON, M. K. 2002. Probability Distributions Involving GaussianRandom Variables: A Handbook for Engineers,
Scientists and Mathematicians. Springer.
从单幅图像高质量去除运动模糊——读JiaYaJia同名英文论文总结的更多相关文章
- 如何写好一篇高质量的IEEE/ACM Transaction级别的计算机科学论文?
转自<知乎>如何写好一篇高质量的IEEE/ACM Transaction级别的计算机科学论文? 问题: 作为一个博士生,一直为写论文头疼,读过很多高质量论文,觉得写的真好,但是轮到自己写总 ...
- 维纳滤波和编码曝光PSF去除运动模糊【matlab】
编码曝光知识 - ostartech - 博客园 https://www.cnblogs.com/wxl845235800/p/8276362.html %%%%%%%%%%%%%%%%%%%%%%% ...
- Win8 Metro(C#)数字图像处理--2.50图像运动模糊
原文:Win8 Metro(C#)数字图像处理--2.50图像运动模糊 [函数名称] 图像运动模糊算法 MotionblurProcess(WriteableBitmap src,int ...
- OpenCV3入门(十三)图像运动模糊
1.原理 运动模糊产生: 由于相机传感器或物体相对运动, 按快门瞬间造成图像产生运动模糊. 在用摄像机获取景物图像时,如果在相机曝光期间景物和摄像机之间存在相对运动,例如用照相机拍摄快速运动的物体,或 ...
- atitit.thumb生成高质量缩略图 php .net c++ java
atitit.java thumb生成高质量缩略图 php .net c++ 1. 图像缩放(image scaling)---平滑度(smoothness)和清晰度(sharpness) 1 2. ...
- 移动Web—CSS为Retina屏幕替换更高质量的图片
来源:互联网 作者:佚名 时间:12-24 10:37:45 [大 中 小] 点评:Retian似乎是屏幕显示的一种趋势,这也是Web设计师面对的一个新挑战;移动应用程序的设计师们已经学会了如何为Re ...
- 高质量动漫实时画质增强器Anime4K在mpv上的配置
Anime4K地址 https://github.com/bloc97/Anime4K mpv地址 https://mpv.io/ 这个要错峰下载,网速不太好 在C盘用户\..\AppData\ ...
- 高质量图形库:pixellib
点这里 pixellib 是高质量 2D 图形库: 高质量抗锯齿,矢量图形绘制 多种图像格式: RGB, BGR, ARGB, ABGR, RGBA, BGRA 8 / 15 / 16 / 24 / ...
- (转)用AGG实现高质量图形输出(二)
本文上接<用AGG实现高质量图形输出(一)>,分别介绍了AGG显示流程中的各个环节. 上次讲了AGG的显示原理并举了一个简单的例子,这一篇文章开始讲AGG工作流程里的每个环节.为了方便对照 ...
随机推荐
- SqlServer按时间自动生成生成单据编号
SET @_tmpDateTime = GETDATE() EXEC dbo.Dtw_Common_GenerateProofCode @ProofType = 'SO',@WhsCode=@WhsC ...
- tp框架之查询
//数据访问 //造模型对象 $nation = D("Nation"); //查询 //$a = $nat ...
- 1.GoldenGate 简单的一对一配置
一,软件安装 源端和目标端均执行(只要修改相应的目录) 1.上传软件,放到ogg的安装目录,并解压 mkdir /home/oracle/ogg unzip ogg112101_fbo_g ...
- 算法系列:Fibonacci
Copyright © 1900-2016, NORYES, All Rights Reserved. http://www.cnblogs.com/noryes/ 欢迎转载,请保留此版权声明. -- ...
- 题目:解决.NET项目中的平台选项,由x86设置为AnyCPU
问题:开发出的.NET程序在windows7 X64平台无法使用,打开提示异常”stopping work….” 1.打开解决方案中的配置管理器,发现有部分程序集的平台是x86,想改变平台选项,发现无 ...
- python 线程之 threading(四)
python 线程之 threading(三) http://www.cnblogs.com/someoneHan/p/6213100.html中对Event做了简单的介绍. 但是如果线程打算一遍一遍 ...
- js添加var和不加var区别
var 声明的变量,作用域是当前 function 没有声明的变量,直接赋值的话, 会自动创建变量 但作用域是全局的. //----------------- function doSth() { a ...
- php 小函数
1 变量函数 a.is_xxx函数用来判断变量类型 is_numeric (PHP 4, PHP 5) — 检测变量是否为数字或数字字符串 is_int.is_integer.is_long,判断变 ...
- tornado学习笔记14 HTTP1ServerConnection分析
代表HTTP/1.x 类型的服务器连接,负责处理HTTP/1.x类型的请求. 14.1 构造函数 def __init__(self, stream, params=None, con ...
- java分享第八天-01(线程)
创建线程:1 可以实现Runnable接口.2 可以扩展Thread类本身. 通过实现Runnable创建线程:创建一个线程,最简单的方法是创建一个实现Runnable接口的类.为了实现Runnab ...