影像特徵擷取是電腦視覺核心任務。本系列著重於「角點」特徵提取,並介紹與角點偵測緊密相關的前置變換:Sobel、Laplace、Canny 算子與霍夫變換。OpenCV/EmguCV 實作了 Harris、Shi-Tomasi、亞像素級、SURF、Star、FAST、Lepetit 等多種角點偵測,另補充 OpenCV 未實作的 SIFT 及新加入的 MSER 區域偵測。
利用多項式擬合導數,Image<TColor,TDepth>.Sobel(xOrder, yOrder, apertureSize)。注意:xOrder 與 yOrder 必須且只能有一個非零;apertureSize = -1 (CV_SCHARR) 時改用 Scharr 濾波器。
Image<Gray, Single> dest = imageSourceGrayscale.Sobel(xOrder, yOrder, apertureSize);
可作邊緣偵測,.Laplace(apertureSize)。註:OpenCV 文件錯誤標示 apertureSize 可為 CV_SCHARR,實際不可。
經典邊緣偵測,EmguCV 提供兩種呼叫:
Image<TColor,TDepth>.Canny(lowThresh, highThresh):支援彩色影像,核大小固定 3CvInvoke.cvCanny:僅灰階,可自訂 apertureSize(3/5/7)參數對照:thresh ↔ lowThresh、threshLinking ↔ highThresh。另附自適應閾值計算演算法(基於 Sobel 梯度幅值直方圖,保留前 70% 像素作為非邊緣)。
霍夫線變換:需先跑 Canny,再呼叫 cvHoughLines2,三種模式(標準、機率、多尺度),結果解析方式不同。霍夫圓變換:HoughCircles,參數含累加器解析度、最小圓距、Canny 高閾值、累加器閾值、半徑範圍。作者註記圓偵測結果似乎不準確。
cvCornerHarris 輸出為浮點單通道影像,若需角點清單需改用 cvGoodFeaturesToTrack。
GoodFeaturesToTrack 預設計算 Shi-Tomasi,設 use_harris ≠ 0 則改算 Harris。參數:最大角點數、品質層級、最小距離、鄰域大小、k 值。
FindCornerSubPix 需初始角點位置(建議用 GoodFeaturesToTrack 取得)。參數:搜尋視窗、死區、終止條件(最大迭代、epsilon)。
ExtractSURF / DetectKeyPoints,參數:Hessian 閾值、octaves 數、每 octave 層數、是否取得擴充描述子(128 維)或基本描述子(64 維)。
GetStarKeypoints,參數:MaxSize、ResponseThreshold、LineThresholdProjected/Binarized、SuppressNonmaxSize。
完整原始碼下載:特徵偵測範例專案