本篇介绍
图像处理离不开采样与重建,本篇就介绍下采样与重建背后的数学逻辑。
一维采样
采样就是将模拟信号用数字信号表示,参考音频的处理流程如下:
image.png
这儿可以看到有滤波器的出现,滤波器是为了消除走样,后面会专门介绍。 对于同一个信号,用不同的采样频率采样后的结果可能是完全不一样的,如下图:
image.png
同样是一个正弦曲线,上面的采样率高,结果就和原始图像差不多,而下面的采样率低,重建的图像就完全不一样,这就是走样。在音频中就是会出现噪音,而图像中就会出现摩尔纹。
图像中出现的锯齿形也是走样,对应的修复手段就是滤波。
卷积
先看下移动平均,其实就是在计算函数值的时候,将该点的数值用覆盖该点的一个区间数值和的平均值代替。 参考下图,左边是连续函数,右边是离散函数。
image.png
用公式表示如下: 连续函数的移动平均公式:
image.png
离散函数的移动平均公式:
image.png
对于移动平均,每个点的权重是一样的,如果需要让每个点权重支持自定义,这时候就需要使用卷积。
离散卷积
序列a[i]用b[i]进行卷积的结果就是序列(a★b)[i]。用公式表示就是:
image.png
这儿可以插一个讨论,为什么卷积需要有一个反转操作呢?不可以是a[j]b[j]么?从公式上看是没问题的,不过从信号处理角度看,翻转一下更接近实际情况。可以参考下图:
image.png a可以看成是一个随时间变化的信号,b可以看成是一个响应函数,是距离当前时间的响应函数,距离当前时间为0的响应影响是b[0],距离当前时间为n的响应影响是b[n],也就是a和b的时间轴解读是有差异的。当时间是n时,输入的信号是a[n],此时系统整体的影响是n时刻及以前信号影响的累加,也就是a[0]刻的信号对于n时刻的系统也有影响,影响多大呢?就是b[n]a[0], 为啥是b[n]而不是b[0]呢?因为,而n时刻的信号对n时刻系统的影响就是a[n]b[0], 相应的a[n-1]b[1]等等,这样就形成了现在的卷积公式。
如果再定义卷积的作用范围,也就是半径是r,那么这时候卷积可以如下计算:
image.png
如果将卷机滤波的权重值做一个修改,等于1/(2*r 1),其余值都是0,那么这时候就变成了移动平均,也叫盒子滤波。
卷积的性质
可以将卷积看成是乘积,满足交换律,结合律,分配律。
image.png
单位脉冲函数
如果序列d[i],只有i为0时值为1,其余都是0,那么和任何函数进行卷积,结果都是原函数,这时候序列d就是单位脉冲函数
连续卷积
从前面的离散卷积可以自然也可以总结出连续卷积形式:
image.png
某个点的卷积值就可以看成是2个函数乘积结果曲线和坐标轴围成的面积。
image.png
再看下连续函数的盒子函数:
image.png
那f★f的结果如下:
image.png
进行求解就是:
image.png
这个函数就是帐篷函数。
Dirac Delta 函数
等同于离散的单位脉冲函数,连续场景中也有一种函数δ(x)满足单位脉冲性质:
image.png
δ(x) 对于x =0时是一个很大的值,非0时为0,积分为1.这样和任何函数的卷积都是原函数。
image.png
离散和连续卷积
如果用离散表示连续,那么通过采样就可以,如果需要用连续表示离散,那么就需要通过卷积,比如a是离散信号,f是滤波函数,对应的连续函数就是a★f,如下形式:
image.png
参考下图:
image.png
写成推导公式如下:
image.png
可以看到这样操作可以保证i是整数。
2维卷积
前面介绍的是1维卷积,可以简单看下2维离散卷积:
image.png
对应的推导如下:
image.png
某个点的卷积值可以看成是这个点周围区域所有点的带权和。
连续和连续卷积,离散和连续卷积也可以同样写出来:
image.png
某个点的卷积值同样可以解释成该点周围区域所有点的带权和。