特徵與描述子

Canny 邊緣偵測器

Canny 邊緣偵測器由 John Canny 於 1986 年提出,是最廣為使用的傳統邊緣偵測器,因為它能把原始梯度雜亂的輸出,轉化為乾淨、細緻、相連的邊緣輪廓。Canny 不只是提出一個演算法;他把邊緣偵測定義為一個帶有三個明確目標的最佳化問題:良好的偵測(找到真實邊緣、少漏掉、少誤報)、良好的定位(把邊緣標在盡可能接近真實位置處),以及單一反應(不要把一條邊緣回報好幾次)。我們熟悉的流程,就是大致滿足這些準則的實用配方。

流程有四個階段。第一,以高斯濾波器平滑影像,抑制本來會製造假邊緣的雜訊;高斯的標準差設定了你關注的邊緣尺度。第二,在每個像素計算梯度大小與方向,通常用 Sobel 遮罩。第三,施行非極大值抑制(non-maximum suppression):在每個候選像素沿著梯度方向(垂直於邊緣)行走,只有當其梯度大小相對於該方向上的兩個鄰居是局部極大值時才保留它。這會把高梯度的肥厚脊線細化成單一像素寬的線條,達成單一反應的目標。

第四個階段是遲滯門檻處理(hysteresis thresholding),這個巧妙的構想使 Canny 變得穩健。不用單一門檻,而用高、低兩個門檻。任何高於高門檻的像素立即被接受為強邊緣。任何低於低門檻的像素被剔除。介於兩者之間的像素,只有在透過一連串其他中間像素與某條強邊緣相連時才被接受。其直覺是:一條真實邊緣通常在其某段長度上是強的,我們應該順著它延伸進較弱的段落,而不是把它切成碎片。用兩個門檻搭配連通性,既避免了單一過高門檻造成的斷裂邊緣,也避免了過低門檻帶來的雜訊雜亂。

Canny 至今仍是 OpenCV、機器人學與文件分析的常備工具,因為它快速、確定性,且僅靠兩個門檻與一個平滑尺度就容易調參。它的限制直接源自其假設:它偵測的是強度邊緣而非語意邊界,因此會對陰影與紋理反應;單一高斯尺度無法同時捕捉銳利與漸變的邊緣;而兩個門檻通常需要依影像領域逐一調整。當邊界語意重要時,學習式偵測器(HED 及後繼者)較受青睞,但當你只是需要可靠、達幾何精度的強度邊緣時,Canny 仍是預設選擇。

典型的 OpenCV 呼叫:cv2.Canny(img, low=50, high=150)。高低門檻比常設在 2:1 到 3:1 之間;兩個門檻都調高只會保留最強的邊緣,都調低則會顯露微弱細節與雜訊。

又称
Canny algorithm