全部博文(512)
分类: Python/Ruby
2022-01-12 09:25:16
数据平滑处理 是一个卷积过程,比如移动平均
1. 信号处理与滤波器
我们知道计算机处理数据是按帧处理的,也就是说计算机对信号的处理是不连续的。例如对声音的读写,录音的原理是以非常高的频率记录声音信号,播放的时候按照一定频率将数据读取出来,这一过程就是信号处理。在图形学中回忆下上一章中的画线,直线本身是连续的但是我们使用每个像素对其采样(信号处理), 当在屏幕上显示时(还原信号)由于还原的精度(或者频率)不同就可能导致还原信号过程中出现噪点或者锯齿(声音也是一样会有噪音)。而解决这类问题的方式就是使用滤波器。
2. 卷积与滤波
2.1 卷积
回忆下数学知识里的卷积,在图形学中使用较多的是其离散形式:(卷积内容在数学基础中)
由于图形学中使用较多的是卷积的离散形式,本文中将较多的以离散形式的卷积作为说明(同样使用与卷积的连续形式)。
2.2 卷积与滤波
考虑下游戏中要模拟一个物体的移动,其速度值随时间变化如下图:
采样的数据为a[i],也可以理解为函数a[i],为了使的每个时刻的速度相对平滑,我们需要对每个点在一定范围r(如果要算整段平均速度则r为整段范围)内计算平均值(求平均值其实就可以看做吧原始信号做平滑处理,也就是滤波的过程)即:
到目前为止好像整个滤波过程与卷积并没有什么关系。但是仔细观察平均函数的计算公式和卷积的计算公式,如果卷积公式中的函数b是一个常量函数: b[i] = 1/ (2r+1)。那么卷积函数正好变为了求平均速度的函数,此时函数b就称为原始信号a的滤波器。由这个示例做推广,我们可以把函数a[i]看做信号源,函数b[i]作为滤波器函数,则a与b的卷积就是信号a经过b滤波后的结果。由于卷积符合交换律,因此也可以看做信号b经过a滤波器过滤后的结果。
2.2 二维及多维卷积
卷积的定义或者上述速度的例子都是一维的,在图形学中更多的是对图片/像素进行滤波更多的需要的是二维的滤波过程。卷积同样适用于二维及多维,二维卷积公式如下:
图形学中经常使用一个滤波器(如像素集)对像素进行处理如下图中使用某像素周边9个像素(可能是同图片的9个像素也可能是另一图片的九个像素甚至可以是定是的9个像素值)作为滤波器函数:
3. 总结