Carved Marker

Antialiasing 的理論 [Part 3]

在前面已經說明了為什麼在對一個訊號進行取樣之前,要先把高頻成份去除。在去除高頻成份後,取樣時就不會發生失真的現象了。不過,在取樣後的數位訊號,只是一堆數字,所以還需要一個重建的動作,才能變回原來的類比訊號。

理論上,重建原來的類比訊號的動作並不太困難。因為,對取樣後的訊號進行 Fourier transform 後,會得到一堆重覆的東西。如下圖所示:

Frequency after low pass filter frequency of sampled signal
經過 low pass filter 的訊號取樣後的訊號

所以,只要把取樣後的訊號,在 frequency domain 中,再經過一個 low pass filter(和取樣之前用的那個一樣),再進行一次 inverse Fourier transform,就可以得到原來的(經過 low pass filter 的)訊號了。

但是,Fourier transform 和 inverse Fourier transform 都是很花時間的工作。也就是說,在實際上是不可能真的用 Fourier transform 的。不過,low pass filter 其實是在 frequency domain 做乘法的運算,而它可以轉換成在 spatial domain(或 time domain)的 convolution 運算。

一般用到的 low pass filter,其實就是把一段範圍內的訊號保留,而範圍外的訊號則變成零。所以,可以把它想成是乘上一個特別的訊號,這個訊號在指定的範圍內是 1,其它的地方則是 0。因此,把任何一個訊號乘上這個訊號,就會保留指定的範圍的訊號,而把其它地方變成 零了。所以,只要把這個訊號轉換到 spatial domain 中,就可以很容易用 convolution 的方式來進行運算。

不幸的是,這樣的訊號轉換到 spatial domain 後,會變成一個稱為 sinc filter 的東西。Sinc filter 是一個延伸範圍達到無限遠的 filter。當然,隨著距離變遠,它也會衰減,但是這會使它的 filter 範圍變得很大。下圖是一個理想的 low pass filter 在 frequency domain 和 spatial domain 的長像:

Box filter Sinc filter
Frequency domainSpatial domain

使用 sinc filter 來做 convolution 不但很花時間,它還有負值的部份,也會造成一些麻煩。所以,一個比較常用的 low pass filter 是 box filter。利用 box filter 來做 convolution,就等於是把一個 pixel 範圍內所有的值全部加起來,做為一個 pixel 的值。如下所示:

Unit box filter Frequency response
Unit box filterFrequency response

從 box filter 的 frequency response 可以看到 box filter 的缺點:box filter 把一些低頻成份衰減了,但是又留下了一些高頻成份。而且,box filter 會留下一大堆更高頻的地方(像是 2 ~ 3 之間的地方)。因此,box filter 會造成一些模糊的現象,但是還是可能會產生不少失真的情形。不過,因為 box filter 非常簡單,計算上也比較容易,所以仍是最常用的 low pass filter。

另外一個常用的 low pass filter 是 Gaussian filter。Gaussian filter 的一個非常重要的特性,是它在 frequency domain 的形狀會和原來一樣,也是一個 Gaussian。不過,它的寬度會有一些改變。以下是一個 Gaussian filter 和其在 frequency domain 的形狀:

Unit Gaussian filter Frequency response
Unit Gaussian filterFrequency response

和理想的 low pass filter 相比,Gaussian filter 還是留下了一些高頻部份(因為在 -0.5 ~ 0.5 以外的範圍還是有非 0 的值),而且在低頻部份的衰減也比 box filter 更為嚴重。但是,它沒有負值的情形,而且在 -1 ~ +1 範圍之外幾乎沒有留下任何東西。所以,它在消除高頻失真上面,會比 box filter 要好很多。但是,它的結果看起來會比 box filter 更為模糊一些。而且,和 box filter 相比,它比較寬。Box filter 對每個 pixel 只需要處理一個 pixel 寬度的資料,但是 Gaussian filter 則需要處理約三個 pixel 寬度的資料。所以,整體來說,Gaussian filter 所需的運算量,比 box filter 要高出很多。另外,因為 Gaussian filter 在每個取樣點需要不同的權重(box filter 則是每個取樣點都使用同樣的權重),所以,Gaussian filter 幾乎無法適用在隨機取樣的情形,因為如果取樣點的位置會不停變化,就需要每次重新計算其權重。這對於需要即時運算的應用,其計算太過複雜,幾乎是不可能的。

[Part 1] [Page 2] [Page 3] [Page 4]

12/28/2001, Ping-Che Chen


Sorry, Traditional Chinese only. This page is encoded in UTF-8.

Copyright© 2000, 2001 Ping-Che Chen