首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

影像特徵偵測實戰(一):邊緣算子、霍夫變換與多種角點偵測

     編輯:關於.NET

前言

影像特徵擷取是電腦視覺核心任務。本系列著重於「角點」特徵提取,並介紹與角點偵測緊密相關的前置變換:Sobel、Laplace、Canny 算子與霍夫變換。OpenCV/EmguCV 實作了 Harris、Shi-Tomasi、亞像素級、SURF、Star、FAST、Lepetit 等多種角點偵測,另補充 OpenCV 未實作的 SIFT 及新加入的 MSER 區域偵測。

Sobel 算子

利用多項式擬合導數,Image<TColor,TDepth>.Sobel(xOrder, yOrder, apertureSize)。注意:xOrder 與 yOrder 必須且只能有一個非零;apertureSize = -1 (CV_SCHARR) 時改用 Scharr 濾波器。

Image<Gray, Single> dest = imageSourceGrayscale.Sobel(xOrder, yOrder, apertureSize);

Laplace 算子

可作邊緣偵測,.Laplace(apertureSize)。註:OpenCV 文件錯誤標示 apertureSize 可為 CV_SCHARR,實際不可。

Canny 算子

經典邊緣偵測,EmguCV 提供兩種呼叫:

  • Image<TColor,TDepth>.Canny(lowThresh, highThresh):支援彩色影像,核大小固定 3
  • CvInvoke.cvCanny:僅灰階,可自訂 apertureSize(3/5/7)

參數對照:thresh ↔ lowThresh、threshLinking ↔ highThresh。另附自適應閾值計算演算法(基於 Sobel 梯度幅值直方圖,保留前 70% 像素作為非邊緣)。

霍夫變換

霍夫線變換:需先跑 Canny,再呼叫 cvHoughLines2,三種模式(標準、機率、多尺度),結果解析方式不同。霍夫圓變換:HoughCircles,參數含累加器解析度、最小圓距、Canny 高閾值、累加器閾值、半徑範圍。作者註記圓偵測結果似乎不準確。

Harris 角點

cvCornerHarris 輸出為浮點單通道影像,若需角點清單需改用 cvGoodFeaturesToTrack。

Shi-Tomasi 角點

GoodFeaturesToTrack 預設計算 Shi-Tomasi,設 use_harris ≠ 0 則改算 Harris。參數:最大角點數、品質層級、最小距離、鄰域大小、k 值。

亞像素級角點

FindCornerSubPix 需初始角點位置(建議用 GoodFeaturesToTrack 取得)。參數:搜尋視窗、死區、終止條件(最大迭代、epsilon)。

SURF 角點

ExtractSURF / DetectKeyPoints,參數:Hessian 閾值、octaves 數、每 octave 層數、是否取得擴充描述子(128 維)或基本描述子(64 維)。

Star 關鍵點

GetStarKeypoints,參數:MaxSize、ResponseThreshold、LineThresholdProjected/Binarized、SuppressNonmaxSize。

完整原始碼下載:特徵偵測範例專案

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved