在图形学中,我们经常遇到连续变量函数:图像就是我们见过的第一个实例。但是连续函数不能直接用于数字计算机,必须设法对它们进行数字化处理。处理连续函数的最有效方法之一,是利用函数的采样值,将函数在多个不同点处的值存起来,需要时就重构其他函数值。
我们已经熟悉了用二维像素栅格表示一幅图像的思想,也就是说我们已经见识了采样表示法。下面考虑用数码摄像机获取图像的情况,通过镜头得到的实际场景图像是关于图像平面上的位置的连续函数,摄像机再将该函数转化成离散的二维栅格。
另一种样本表示的实例是二维数字化的书写板,如平板计算机或者PDA的屏幕。在这些实例中,初始函数是触笔的运动,它是时变的二维位置,或者说是R->R²类型的函数。数字转换器随时测量触笔在很多点的位置,得出二维坐标的序列。也就是Z->R²类型的函数。对于附着在行动者身上的特殊标志,运动捕捉系统起着与前面数字转换器类似的作用,它随时得到标志的三维位置(Z->R³)。并将其转化为一系列的瞬时位置值(Z->R³)。
维数更高的实例是医疗CT扫描仪,用来接触地检查人体内部,将密度作为体内位置的函数进行测量。扫描仪的输出是关于密度值的三维栅格,它把人体密度(R³ ->R)转换为实数维阵列(Z³->R)。
这些实例似乎难以理解,但实际上都基于相同的数学原理,在所有的实例中,都是在一维或者高维栅格点对函数进行采样,并且都需要能根据样本阵列重构原来的连续函数。
就二维图像的实例来说,像素可能已经足够多了,自从摄像机把图像离散化后我们就再也不考虑连续函数了。但是,如果想在屏幕上把图像变大或者变小怎么办,尤其是当缩放非整数倍数时?实践证明用最简单算法的效果非常差,出现了明显的附加噪声,称为走样。理解这种现象出现的原因并加以避免,需要用到关于采样理论的数学知识。结果得到的算法相当简单,但其后面的隐藏的推理过程,以及如何正确运用这些算法,都不是件容易的事情。
一、数字音频:一维采样
虽然采样表示在电信领域已经使用了很多年,但是,随着在过去十年里音频数字记录得到越来越多的应用,于是在1982年出现了压缩唱片,这才是采样理论第一次在消费市场得到应用。
在音频记录中,麦克风把以压力波形式在空气中存在的声音转化成时变的电压信号,该电压信号成为麦克风附近气压变化的度量值,要设法把这种电信号存储起来,以便稍后能通过扬声器播放出来。扬声器与电压信号同步使膜片振动,就把电压信号转变成了压力波。
记录音频信号的数字方法是采样:模数转换器(ADC)每秒钟测量电压数千次,产生整数流。这些整数可以很容易地存储在媒体中,比如录音棚里的电脑的磁盘;或者传送到另外的位置,如可移动音频播放器的内存里。在重放录音时,按照适当的速度独处数据,然后送入数模转换器(DAC)。DAC根据所得数值的大小产生一个电压,从实际应用的角度来看,如果我们得到了足够多的样本,能够完全表示电压的变化,那么经DAC得到的电信号与输入信号将是相同的。
![b5745062e4cabaf5cd946e816ec24e26.png](https://i-blog.csdnimg.cn/blog_migrate/afc7616fa214a2fc84cc156e2bc3b939.png)
已经证明,要想使重构出的音频具有较高的质量,美妙的采样次数取决于所记录声音的音调高低。假设某个采样速度能很好再现弦低音或者击鼓的声音,但如将该采样速度用于恢复短笛或者铙钹声音,则会产生稀奇古怪的效果。为了避免这种欠采样干扰,数字音频记录仪将输入进行滤波后再送给ADC,以去掉其中可能产生问题的高频信号。
另一种问题出现在输出端。DAC产生一个电压,每当新的样本到来时候电压就会随之改变,但是它在下一个样本到来之前一直是恒定的,因此产生阶梯状的波形。这些阶梯状波形就像是噪声,附加了一个高频、依赖信号的嗡嗡声。为了消除这种重构干扰,数字音频播放器将对DAC的输出进行滤波,从而对波形进行平滑。
(2)采样干扰与走样
数字音频记录链可作为图形学采样与重构过程的具体模型。在图形学的图像或者其他采样信号中,也会出现同样的欠采样干扰和重构干扰现象。解决办法也一样:采样前滤波,重构过程中再次滤波。
出现这种干扰的具体实例见下图,主要是由于采样频率太低造成的。例如对简单的正弦波进行采样。使用两种不同的采样频率:上面图中每个周期采样10.8次。下面图中每个周期采样1.2次。显而易见,高频率采样得到的样本集能较好地代表原始信号;而低频率采样的样本集。其表示结果很难与更低频率的正弦波区别,实际上这样的样本集合,似乎更适合代表图中虚线表示的低频正弦曲线。
![71499ad4d5c69b5002bc6522bd9e6bb7.png](https://i-blog.csdnimg.cn/blog_migrate/092804ddbdc20abc7a181e210e6e319a.png)
采样之后我们得到了样本集,但不知道结果与哪个原始信号对应,是高频信号还是低频信号?这时,找不出能够适当重构原始信号的唯一方法。这种高频信号“假扮”低频信号的现象,称为走样。
当采样与重构中因频率问题带来认为干扰时,就产生了走样现象,对于声音情况,走样现象的结果是产生听起来很奇怪的音调,对于图像情况,走样经常表现为莫尔图案,它是由样本栅格与图像规划特征相互作用形成的结果。
在合成图像中,另一个走样实例是我们常见的呈阶梯状的直线,其中直线只有黑、白两色像素组成。这是小尺度特征(直线的尖锐边缘)产生不同尺度(浅斜线的阶梯较长)干扰现象的实例。
采样与重构的基本问题,可以简单地借助特征太小或者太大来理解,但是更多定量问题难以回答:
1.采用多高的采样频率能保证得到好的结果?
2.什么样的滤波器适合于采样与重构?
3.为了避免走样,需要平滑到什么程度?
二、卷积
在讨论采样与重构算法之前,首先研究其依赖的数学概念,即卷积。卷积是一个简单的数学概念,它是采样、滤波、重构等算法的基础。
卷积是对函数的运算,由两个函数产生一个新的函数。在本书中,卷积运算符用星号“*”表示。函数f与g的卷积表示为f*g,读作f与g进行卷积,或者f*g是f与g的卷积。
卷积可用于连续函数,也可用于离散序列。卷积可用于一维、二维或高维定义域的函数(也就是有一个、两个或者更多个自变量的函数)。我们先从离散一维情况开始,然后过度到连续函数情况以及二维和三维函数情况。
为了方便,在定义中一般假设函数的定义域是无限的。实际定义域是有限的,并且要对端点进行特殊的处理。
1、滑动平均
为了大致了解卷积,考虑采用滑动平均方法对一维函数进行平滑处理的实例,为了获得任意点的平滑值,计算该点r领域的函数平均值。距离r称为平滑运算的半径,这是一个控制平滑程序的参数。
![a41d8aed41751ee77ab98ba986faa11e.png](https://i-blog.csdnimg.cn/blog_migrate/18fd28dfc56c3c492475a4759b1b4c27.png)
可以在数学上对离散或连续函数的滑动平均思想进行描述。假设我们对连续函数g(x)进行平滑处理。平均就是先在某个区间上对g积分,然后除以区间的长度:
![d98bf6590af061f94b93f6a1f9bf6660.png](https://i-blog.csdnimg.cn/blog_migrate/73da727e7389b1f6b2ae6823b2ac71bb.png)
另一方面,如果平滑对象是离散函数b[i],平均就是将某个索引范围内的b加起来,然后除以值的个数:
![7f073ce0f6e6d76b189a2be27527982d.png](https://i-blog.csdnimg.cn/blog_migrate/a40d37183a2982652379fdc2c79736e2.png)
以上两种情况下,都要选择一个规范化常量,使得对常量函数平滑时能得到相同的函数结果。卷积的本质是滑动平均思想,唯一的不同是卷积中的滑动平均是加权平均。
2.离散卷积
首先介绍离散卷积计算,即将离散序列a[i]与离散序列b[i]进行卷积。结果为离散序列(a*b)[i]。该过程就像是对b进行滑动平均,但不是在领域内对所有的样本取一样的权重,而是用第二个序列a给每个样本施加权值。计算第i个卷积时,索引为i-j的样本b[i-j]的权重为a[j]。这时关于(a*b)的计算公式表示为
![ab0da3cbdeacbc14b7813d86bfe11a56.png](https://i-blog.csdnimg.cn/blog_migrate/cf85ee2d00e083a5fa86b2f2d80d5631.png)
忽略j的边界条件,上式是对所有整数的求和运算(也就是从-∞到+∞)。显示输出如何计算出来的。
在图形学中,一般两个函数中有一个具有有限支撑集,这意味着只在自变量的有限区域内取非零值。如果假设a的支撑集有限,那么就存在某个半径r,使得当|j|>r时,都有a[j] = 0。这时,上面的求和公式可写为
![9eb0d05723e6f9cc36f74816b2490459.png](https://i-blog.csdnimg.cn/blog_migrate/3f6b7342035ec9b12e8842cb081d5bcf.png)
将上面的定义用代码实现为
function convole(sequence a,sequence b,int r,int i)
s = 0
for j = -r to r
s = s + a[j]b[i-j]
return s
![618218a8faf2f50e067683836f06522c.png](https://i-blog.csdnimg.cn/blog_migrate/1708b25edc65725e380bd6896278622c.jpeg)
a.卷积滤波器
卷积很重要,因为我们可以用它来进行滤波。回到关于滤波的第一个实例,即滑动平均滤波。现在可以将滑动平均操作解释为是与一个特殊序列的卷积。当计算有限索引范围内的平均值时,就相当于对该范围的点取相同的权值,而对此范围之外的点权值取0。这种滤波器,在非零区间上存在一个常数,称这种滤波器为盒式滤波器(因为画出来看着像矩形)。一个半径为r的盒式滤波器,其权值为1/(2r+1)
![1eaaf5d9db62ce4faed3034fd8b28fe5.png](https://i-blog.csdnimg.cn/blog_migrate/601791415a235c12a6fda2eaea4045ec.png)
b.卷积性质
到目前为止,卷积似乎是一种不对称的运算:b是我们要平滑的序列,而a提供权值。卷积的一大优点是:滤波器和新号可以互换,二者实际上没有什么不同,为了弄明白这个问题,把之前的公式用i-k代替j,结果的扫
![ba931155ff210a389712e4d3b45c171e.png](https://i-blog.csdnimg.cn/blog_migrate/2db024be8aa16a51710114aa51acf30e.png)
这与上式一样,只是用b作为滤波器而用 a作为信号。因此,对于任意序列a和b,(a*b)=(b*a),卷积运行满足交换律。
提示:我们可以注意到,卷积求和中的一个函数似乎存在跳变,也就是说,a[j]在序列中赋给样本的权值提前了j个单位,而a[-j]赋给样本的权值延迟了j个单位。这样做是为了保证结合律,由于多数滤波器是对称的,因此不需要担心这个问题。
更一般地说,卷积运算类似乘法运算,卷积运算满足交换律、结合律、对加法满足分配律。在计算卷积之前,利用这些性质进行化简,就可以节省工作量。
下面介绍一种简单的滤波器,可作为离散卷积的单位函数:它是半径为零的离散滤波器,作为离散卷积的单位函数:它是半径为零的离散滤波器,也就是序列d[i] = ...,0,0,1,0,0,...。如果将d与一个信号b进行卷积,那么在求和式中只有一项的值不为零:
![90465df8faf3e3085a4f968e3be2382e.png](https://i-blog.csdnimg.cn/blog_migrate/5ac25059760f04af6dd2f95c76c0764c.png)
很显然,b与d求卷积结果还是b。序列d 称为离散脉冲。在表示滤波器时有时要用到离散脉冲。例如,用滤波器a平滑信号b,然后将结果从初始信号b中减去的过程,可以表示为信号单独与滤波器d-a求卷积:
![231db6b615296756600ebedac721965e.png](https://i-blog.csdnimg.cn/blog_migrate/507f65b34147401df5f1d2ff9438118b.png)
3.把卷积看作移位滤波器之和
对于之前的卷积公式存在另一种完全等价的解释方法。我们已经知道,每次考虑a*b的一个样本,产生了加权平均的解释。如果省去[i],可以认为是对整个序列求和。需要先定义一种表示符号。如果b是一个序列,那么将整个序列向右移动j个位置,得到的心序列称为b→j
![2d25cab0fd9ea52b7700efc95b66cedb.png](https://i-blog.csdnimg.cn/blog_migrate/4aac27ebdc6437047ff7911f60231e0d.png)
那么,就可以把式表示为关于整个(a*b)的形式,而不是关于整个(a*b)的形式,而不是关于单个元素的形式:
![bd71b25df0d0f3e40f00b40b916be34e.png](https://i-blog.csdnimg.cn/blog_migrate/54cdff144b757a4bec6a5bc9a0d6ca05.png)
用这种方式来考虑,卷积就是b的移位序列之和,权值由a的项来确定。由于服从交换律,因此a或b都可以作为滤波器。如果选择b作为滤波器,那么就是针对输入的每个样本将滤波器相加。
![d2d293504798f2b52be6d1ca1d68c4a3.png](https://i-blog.csdnimg.cn/blog_migrate/5ab7cf0ac1f83f530a6531f84d0d0fee.png)
4.与连续函数的卷积
在计算机编程中虽然我们实际处理的是离散序列,但是我们认为这些采样序列代表的是连续函数,并且经常需要对连续函数进行数学推导,以决定下一步应该做什么。因此,对连续函数之间以及连续函数和离散函数之间的卷积进行定义式非常有用的。
两连续函数之间的卷积,显然是之前公式的推广,即用积分代替求和运算:
![989583dd8762e006a3d6487f3b20a04e.png](https://i-blog.csdnimg.cn/blog_migrate/4884c9ecb9bbfe1b26fd3fb0bfd3deed.png)
对该定义的一种解释是,x处f*g的值,就是移动f(0)与g(x)对应之后,两函数只积所形成的曲线下面的面积。和离散情况一样,求卷积就是进行滑动平均,由滤波器来提供权值
![9b0a6f2055b358b6961803bd4d1102ae.png](https://i-blog.csdnimg.cn/blog_migrate/6ba8fd91216b6bb5a74043800b842689.png)
和离散卷积一样,连续函数的卷积也满足交换律、结合律以及对加法的分配律。同样,连续卷积也可以看作是对移位滤波器求和,而不是计算加权平均。不同之处,在连续情况下,有无限多的移位滤波器拷贝:
![78ae21b70dccc9dd598e562b148faad3.png](https://i-blog.csdnimg.cn/blog_migrate/0a23ed4f42168e987e647017b4cb6a72.png)
例题:求两盒式函数的卷积。设f是一个盒式函数:
![31d9a18f9dfcd9e419e90ea30b6121c5.png](https://i-blog.csdnimg.cn/blog_migrate/c5c560d504adbe703a4e78e4e7c8d680.png)
那么,f*f是什么?根据积分代替求和运算所得的公式可得:
![2e63efb051f15cdb5e8a7d2d23018983.png](https://i-blog.csdnimg.cn/blog_migrate/fc4acbc444d44730fdfcc4b0a0847f39.png)
显示该积分的两种情况。两盒式函数可能有零重叠,即重叠发生在x≤-1或者x≥1时。在这种情况下,结果为0。当-1<x<1 时,重叠取决于两盒式函数之间的间隔|x|,结果为1-|x|。因此有
![9f83f3ff9d6eb37850e2c417b5a3a36e.png](https://i-blog.csdnimg.cn/blog_migrate/c780815ad430d6c7fae570284a4c740d.png)
该函数称为帐篷式函数,是另一种常用的滤波器
![7742221ea7c220a9c22bf89e879d105c.png](https://i-blog.csdnimg.cn/blog_migrate/640e7977ec0eab85a59fc89ba80142a7.png)
狄拉克δ函数
在离散卷积中,我们知道了讲离散脉冲d作为单位滤波器,即有d*a = a。在连续情况下,也同样存在一个单位函数,称为狄拉克脉冲函数或者狄拉克δ函数,表示为δ(x)。
直观地说,δ函数是尖而高的脉冲,其宽度无限小但下面的面积仍然等于1。δ函数存在一个重要的性质,它与某函数的相乘结果等于该函数在0处的值:
![a8bbc76e8709fe73c422c3399d2eab4c.png](https://i-blog.csdnimg.cn/blog_migrate/b0b2733cf2f4761628a98f4b9fbc1ad5.png)
δ函数在0处没有确定值(可以认为是+∞),但是对所有的x≠0都有δ(x)=0。
由于δ函数的上述性质,即可以得到函数在某点出的函数值,因此可以将δ函数看成连续卷积的单位函数。δ与函数f的卷积为
![edb3b988aa7def59ab1d42ff977f19f6.png](https://i-blog.csdnimg.cn/blog_migrate/bb49636a7c74a91f5addf8d347f4484e.png)
所以有δ*f = f。
![fdcc6b788e59cf16e9197e94a3e4a6c4.png](https://i-blog.csdnimg.cn/blog_migrate/f8335ff4d872aadeb1508de3445a2f37.png)
5.离散-连续卷积
离散与连续的相互转换存在两种方式。首先是采样,通过记录连续函数在所有的整数自变量处的值,而忽略其他位置的值,这样就将连续函数转化成了离散函数。对于连续函数f(x),通过对它进行采样将其转化为离散序列a[i]:
![fae2e5784c212d57a22b46d140240e07.png](https://i-blog.csdnimg.cn/blog_migrate/ffa572796ebe103c0ce5a243c3e1e002.png)
其次是从离散函数或者序列到连续函数的转化,称为重构。实现重构个要用到另一种卷积形式,即离散-连续卷积形式。在这种情况下,用连续滤波器f(x)对离散序列a[i]进行滤波:
![b3c05b7273967f8cfde7d3396fce9b84.png](https://i-blog.csdnimg.cn/blog_migrate/1f6b4302f9ce96b48ce46067e02dbcf2.png)
重构函数a*f在x处的值,就是在x附近关于i值的样本a[i]的加权和。权值来自滤波器f,即间距为 一个单位的各点处的函数值。
![e5f06ef3085afc12ecc2a8d47286fdbf.png](https://i-blog.csdnimg.cn/blog_migrate/352c642f3253087b640d78aba40ae35b.png)
和离散卷积一样,如果我们知道滤波器的半径r, 就可以对求和进行范围限制,忽略那些x与i至少相差r的所有点:
![52d480a0aee76ddff100bc3e2d19942c.png](https://i-blog.csdnimg.cn/blog_migrate/bb290f2b090b289694e3926e6a57b049.png)
需要注意,如果某点与x正好相距r(也就是x-r的结果是一个整数),求和时它就会被忽略。这与离散情况相反,离散情况下我们包含点i-r。
用代码表示,就是
function
与其他形式的卷积一样,离散-连续卷积看起来是对移位滤波器进行求和
![096f3492b85a1dac4623f47c11e39ad5.png](https://i-blog.csdnimg.cn/blog_migrate/d5d25ce62104ef6c224f1b090fca81ed.png)
![a44a9867950ef7b3b0ce5f56ad33a892.png](https://i-blog.csdnimg.cn/blog_migrate/edb34fb053ef2480549d79a63212e591.png)
离散-连续卷积与样条函数联系密切。对于单值样条,样条的参数化曲线正好是样条的基函数与控制点序列的卷积。
6.多维卷积
到目前为止,我们所讨论的采样与重构问题都是一维的,即只有一个自变量x,或者只有一个索引i。图形学中用到的重要采样与重构,都是针对二维函数,尤其是二维图像。幸运的是,对采样算法及理论从一位到二维、三维或者更高维的推广,在概念上是非常简单的。
我们从离散卷积的定义开始,将其推广到二维情况,将和的形式变成双重求和:
![8816e02102d9b3f7212d2908e0dfb17b.png](https://i-blog.csdnimg.cn/blog_migrate/88a321647b655b1c931e46c421021661.png)
如果a是半径为r的有限支撑的滤波器(也就是说,它有(2r+1)²个值),那么我们可以对求和范围进行限制:
![9fe817839a438cd491fd70cb65d43133.png](https://i-blog.csdnimg.cn/blog_migrate/12ca3773413694a8212eeaad9a67546f.png)
用代码表示为
function
类似一维情况,可以对该定义进行解释。输出样本等于输入面积的加权平均值,其中将二维滤波器作为“掩模”以确定每个样本的权值。
继续推广,可以将二维空间中的连续-连续卷积和离散-连续卷积表示出来:
![741331ee15aaae9abe0d845cff1d48ff.png](https://i-blog.csdnimg.cn/blog_migrate/f9a952b71c930421ac0b658843607474.png)
两种情况下,在某点的卷积结果都是在该点附近对输入的加权平均。对于连续-连续情况,是在以该点为中心的区域上进行加权积分:对于离散-连续情况,是对落在该点附近的所有样本的加权平均。
![a38ba9eef467ecf8fc8aa940f0277f69.png](https://i-blog.csdnimg.cn/blog_migrate/429a6bf454b0e7533bf222c215c1a4ea.jpeg)
三、卷积滤波器
1.各种卷积滤波器
a.盒式滤波器
盒式滤波器是图个分段常值函数,它的积分结果为1。作为一种离散滤波器,其数学形式为
![27797a41603ce990c40c0d0324fee6ff.png](https://i-blog.csdnimg.cn/blog_migrate/5808b5466ff512b99727236f0db5c0e0.png)
注意为了保持对称性,函数定义包含了两个端点。
连续滤波器的数学形式为
![709a15d58a07a27073229ea09048f24d.png](https://i-blog.csdnimg.cn/blog_migrate/0256585917aa68634128e865c7c69cca.png)
这时只包含一个端点,使得半径为0.5的盒子能用作重构滤波器。由于盒式滤波器不是连续的,这些边界情况就变得非常重要,而且对于这种特殊的滤波器,我们对边界情况要引起注意。
b.帐篷式滤波器
帐篷式滤波器,或称为线性滤波器,是分段连续的线性函数:
![12edaf69bab294ccd2b55de74a8d2f42.png](https://i-blog.csdnimg.cn/blog_migrate/163898adf5b8b02260930ea5fd6aa56f.png)
对于没有跳变的滤波器,不再需要将离散和连续情况分开。离散滤波器就是连续滤波器采样后的结果。也要注意,为了简单,我们通过缩放标准大小的帐篷式来定义ftent,r 。从现在起,我们认为这种缩放标识是默认的形式。如果定义了滤波器f,那么就可以用fr表示“滤波器f伸展r倍,或者收缩r倍”。注意fr与f有相同的积分结果,并且总是保证这个积分结果等于1.0。
![bb36df13bf0c4aa47563977459ed0c80.png](https://i-blog.csdnimg.cn/blog_migrate/9d295a716de70485af144effaeaddeec.png)
c.高斯滤波器
高斯滤波器,又称为正态滤波器。无论在理论上还是在实际中,高斯滤波器都是一类非常重要的滤波器。
![fcbc090fd6fdf9455f1f21f227857b08.png](https://i-blog.csdnimg.cn/blog_migrate/6e5e4879ec1da671eb54ab87bc2dc556.png)
高斯滤波器没有有限的支撑集,虽然随着指数衰减它的值会迅速地减小到可以忽略不计。必要时,可以对函数进行截尾处理,将某个半径之外的值都设为0。高斯滤波器是一种很好的采样滤波器,因为它非常平滑。
![0a70fff8980c34e9c97ad76a24375b7c.png](https://i-blog.csdnimg.cn/blog_migrate/a2e5bcdada10f0bba28b817551ad910e.png)
d. 三次B样条滤波器
很多滤波器都定义为分段多项式,三次滤波器有4段,经常用作重构滤波器有4段。这种滤波器称为B样条滤波器。起源于作为样条曲线的混合函数:
![9ba65c58cd909e856a5befce3535221f.png](https://i-blog.csdnimg.cn/blog_migrate/25351c1d5f5719225c8dd60522b92107.png)
在分段三次曲线中,B样条是特殊的,因为它有连续的一阶和二阶导数,也就是C²。定义这种滤波器的更简练的方法是:
![5805a22463afa4d7c7e479c7c67ef76a.png](https://i-blog.csdnimg.cn/blog_migrate/dccd2377a06812393f8233ba5a97ffaf.png)
![4983f9355810fe1ef94c70f1f3d2652e.png](https://i-blog.csdnimg.cn/blog_migrate/d8f9be4193f86692ec0a627f0bca5f75.png)
e.三次Catmull-Rom滤波器
另一种分段三次滤波器是Catmull-Rom滤波器。在x = -2、-1、1、2处函数值为0,这意味着用作重构滤波器时将插值样本
![dfff878e1a4916410a0a771add6cca2b.png](https://i-blog.csdnimg.cn/blog_migrate/e443c87e3367eaafcba025cb6e4abd11.png)
h. 三次Mitchell-Netravali滤波器
对冲采样图像的重要应用问题,Mitchell和Netravali做了关于三次滤波器的研究,并在上面两种滤波器基础上推荐折中滤波器,作为个方面最佳的可选滤波器,实际上,这种滤波器只是前面两种滤波器的加权组合:
![d092d04c2a78fcc5f3d2873f3180481f.png](https://i-blog.csdnimg.cn/blog_migrate/9e6e71419f301c9362b85202970c5739.png)
2.滤波器的性质
滤波器的脉冲响应是滤波函数的另一种称呼,是指滤波器对只包含一个脉冲的信号的响应。
当用连续滤波器从离散序列重构连续函数时,结果函数只接受采样点处的样本值,也就是说,它“将那些点连起来”,而不是产生经过点附近的函数,这时我们称该连续滤波器是插值的。确切地说,插值滤波器就是满足f(0) = 1、并且在所有的非零整数i处满足f(i) = 0的滤波器f。
![c040093853e3871bfc8cfa3aeb27accb.png](https://i-blog.csdnimg.cn/blog_migrate/eb9929bc74e30fcaae6f77c410be959e.png)
具有负值的滤波器存在振铃,或者过冲,当被滤波的函数值出现急剧变化时,在这些值附近就会出现额外的振动。
连续滤波器是无波动的,当用作重构滤波器时,它把常量序列重构为常量函数。这一点,与整数栅格位置上的滤波函数值之和为1 的要求是等价的。
![fc41fbb5a186630bedf465bfae20840f.png](https://i-blog.csdnimg.cn/blog_migrate/a68d7450ed5366d3716d3472351c53b3.png)
可分滤波器
到现在为止,我们只讨论了一维卷积滤波器,图像及其他多维信号也需要滤波器。一般来说,任何二维函数都可以用作二维滤波器。有时需要啊直接定义二维滤波器,但在多数情况下,是利用已知的一维滤波器来构建合适的二维滤波器(或者更高维滤波器)。
最有用的构建方式是采用可分滤波器。在某x,y处,可分滤波器的值f2(x,y)等于一维滤波器f1在x,y处的值之积:
![ea444bac5bc83ce6beb6ac0086014d63.png](https://i-blog.csdnimg.cn/blog_migrate/b0605e97b551898cc86b91c59c92cbcd.png)
类似地,有二维离散滤波器:
![76d66626ed06b991d6aab5886b242801.png](https://i-blog.csdnimg.cn/blog_migrate/371f1797375ac79d75b881ba49ca3bc8.png)
过f2的任何横、纵剖面,都具有与f1类似的形状。f2的积分等于f1积分的平方。特殊地,如果f1是正态的,则f2也是正态的。
四、图像信号处理
1.离散图像滤波
也许最简单的卷积应用是用离散卷积处理图像。图像运算程序中,得到最广泛应用的是简单的卷积滤波器。通过与一般低通滤波器(从盒式滤波器到高斯滤波器)进行卷积,实现对图像的模糊化处理,高斯滤波的结果看起来很平滑,所以经常用它进行模糊化处理。
![c1ff77de7d1cef8bb11ba990193db76d.png](https://i-blog.csdnimg.cn/blog_migrate/7a451939f457ca0312da0468a8c21850.jpeg)
与图像模糊化相对的运算是图像锐化。实现锐化的一种方式是采用“模糊掩模”:从原始图像中减去一幅模糊化图像的一部分α。重新调整尺度,以免图像的整体亮度发生改变。于是有:
![5ed929994196d91c9fde4e7e81df7fe4.png](https://i-blog.csdnimg.cn/blog_migrate/2e53d8cf6a93cb3d7e3c6e48fe731bf7.png)
其中fg,σ是宽度为σ的高斯滤波器。利用离散脉冲d及卷积的分配律,可以把整个过程表示为含模糊宽度及锐化程度两个参数的单一滤波器。
另一个结合使用两离散滤波器的实例是阴影。通常利用模糊的、移位的目标轮廓来构造柔和的阴影。可以将移位运算表示为与偏离中心的一个脉冲的卷积:
![90a4fc2a50f6b1fdffdac70d1598b289.png](https://i-blog.csdnimg.cn/blog_migrate/63bbb09e6d6d7b30f1277b0a03dd83d3.png)
通过与两种滤波器的卷积运算,就实现了移位及模糊化:
![ea6a41a3129c4228b0b93975e045e8f8.png](https://i-blog.csdnimg.cn/blog_migrate/e402a1e35e30e54091cbb8c7c5648497.png)
上式中利用了结合律,将两次运算合成,变成含三个参数的一个滤波器。
![3e0b1b4f089a925dba83b35186df1b64.png](https://i-blog.csdnimg.cn/blog_migrate/e2c548116719019d713c97fa8a5ea4bb.png)
2.图像采样中的反走样技术
在图像合成中,对用连续数学公式(至少是可计算任意点颜色、而不只是整数像点颜色的程序)表示的 图像,常常需要产生一幅对应的采样图像。光线跟踪就是常见的例子。用信号处理语言来描述就是,对于连续的二维信号(图像),需要基于规则的二维点阵进行采样。如果不采取任何特殊措施,直接对图像进行采样,结果将显出各种各样的走样。在图像的突变边缘上,会看到阶梯状伪影,称为“锯齿”。在有重复图案的区域,我们看到的带状物称为莫尔图案。
![e515f51bda8a7962cf6ab957a218d3c9.png](https://i-blog.csdnimg.cn/blog_migrate/b474b7d32bbee118a23be463ccafb5f9.png)
问题是图像中包含很多小尺度特征。在采样之前,要通过滤波去掉这些特征。回想式中关于连续卷积的定义,我们需要在像素周围的区域上计算图像的平均值,而不仅仅是取个别点的值。像盒式滤波器那样的简单滤波器,可以改善突变边缘的外观,但仍然会产生一些莫尔图案。高斯滤波器是非常平滑的,抑制莫尔图案的效果要好得多,但是引起图像整体上变得模糊。这两个实例说明,在选择反走样滤波器时,要再清晰和反走样之间进行折中。
![103b2c4307044eb8019fa93e39c3aefc.png](https://i-blog.csdnimg.cn/blog_migrate/16bdb89233cc1de05ac6cc4fd60a276b.png)
3.重构与重采样
当对滤波要求比较高时,重采样是最常见的图像运算之一。重采样就是改变采样速度或者改变图像大小。
假设从数码摄像机获得大小为3000像素X2000像素的一幅图像,想在显示器上显示1280像素X1024像素。为了保持纵横比3:2,需要对它重采样,大小变为1278像素X852像素。该如何做呢?
一种方法是,将这个过程看作是删除像素的过程。因为我大小比例在2和3之间,所以要再留下额像素之间去掉一个或者两个像素。用这种方法来压缩一幅图像是可以的,但是结果得到的图像质量很低。像素删除的速度很快,但在交互操作中应该对被调整的图像生成一个预览。
调整图像大小的放,可以看作是对图像进行重采样的过程:我们需要在特定栅格上的一组图像样本,该栅格定义在新的图像尺寸上,对根据输入样本重构的连续函数进行采样就可以得到这些样本。这样看来,这个过程只是一系列标准图像运算:首先根据输入样本重构一个连续函数,然后对该函数进行采样,就像对其他连续图像采样一样,为了避免走样,在每一步都要选择适当的滤波器。
![3ca60c14cdaa8ba70cdd407f3d8cb9f5.png](https://i-blog.csdnimg.cn/blog_migrate/bf0291c61061792f06cd941806c52889.png)
参考下图所示的小示例。如果原始图像是12X9像素,而新图像为8X6像素。在每一维,输出像素数是输入像素数的2/3,因此图像上的像素间隔是原始图像3/2
![c0d37804c01193c661adc37913bc1aef.png](https://i-blog.csdnimg.cn/blog_migrate/c94b03a46df541bdb355948910c6e84f.jpeg)
为了给每个输出样本赋值,需要计算样本之间的图像值。像素删除算法就为我们提供了这样的一种方法:取输入图像中与样本最近的值作为输出值。
删除像素或者其他简单的滤波算法,作为一般重构-重菜汤过程的特例来实现时,考虑的不是它们的性能。实际上,由于盒式滤波器的不连续性,很难在一般框架下采用它。但是为了实现高质量的重采样,重构/采样框架具有一定的适应性。
为了明白算法的细节,最简单办法是先考虑一维情况,并讨论对序列的重采样。
![fb51dffacdbdbddff7320dffcb3eb3fb.png](https://i-blog.csdnimg.cn/blog_migrate/fcb5297a1d7140f429035788b9edcc62.png)
参数x0表示根据旧序列样本得到的新序列第一个样本的位置。也就是说,如果第一个输出样本落在输入序列的样本3和样本4中间,那么x0就等于3.5。
该程序重构一幅连续的图像,通过将输入序列与一连续的滤波器进行卷积,然后进行点采样。但不是说着两种运算按先后顺序进行,连续函数只在原理上存在,而且只在采样点上计算函数值。但是从数学上,用该函数计算a*f的一系列样本点。
点采样似乎存在问题,因为我们刚说过一个信号应该用适当的平滑滤波器进行采样,以免出现走样。应该将重构函数与一个采样滤波器g求卷积,再进行点采样,即g*(f*a)。由于此式与(g*f)*a结果一样,因此可以将采样滤波器与重构滤波器合在一起。我们所需要的就是一次卷积运算。这种合成的重构和采样滤波器称为重采样滤波器。
选择滤波器本身是对速度和质量的折中。一般选用盒式滤波器(当速度很重要时,帐篷式滤波器(质量适中)或者分段三次滤波器(质量高)。在分段三次请看看下,平滑度可以通过在fB-fC 之间的插值来调整。
与图像滤波一样,可分滤波器能够加快速度。基本思想是,首先对所有的行重采样,产生宽度改变但高度不变的图像,然后对图像的列重采样,得到最后的结果。利用这种优化措施,可以直接修改前面给出的伪代码。
![14c90f2b9e737cb0c4c803c4d47120fa.png](https://i-blog.csdnimg.cn/blog_migrate/22204de86536dac9fa859227fae8e4b1.png)
五、采样理论
1、傅里叶变换
傅里叶变换和卷积是采样理论中主要的数学概念。可以在很多分析数学及信号处理的书中读到傅里叶变换的内容。
傅里叶变换的基本思想是,用所有频率的正弦波(正弦曲线)之和来表示任意函数。不同频率的正弦波具有不同的权值,然后求加权和,就可以得到我们想要的任何函数。
![994bd0e00d7ca5289360c72432306837.png](https://i-blog.csdnimg.cn/blog_migrate/ff9afbc989147692cf226c567c48346b.png)
这个傅里叶级数以频率为1.0的正弦波(sin2πx)开始,该频率与方波频率一样。其他各项是随频率逐渐变小的修正项,用以减小波动。无限个正弦波的加权和就重新生成了方波。注意和式中的每一项的频率都是方波频率的整数倍。这是因为其他频率项产生的结果,其周期与方波的周期不同。
![ae0cc73bf08acea22bbc69bb551f4ab0.png](https://i-blog.csdnimg.cn/blog_migrate/5ad707058f7ba27158bf4db85d2fd043.png)
令人惊奇的事实是,即使非周期性的信号也可以用正弦波之和这种方式表示,只不过这时需要更多的正弦波。下面讨论的不是正弦波离散序列之和,而是连续正弦曲线族的积分。
![bf94a05c7b42bbab8f648c582302a1ca.png](https://i-blog.csdnimg.cn/blog_migrate/ac3d13337f5a8200038eeb4ff275039d.png)
2.卷积与傅里叶变换
特别值得一提的是傅里叶变换的最后一个性质,即它与卷积的关系。用公式表示如下:
![179cefa8fe06a17c2d554c81968567ae.png](https://i-blog.csdnimg.cn/blog_migrate/6c1ba9022aa7660fcffba50677526f4d.png)
两函数卷积的傅里叶变换,等于它们的傅里叶变换的乘积。下面是我们熟悉对称公式:
![1bfed34178d0ecf17aab1c4e1ef206be.png](https://i-blog.csdnimg.cn/blog_migrate/aca0ed723a0f3f2154399ead1dbca980.png)
两函数的傅里叶变换的卷积,等于它们的乘积的傅里叶变换。这些结论都可以根据定义直接推出来。
![7fc36b9d30dc88e036ec8252fd6224b0.png](https://i-blog.csdnimg.cn/blog_migrate/e5f6a6f82cb0d97b2aaae5d8e10ecf53.png)
这种关系,是傅里叶变换在研究采样和重构中得到应用的主要原因。我们已经知道,空域中的采样、滤波和重构都是卷积运算。现在,傅里叶变换带来了频域,在频域上述运算都变成了积运算了。
3.傅里叶变换实例
已经知道盒式函数的傅里叶变换为
![0e764ad9feca2d8fd429673553fb9b3a.png](https://i-blog.csdnimg.cn/blog_migrate/bbbffd2546d5feb427dee22d4b8b936f.png)
函数¹sinx/x非常重要,它有自己的名字,即sincx。
![888baf7019021967b54427edbe858277.png](https://i-blog.csdnimg.cn/blog_migrate/f4125ad02e74517e49d76160641ebf79.png)
帐篷式函数是盒式函数与自身的卷积结果,因此它的傅里叶变换就等于盒式函数傅里叶变换的平方:
![3b6d9920f6306dcccdcf4c7b89d06d73.png](https://i-blog.csdnimg.cn/blog_migrate/e07304e21b14efa3eada6d18d3cd76eb.png)
继续下去,就可以得到B样条滤波器的傅里叶变换
![43bdd649994d216635d36d027f2c9803.png](https://i-blog.csdnimg.cn/blog_migrate/37a20ac0846e220378eac20327e9a8cd.png)
高斯滤波器的傅里叶变换非常特别:
![5ed11b1c5cea9527fdbacc6f4d4622f3.png](https://i-blog.csdnimg.cn/blog_migrate/0ca25b92330736b4465f58515b30c82b.png)
我们可以注意到,u = 0时sinπu/πu没有定义,但函数却是连续穿过0点,我们认为u=0时该函数取有限值1。
结果是另一个高斯函数!标准差为1.0的高斯函数,其傅里叶变换是标准差为1/2π的高斯函数。
4.采样理论中的狄拉克脉冲
脉冲在采样理论中是非常有用的,因为可以用来讨论在连续函数与傅里叶变换背景下的样本。样本具有位置和值,我们用某位置的脉冲及其数值来表示样本。一个位置在a,值为b的样本表示为bδ(x-a)。用这种方式可以表示在a处对函数f(x)的采样运算,结果为f(a)δ(x-a)。
因此,在一系列等间隔的点处,对函数进行采样,可以表示为等间隔的脉冲系列之和与该函数相乘,这些脉冲系统成为脉冲链。一个周期为T的脉冲链,意味着脉冲之间的间隔为T,即
![61fe1c37bb7990ee44f57fd6c5a202db.png](https://i-blog.csdnimg.cn/blog_migrate/27235808c7a25552d4d06322f843e519.png)
设s1是整数频率处的脉冲序列,则s1的傅里叶变换与s1 相同。当用正弦函数去乘脉冲链并且积分时,会验证上面的结果。所有整数频率的正弦函数值之和发散。对非整数频率,由于相互抵消总和变为0,而对于整数频率和趋向于+∞。
![9f3e60f8a3b513fc7781de6f482b8f2a.png](https://i-blog.csdnimg.cn/blog_migrate/0b8213286d6814f9cc8fd47d7f3c95bf.png)
由于傅里叶变换具有膨胀性质,可以推测周期为T的脉冲链(就像是s1经膨胀得到的),其傅里叶变换是周期为1/T的脉冲链。在空域中的采样越密,在频域中脉冲之间的间隔越远。
5.采样与走样
我们从频率的角度,建立了理解采样与重构过程的数学机制。引入傅里叶变换的重要优点是,变换后对信号的卷积滤波作用看得更加清楚,同时更加明确地解释了在采样与重构中为什么要进行滤波。
对原始连续信号进行采样。一般说来,原始信号的傅里叶变换可以包含任何频率成分,不过对于多数信号,特别是图像信号,我们总希望成分含量随频率的升高而下降。而且,图像信号中的零频率分量往往最大。要记住一点,零频率或者直流成分是对整幅图像的积分,由于图像取正值,所以直流分量的数字往往很大。
如果在采样与重构时不进来专门滤波,那么傅里叶变换将会是怎样的?对信号进行采样时,将采样看作与脉冲链的乘法运算。设样本信号为 fsT。根据乘法-卷积的性质,样本信号的傅里叶变换是
![ecef7a4a37fa2c154bb73a41365adeee.png](https://i-blog.csdnimg.cn/blog_migrate/fa3cd5d9e153d68ae3626d101af1a4f9.png)
![d1957bc10a329a8f2b9ea587fea1a4e6.png](https://i-blog.csdnimg.cn/blog_migrate/3a1d7e2fb28c901b29ffc50238e5f94e.jpeg)
前面我们学过δ是卷积的单位。这就意味着:
![22e39052c6e40bdfb1ed94a54adf8b17.png](https://i-blog.csdnimg.cn/blog_migrate/87f954fd6828577eb41bcdb78c5c0229.png)
也就是说,与脉冲链的卷积结果,得到的是一系列等间距的f频谱的复制品。对于这种奇特结果的直观解锁是,所有的复制品表明了这样的事实:它们的频率都是采样频率的整数倍,一旦完成了采样,这些信号之间就难以区分,它们将产生完全相同的样本集。原始频谱称为基频谱,而那些复制品称为走样谱。
如果信号频谱的复制品相互重叠就会产生麻烦。当信号的主要频率超过采样频率的一半时,就会发生这种重叠。当这种情况发生时,频谱相加,不同频谱的信息不可避免地混合在一起。这是走样可能发生的第一种形式。如果走样真的在这时发生,原因是由于采样不足,即对信号的采样频率太低。
如果采用最近邻技术重构信号,这等价于与宽度为1的盒式函数进行卷积。(用来实现这一任务的离散-连续卷积,与表示样本的脉冲序列连续卷积是相同的。)根据卷积-乘积性质,重构信号的频谱将等于采样信号频谱与盒式函数频谱的乘积,结果重构的傅里叶变换,包含基频谱(在高频出有些被削弱了)。加上被削弱的所有走样谱复制品。因为盒式函数具有相当宽的傅里叶变换,因此这些被削弱的走样谱变得很突出。由于重构滤波器不合适,带来了走样,这是走样产生的第二种形式。在图像上这些走样成分本身显示为方块图案,这是最近邻重构法的特点。
(1)避免采样走样
想进行高质量的采样与重构,需要适当地选择采样与重构滤波器。从频域的观点来看,采样时进行低通滤波是为了限制信号的频率范围,使得走样谱不会与基频谱重叠。
![1f4559dfbfda5c0da9e3b71d553d82e2.png](https://i-blog.csdnimg.cn/blog_migrate/49e79f5e2de3c7e6c06956d91f26220b.jpeg)
对特殊信号采样足够高的采样速度,就不必使用采样滤波器,但对于频率范围宽的信号(例如有如锐利边缘的图像),就必须使用采样滤波器,以便在采样之前对信号进行带宽限制。下图显示了频域中耽搁低通滤波器的效果。下图显示了采样时利用这些滤波器的效果。即使滤波器中没有频谱重叠,将信号与低通滤波器进行卷积,也可以缩小频、消除重叠,并且生成能充分表示滤波后信号的样本集。当然,我们丢失了高频率成分,但是这个效果比信号混杂、产生走样的结果要好。
![65e2e4b616a487911e7ae5cb24fbabf5.png](https://i-blog.csdnimg.cn/blog_migrate/3a8f8429bf531def1bffec7e5d92dcad.png)
![0b55ce3410364ef5061c8c70e3146e1c.png](https://i-blog.csdnimg.cn/blog_migrate/cd09bd9f9019177860a4f8cbec6a0be4.jpeg)
(2)避免重构走样
从频域的观点看,重构滤波器的工作就是去除走样谱同时保留基频谱。在下图中,可以看到最简单的重构滤波器,即盒式滤波器,确实削弱了走样谱。最重要的是,滤波器完全阻止了所有走样谱的直流尖峰信号。这是所有合理的重构滤波器的特征:在频域空间,在采样频率的倍频处都有零值。实践证明这一特点与空域中的无波动性质是等价的。
因此,好的重构滤波器要成为好的低通滤波器,还要能够完全阻止所有采样频率倍频出的频谱。使用重构滤波器的目的不同股使用盒式滤波器,前者是为了更加彻底地消除走样谱,减少泄漏到重构信号中的高频干扰,同时尽可能不影响基频谱,下图显示了在重构过程中那个不同滤波器的结果。正如我们所看到的,盒式滤波器是非常“漏”的,会产生很多走样,即使采样速度很高也如此。帐篷式滤波器,结果是线性插值,更加削弱了高频干扰,产生较少的走样。而B样条滤波器非常平滑,能非常有效地控制走样谱。它同样还能对基频谱进行一些平滑。这就是我们前面提到的平滑与走样之间的折中。
(3)避免重采样走样
在重采样中,将重构与采样结合在一起运算时,采用的原理与前面的相同,只是用一个滤波器完成重构和采样两项工作。下图显示了重采样滤波器如何去除走样谱,并使频谱变得足够窄,以便能以新的采样速度采样。
![63ad280dcb4b283204f662cff0b26397.png](https://i-blog.csdnimg.cn/blog_migrate/9931a819807a65fa1f88aea051c1b756.jpeg)
6.理想滤波器与实用滤波器
根据频域分析,从逻辑上得出如下结论:频域中的盒式滤波器是采样和重构的理想滤波器。在这两种运算中该滤波器都能避免走样,而不减少尼奎特频率之下的频率范围。
我们已经知道,傅里叶逆变换与傅里叶变换在本质上是相同的,因此傅里叶变换为盒式滤波器的空域滤波器,就是函数sinπx/πx = sincπx。
然后,实际在采样或者重构中很少用到sinc滤波器,因为它不实用。虽然它的频域指标最优,但是在很多应用中并不能产生最佳结果。
就采样来说,sinc滤波器无限延伸,而且远离中心时函数值下降速度相对较慢,这是它的一个缺点。另外,对于某些类型的采样,sinc滤波器的负向突起也是个问题。高斯滤波器是非常好的采样滤波器,即使是在输入信号中取出高频图案的困难任务,它也能得出很好的结果,这是因为它的傅里叶变换以指数速度衰减,而没有能让走样泄漏的突起。对一些不太困难的情况,帐篷式滤波器就足够了。
就重构来说,sinc函数的大小也会产生问题。更重要的是,多波动在重构信号中引起“突起”干扰。