邊緣偵測
邊緣是影像中亮度急遽變化的位置,這些位置通常標示著世界中某種有意義的事物:物件與背景的交界、材質或紋理的改變、投射的陰影,或表面的褶皺。如果你用鉛筆描出咖啡杯的輪廓,你直覺上就在做邊緣偵測,找出杯子深色表面與較亮桌面相接的曲線。自動邊緣偵測的目標是把灰階影像轉換成這些強度不連續處的稀疏地圖,這能大幅壓縮影像,同時保留其大部分在知覺上重要的結構。
處理「急遽變化」的數學工具是導數。把影像視為一個以兩個座標為輸入、回傳亮度的函數,梯度(gradient)就是它在水平與垂直方向偏導數所組成的向量;白話說,它指向亮度增加最快的方向,而其長度(梯度大小)衡量這個增加有多陡。邊緣就是梯度大小很大的地方。實務上,導數以小型卷積遮罩來估計,例如 Sobel 或 Prewitt 運算子(它們在一個方向做差分、在另一方向做些微平滑),梯度大小超過某門檻的像素就被判定為邊緣。垂直於邊緣的梯度方向,則告訴你邊緣的局部走向。
還有第二類互補的方法,奠基於二階導數。在一階導數出現峰值的地方,二階導數會穿越零,因此邊緣可被找成拉普拉斯運算子(Laplacian,即各二階偏導數之和)的零交越(zero-crossing)。由於微分會放大雜訊,影像會先以高斯函數平滑;合併後的運算子即高斯拉普拉斯(Laplacian of Gaussian, LoG),而經典的 Marr-Hildreth 方法就是以其零交越來找邊緣。零交越法能給出閉合且細的輪廓,但可能在平滑區域幻想出邊緣,因此其反應通常還要對照一個最小梯度強度來檢驗。
每個邊緣偵測器都活在一個由平滑尺度所支配的取捨之中。平滑太少,雜訊會產生假邊緣;平滑太多,真實但微弱的邊緣會消失、角點會被磨圓。這就是為什麼尺度很重要,也是多尺度邊緣偵測存在的原因。數十年來實務上的黃金標準一直是 Canny 偵測器,它謹慎地編排平滑、梯度計算、細化與門檻處理。現代資料驅動的偵測器,如整體巢狀邊緣偵測(Holistically-Nested Edge Detection, HED)及其後繼者,以卷積網路學習預測邊緣,與人工描繪的物件邊界吻合得好得多,代價是需要訓練資料且產生較粗、帶機率的邊緣圖。
影像處理意義下的「邊緣」是一維的亮度斜坡;它不等同於語意上的物件邊界。濃重的陰影或有紋理的壁紙會產生強梯度卻沒有物件邊界,而兩個亮度相近物件之間的真實邊界可能幾乎沒有任何梯度。要彌合這個落差,正是學習式、能感知邊界的偵測器被開發出來的原因。