從波的角度理解影象處理的本質
影象其實是一種波,可以用波的演算法處理影象。
一、為什麼影象是波?
我們知道,影象由畫素組成。下圖是一張 400 x 400 的圖片,一共包含了 16 萬個畫素點。
每個畫素的顏色,可以用紅、綠、藍、透明度四個值描述,大小範圍都是0 ~ 255
,比如黑色是[0, 0, 0, 255]
,白色是[255, 255, 255, 255]
。通過 Canvas API 就可以拿到這些值。
如果把每一行所有畫素(上例是400個)的紅、綠、藍的值,依次畫成三條曲線,就得到了下面的圖形。
可以看到,每條曲線都在不停的上下波動。有些區域的波動比較小,有些區域突然出現了大幅波動(比如 54 和 324 這兩點)。
對比一下影象就能發現,曲線波動較大的地方,也是影象出現突變的地方。
這說明波動與影象是緊密關聯的。影象本質上就是各種色彩波的疊加。
二、頻率
綜上所述,影象就是色彩的波動:波動大,就是色彩急劇變化;波動小,就是色彩平滑過渡。因此,波的各種指標可以用來描述影象。
頻率(frequency)是波動快慢的指標,單位時間內波動次數越多,頻率越高,反之越低。
上圖是函式sin(Θ)
的圖形,在2π
的週期內完成了一次波動,頻率就是1。
上圖是函式sin(2Θ)
的圖形,在2π
的週期內完成了兩次波動,頻率就是2。
所以,色彩劇烈變化的地方,就是影象的高頻區域;色彩穩定平滑的地方,就是低頻區域。
三、濾波器
物理學對波的研究已經非常深入,提出了很多處理波的方法,其中就有濾波器(filter):過濾掉某些波,保留另一些波。
下面是兩種常見的濾波器 。
下面是低通濾波的例子。
上圖中,藍線是原始的波形,綠線是低通濾波lowpass
後的波形。可以看到,綠線的波動比藍線小很多,非常平滑。
下面是高通濾波的例子。
上圖中,黃線是原始的波形,藍線是高通濾波highpass
後的波形。可以看到,黃線的三個波峰和兩個波谷(低頻波動),在藍線上都消失了,而黃線上那些密集的小幅波動(高頻波動),則是全部被藍線保留。
再看一個例子。
上圖有三根曲線,黃線是高頻波動,紅線是低頻波動。它們可以合成為一根曲線,就是綠線。
上圖中,綠線進行低通濾波和高通濾波後,得到兩根黑色的曲線,它們的波形跟原始的黃線和紅線是完全一致的。
四、影象的濾波
瀏覽器實際上包含了濾波器的實現,因為 裡面定義了聲波的濾波。這意味著可以通過瀏覽器,將lowpass
和highpass
運用於影象。
lowpass
使得影象的高頻區域變成低頻,即色彩變化劇烈的區域變得平滑,也就是出現模糊效果。
上圖中,紅線是原始的色彩曲線,藍線是低通濾波後的曲線。
highpass
正好相反,過濾了低頻,只保留那些變化最快速最劇烈的區域,也就是影象裡面的物體邊緣,所以常用於邊緣識別。
上圖中,紅線是原始的色彩曲線,藍線是高通濾波後的曲線。
下面這個網址,可以將濾波器拖到影象上,產生過濾後的效果。
瀏覽器實現濾波的範例程式碼,可以看這個倉庫。