运动模糊算法推论

运动模糊是photoshop中的一种滤镜,也是AE中的一种动效。本文提出了该效果的一种算法实现及原理推论。演示demo见github。

一、效果演示

二、背景介绍

运动模糊是景物图像中的移动效果。它比较明显地出现在长时间曝光或场景内的物体快速移动的情形。

在即时电脑动画中,每一帧显示的是瞬时画面,没有动态模糊。因此每秒24-30张画面的电玩游戏看起来断断续续的并不自然,而使用画面更新频率更快的摄影机拍摄自然动作看起来却是连续的。因此很多电玩游戏会以运动模糊为特色,尤其是赛车模拟游戏:在预先运算生成的电脑图像中,给出逼真的运动模糊效果,在时间上避免失真需依照许多瞬间的组合来制造画面,渲染器也有更多的时间来绘制每个画面。

所以,在动画中加入运动模糊效果的目的:
1).增强快速移动场景的真实感,使视觉上更柔和。
2).在不损失视觉流畅性的情况下,减低帧率,显著减少功耗。

三、运动模糊算法

1.运动模糊的类型

线性
运动模糊发生在单一方向的模糊。镜头的角度会影响动态模糊线条的角度;滤镜的半径长度会影响模糊强度,长度越长会月模糊。本文讨论此种类型。


旋转
产生像物体在旋转的环状动态模糊。此类型的模糊以镜头为准的点为中心,角度为主要影响因素,角度变化越大越模糊。


缩放
缩放型的动态模糊是以图片中心为中心辐射开来的模糊。图片中心未发生模糊但以图片中心为准的外围却会模糊,会让人有凸显图片中心的动态感觉。镜头的缩放长度为主要影响因素。

2.运动模糊的原理

在上一节我们介绍过,在摄影机中产生运动模糊的原因是因为在曝光时间内,拍摄物体产生了唯一,所以造成运动模糊的效果。而在我们现实生活中,同样能够看到很多运动模糊的场景。比如雨滴落下的场景。在下大雨的时候,我们看到的雨滴,并不是一颗一颗的,而是成一条直线落下,但实际雨滴只是水滴的形状,并不是条状。这是由于视觉暂留的现象造成的。当物体停止发光时,在人脑海中的影像信息并不会立即小时,会有短时间的停留,而雨滴楼下的过程,由于视觉暂留的原因,雨滴每次进过的地方会在我们脑海中留下影像,既而形成一条连贯的直线,也就是我们人眼所看到的运动模糊的效果。

2.1.视觉暂留

视觉暂留现象是光对视网膜所产生的光停止作用后,仍保留一段时间的现象,原因是由视神经的反应速度造成的。视觉实际上是靠眼睛的晶状体成像,感光细胞感光,并且将光信号转换成神经电流,传回大脑引起人体视觉。感光细胞的感光是靠一些感光色素,感光色素的形成需要一定的时间,这就形成了视觉暂留的现象,也叫视觉惰性。
当物体在快速运动时,人眼所看到的影像消失后,由于视觉暂留的现象,视神经对物体的印象不会立即消失,而要延续一段时间,就形成了人眼所看到的运动模糊的景象。 基于视觉惰性的特性,当作用于人眼的光线突然消失后,亮度感觉不会立即消失,而是近似按指数规律下降而逐渐消失,如下图:

2.2.视觉惰性与运动模糊

如下是一个物体在制定的方向上运动

其中物体下方所标的序号1,2,……表示物体的该部分在1s,2s,……时间前曾经过标记位所处的位置。我们假设物体是匀速运动的,视觉惰性的亮度衰减函数为f(x),每个部分的最大亮度值为B(t),在标记位所看到的综合感官颜色残影位rest(t).这里为了简化计算,我们假设f(t)为线性关系,且B(t)为10.

则各部分在标记位残留的亮度位:

从上述分析可得,假设n为感光亮度消失的最大时间,人眼在比标记处看到的感官颜色值为:

这里为了简化计算,从亮度的峰值开始叠加各个衰减的残影。由之前的视觉残留数据我们可以知道,衰减函数在上升和下降阶段基本是堆成的,所以加上这阶段的残影叠加,我们可以得到:

即对于一张体现匀速运动的图片y(x)来说,我们将上述残影叠加映射到每个像素的计算,则产生运动模糊之后的图片可以表示为:

*表示卷积,psf即点扩散函数,而运动方向上感光亮度消失的最大距离点则为运动模糊的模糊半径。

3.模糊算法

3.1.点扩散函数

我们给运动方向加上一个斜率β,如下图所示:

图中的实心圆点为图片上受视觉惰性影响的像素点,(x0,y0)为像素点的坐标,L为模糊半径,即运动方向上感光亮度消失的最大距离,由运动速率决定。
则运动方向上最简单的运动模糊模型可用直线型点扩散函数以离散卷积形式表示为:

###3.2.图片处理 将运动模糊的点扩散函数代入之前介绍的模糊公式,设r=L/2,则

由于图片的像素是离散的,则上述模型可以表示为:

由上述模型我们可以知道,将一张图片进行运动模糊的处理, 实际是获取每个像素在运动方向上的L个采样点,取其平均值,作为相信的像素值赋值给当前计算的像素。
涉及的参数有:
1)方向β
2)模糊半径L
如下图为一张需要处理的图片,每个格子表示图片中的每个像素。红色格子为需要处理的像素。假设模糊半径为r,方向角度为β

则需要处理的像素颜色值为:

三、性能优化

减少采样点

对于一张n1xn2像素的图片,采用上述运动模糊的算法复杂度为

其中L为模糊半径,也为采样点的个数,图片模糊处理的计算时间随采样点个数呈线性增长。模糊的力度与模糊半径呈正比。所以我们可以在保证模糊半径不变的情况下,相应的减少采样点的个数:

由于在demo里我们处理的对象是文本图片,在文字内部,连续的两个像素值非常接近,将连续采样改成间隔采样对于文本来说在效果上的影响非常小,但是却可以减少一半的计算时间成本。 如下是减少采样前跟减少采样后的效果对比图:


可见,采样优化后的效果与优化前基本一致。

你可能感兴趣的:(运动模糊算法推论)