本章節建議參考另一位前輩寫的筆記,自己整理的較為混亂。
因為計算機按照01 bit儲存的特征,其值是離散的。在人眼看顯示器的過程中,是将離散值轉換成連續值腦補的過程,類似于動畫幀數足夠,哪怕有間隔看起來也是連續的。與其相反在計算機讀入或者儲存的時候,需要将連續值轉換為離散值。一個常用的方法是采樣(sampling)再重建(Reconstruction),可以參考知乎的這個連結。下圖是一個典型的錄音機模型,将連續的聲波轉換成錄音帶内的電壓值,再可以通過播放器轉換回來。
需要注意sample rate,即選取sample點的間隔是多少,會對結果産生較大影響。例如下圖是兩個一模一樣的連續函數,high rate的上圖很好的模拟了原函數,但low rate的下圖則完全錯誤了。實際操作時因為sample rate是固定的,我們需要移除過高頻率的連續函數,否則較低的sample rate對這些過高頻率函數的采樣一定會有錯誤的結果。在重建的過程中,我們需要使用filter将離散的階梯狀的線變為連續平滑的曲線。在重建的時候,可能存在采樣點重建時有兩種可能的情況,而我們選擇了錯誤的那一條并産生了奇怪的效果,這樣就稱為走樣(aliasing)或者混疊。為了提高采樣與重建的穩定性,顯然我們需要選擇正确的采樣速度,采樣與重建的過濾器以及重建曲線的平滑度。1. 卷積Convolution
一個中文的介紹連結見此知乎回答。卷積會利用兩個函數生成一個新的函數,連續或者離散以及domain的次元都可以是多變的,記住裡面包含了翻轉和滑動兩個意思。即\((a\star f)(x)=\sum_i a[i]f[x-i]\)中\(-i\)代表了翻折,\(x\)代表了對齊的滑動。反轉的原因是因為過濾器\(f(x)\)代表了一個信号在相對位置x下依然能産生的影響,故\(x-i\)說明的是以\(i\)為坐标系原點,\(x\)在哪裡的相對位置,是以\(f[x-i]\)形容的是信号\(a[i]\)能傳遞到\(x\)節點的比重。
1.1 簡單離散卷積
下圖是一個簡單的離散卷積,其中a代表了值,b代表了權重,卷積結果為權重和。注意b序列中6為原點對應的中心值,然後往外的權重依次減少,同時擁有整體權重和為1的特征(一共十六份,每份1/16)。在實際操作的時候我們通常将b的相對可用範圍設定為\([-i,i]\)而不是\((-\infty,\infty)\)。
1.2 過濾器
對于卷積過濾器而言,上文的\(b\)可作為一個簡單的box filter,即使用在\([-r,r]\)之間平分1的方法,每份占據\(\frac{1}{2r+1}\)。如下圖所示,一個01的階梯方程經過卷積後成為了一個較為平滑,類似sigmoid函數的樣子。
需要注意的是,雖然我們将ab分為了值和權重,但實際上兩者是互相影響對稱的,在這種思考環境下過濾器也不一定序列和必須為1。卷積操作滿足commutative,associative和distributive的特征。如同矩陣乘法一樣,我們可以認為\(0,0,0,1,0,0,0\)這樣的序列,即僅在原點為1的過濾器為機關1,也被稱為discrete impulse。是以,如下的正常algebra操作也是可行的。
1.3 簡單連續卷積
對于連續函數而言是類似的,我們将過濾器\(g(x)\)中的原點\(g(0)\)移動至與f(t)對齊,故使用\(g(x-t)\)向右移動t各機關。
與discrete impulse類似,continuous function版本的機關1被稱為Dirac Impulse或者Dirac delta function,寫作\(\delta(x)\),他擁有除了\(f(0)\)較大以外任何\(f(x)=0\)的性質,如下所示。
1.4 連續與離散空間的轉換
連續到離散空間的采樣較為簡單,可以直接按照采樣頻率選擇離散點即可。重建的過程我們會使用一個連續的filter \(f(x)\)讓以下卷積發生。這裡要注意雖然a是離散的,但是f是連續的便可以給最後的卷積帶來一些連續的變化。卷積的思想可以被輕松拓展到更高次元,這裡不做闡述。
2. 卷積過濾器
需要注意過濾器\(f(i)\)代表的是信号在\(i\)輪以後的影響力,拓展多元也是類似的,即基于相對量的影響因子。這一節主要對不同的常用過濾器進行介紹,預設情況下每個過濾器有自己的半徑,例如box filter的半徑是1/2, cubic filter的半徑是2等。同時過濾器的積分應該為1來保持信号的平均值不變。當我們需要改變半徑的時候,我們寫作\(f_s(x)=\frac{f(x/s)}{s}\),即将寬度拉長s倍,長度降低s倍。分類如下
- Box Filter,平均分布的過濾器,需要注意連續函數需要一邊封閉一邊開口。
- Tent Filter,三角形分布的過濾器,半徑為1,主要與\(1-|x|\)相關。
- Gaussian Filter,正态分布的過濾器,更為平滑。因為正态分布沒有邊界,我們通常基于需求取一個半徑來剪裁正态分布。當進行拉伸操作的時候,我們可以直接選擇将standard deviation和選擇的半徑同時增加s倍即可,因為這樣隻是橫向拉伸但是總體的面積依然為1。本書推薦了一個\(\sigma=1,r=3\)的初始值。
- B-Spline Cubic Filter, 是由分段三階多項式構成的一個特殊函數,擁有連續的一階微分和二階微分,通常的半徑為2,值得注意的是它可以寫作四個box filter的卷積形式。
- Catmull-Rom Cubic Filter,是上個的修改版,其頂端至1,但是存在一些負數部分在[1,2]之間。
- Mitchell-Netravali Cubic Filter, 結合了上兩個filter,分别的權重為1/3和2/3。
另外我們有一些術語,例如Impulse指的是之前的機關1,Impulse Response說的是函數(在機關1的impulse下産生的效果),插值過濾器指重建的函數經過原函數的采樣點并連接配接他們(例如Catmull-Rom filter,\(f(0)=1,f(i)=0\))。
帶有負值的過濾器會造成被稱為ringing或者overshoot的效果,讓原函數值變動較大點在重建函數處有更大的波動性(該點會在前後被用于負值過濾器的部分),如下圖所示。
過濾器如果将定值序列重建成定值方程,我們稱這個過濾器是ripple free的,這個條件與之前提到的過濾器整數位求和為1是一緻的(因為我們使用的是sequence是以不能使用積分的思想,得看成discrete point)。例如下圖有四個采樣點,半徑為1的tent filter是ripple free的但标準差為0.5的正态分布filter則不是的。更為直接的了解方式是如果把一個直線或者穩定的信号采樣再重建結果應該也是一個穩定的直線信号。按照求平均值的邏輯可直接得到公式。
我們至此介紹的所有過濾器中除了正态分布以外在标準半徑下都是ripple free的,但是拉伸後則需要額外判斷。當然我們永遠可以選擇修正濾波器(P205,看不懂怎麼操作的)。另外對于連續的過濾器而言還有degree of continuity的概念,即最高幾階微分在所有地方都是成立的。
對于高維的過濾器而言,有稱作separable filter的方法,即将多元設定成1D的連乘形式。例如以下是二維的tent filter與正态分布filter的函數。
這麼做的好處是因為雙重求和的時候兩個次元的值可以如下加以化簡,并儲存\(S[i]\)的值,在重複利用時直接使用,可大大減少計算量。
3. 圖像的信号處理
3.1 常用的過濾器視覺效果
我們可以通過重建過濾器的方法來實作模糊的效果,具體如下
與其相反,我們可以增加一部分強度再減去卷積來達到強化邊緣的效果,具體如下
對于平移操作我們可以形成一個過濾器\(d_{m,n}\)讓原圖信号位移到相對距離\((m,n)\)處,見下。這麼一來去掉RGB可以形成一個平移後的陰影。
3.2 處理走樣aliasing
如下圖所示,采樣表示的像素圖在人眼還原時會有奇怪的現象發生,例如左側紗簾上的moire pattern以及右側直線的抖動與顔色不均。從根本上,走樣和清晰度之間存在一個trade off的關系,如果用更平滑的filter則會增加模糊度但是走樣的情況會更低。
3.3 重新采樣Resample
當改變采樣速率以及更改圖檔大小的時候我們需要重新采樣,例如将大螢幕改到小螢幕的過程中我們可以丢掉一部分的像素,也可以利用重新采樣的方法來實作,即基于原尺寸重建再采樣,一維版本如下由下圖可見。要注意的是使用的filter是斜着的兩次filter的和。
在改變圖檔大小時,我們可以選擇去掉邊緣,加上一個邊緣或調整過濾器。一般使用第二種快捷有效的方法或者第三種表現最好的方法。當低維往高維變換時重建過濾器更為重要,高維往低維變換的時候采樣過濾器更為重要。實際操作的時候,一般box filter, tent filter和三階B-spine用的比較多。可分過濾器依然能很大程度上為我們減少計算時間,可以一個次元一個次元的逐漸變化而不影響結果。
3. 采樣理論
采樣理論主要運用到了卷積和傅立葉變換。
3.1 傅立葉變換
傅立葉早期提出了任何連續周期信号都可以由一組适當的正弦曲線組合而成,傅立葉級數使用不同頻率的sin函數權重疊加來模拟任何一個函數。後來推導出來的傅立葉變換則去掉了周期信号的條件,對于非周期信号也可以進行模拟(認為其周期無窮大)。其中傅立葉變換将函數轉換為基的系數,逆傅立葉變換則将基的系數還原為函數。一個基礎的科普可以參考此知乎連結,另外這個B站連結包含了以重心來思考的方法。傅立葉變換的過程類似于下圖,是一個時域往頻域轉換的過程。
裡面需要注意的有彼此正交的\(\{1,sin(x),cos(x),\cdots, sin(nx),cos(nx)\}\),正交函數的定義(相乘積分為0),歐拉定理(\(e^{ni}\)代表機關圓沿着逆時針走距離n)。傅立葉變換因為是按照順時針運動是以多了一個負号,而積分内的\(f(x)\)可以了解為在機關圓上行走時振幅的改變量,積分并除以長度就能得到重心,傅立葉變換得到的\(\hat{f}(x)\)則沒有除去長度,而是指向了重心方向的一個點。
傅立葉變換還有以下的一些性質
- \(\int (f(x))^2 dx = \int(\hat{f}(u))^2du\),這代表了時空域能量是一樣的。
- \(\mathcal{F}{af}=a\mathcal{F}{f}\)
- \(\mathcal{F}{f(x/b)}\) = b\hat{f}(bx)$,代表時空域的拉伸效果也是一樣的
- f的均值等于\(\hat{f}(0)\)
- 如果f是實函數,那麼\(\hat{f}\)是一個偶函數(沿着y軸對稱)。
3.2 傅立葉變換與卷積的聯系
3.3 過濾器的傅立葉變換
- Box, \(\methcal{F}{f_{box}}=\frac{sin(\pi u)}{\pi u}=sinc(\pi u)\)
- Tent, 兩個box疊加是以是\(sinc^2(\pi u)\)
- B-splin,四個box疊加是以是\(sinc^4(\pi u)\)
-
正态分布為\(e^{-(2\piu)^2/2}\),需注意這裡又變成了一個正态分布,隻是标準差變成了\(1/2\pi\)。
具體情況可以見下圖