計算機視覺 OpenCV Android | 基本特徵檢測之 霍夫圓檢
霍夫圓變換
與霍夫直線變換
的原理類似
,也是將圓上的每個點轉換到霍夫空間
,-
其轉換的引數方程如下:
對於圓來說,
θ
的取值範圍在0~360°
,這樣就有了三個引數
,另外兩個引數
是圓心(x0,y0)
與半徑γ
。這裡的
霍夫空間
便是一個三維空間
,
所以如果還是跟之前的累積計算一樣,計算量
就會大大增加
,
這樣顯然不利於快速計算與檢測
,所以在OpenCV中,
霍夫圓檢測
不是基於二值影像
或者邊緣檢測的結果
,
而是基於灰度影像的梯度
來找到候選區域
,
然後基於候選區域
實現霍夫圓檢測
,
這樣就會大大減少計算量
,提高程式的執行速度與效能
,
但是基於梯度實現霍夫圓檢測也帶來了另外一個問題
,那就是結果特別容易受到噪聲
影響,
對影像中的噪聲
特別敏感
,
所以在OpenCV中使用相關API實現霍夫圓檢測的時候
,
首先需要透過模糊操作
對影像進行噪聲抑制處理
。
一般來說,常見的均值、高斯、中值模糊
對影像噪聲的抑制
已經比較有效
,
但是在霍夫圓檢測
中有時候還會用到邊緣保留濾波
來抑制平坦區域噪聲
,
以便在進行梯度計算
的時候能夠更好地得到候選區域
。
霍夫圓檢測的API:
HoughCircles(Mat image, Mat circles, int method, double dp, double minDist, double param1, double param2, int minRadius, int maxRadius)
image
:8位單通道的灰度影像。circles
:輸出的三個向量的陣列,圓心與半徑(x,y,r)。method
:唯一支援的方法就是基於梯度霍夫變換——HOUGH_GRADIENT。dp
:影像解析度,注意dp越大,影像就會相應減小解析度;當dp等於1時,其跟原圖的大小一致;當dp=2時,其為原圖的一半。minDis
t:表示區分兩個圓的圓心之間最小的距離,如果兩個圓之間的距離小於給定的minDist,則認為是同一個圓,這個引數對霍夫圓檢測來說非常有用,可以幫助降低噪聲影響。param1
:邊緣檢測Canny演算法中使用的高閾值。param2
:累加器閾值,值越大,說明越有可能是圓。minRadius
:檢測的最小圓半徑,單位為畫素。maxRadius
:檢測的最大圓半徑,單位為畫素。
使用API實現灰度影像圓檢測:
private void houghCircleDemo(Mat src, Mat dst) { Mat gray = new Mat(); Imgproc.pyrMeanShiftFiltering(src, gray, 15, 80); Imgproc.cvtColor(gray, gray, Imgproc.COLOR_BGR2GRAY); Imgproc.GaussianBlur(gray, gray, new Size(3, 3), 0); // detect circles Mat circles = new Mat(); dst.create(src.size(), src.type()); Imgproc.HoughCircles(gray, circles, Imgproc.HOUGH_GRADIENT, 1, 20, 100, 30, 10, 200); for(int i=0; i<circles.cols(); i++) { float[] info = new float[3]; circles.get(0, i, info); Imgproc.circle(dst, new Point((int)info[0], (int)info[1]), (int)info[2], new Scalar(0, 255, 0), 2, 8, 0); } circles.release(); gray.release(); }
執行結果如下圖,左側為原圖,右側是霍夫圓檢測執行結果:
霍夫圓檢測
相比霍夫直線檢測
,計算量大,輸出引數多,
因此一般都透過指定半徑範圍
,指定邊緣閾值
與累積器閾值
來減少計算量
,
否則速度就會很慢
,這個也是在使用的時候需要特別注意
的。
上述三個指定引數如何影響霍夫圓檢測的計算量
指定半徑範圍
:
minRadius:檢測的最小圓半徑,單位為畫素。
maxRadius:檢測的最大圓半徑,單位為畫素。
即函式只檢測半徑處於minRadius和maxRadius之間的圓,所以指定半徑範圍自然能夠影響計算量了。
指定邊緣閾值
霍夫圓檢測的基於內部邊緣檢測的結果;
而邊緣閾值影響邊緣檢測最終留下的邊緣畫素,即影響內部邊緣檢測的結果,
因而影響霍夫圓檢測的計算量;
累積器閾值
此閾值的高低便是提取圓的要求的高低,高閾值高要求高計算量,反之亦然。
此外
廣義霍夫變換
透過擴充,可以實現任意形狀的檢測,可以查閱其他相關的資料瞭解,這裡便不多說了。
作者:凌川江雪
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/506/viewspace-2821304/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 霍夫檢測圓:霍夫梯度法梯度
- 霍夫變換檢測圓
- 霍夫變換圓檢測原理及 OpenCV API 應用OpenCVAPI
- 【OpenCV】影像變換(四-2)霍夫變換圓檢測OpenCV
- OpenCV計算機視覺學習(13)——影像特徵點檢測(Harris角點檢測,sift演算法)OpenCV計算機視覺特徵演算法
- opencv——機器視覺檢測和計數OpenCV視覺
- 【OpenCV】影像變換(四-1)-霍夫變換線段檢測OpenCV
- Python計算機視覺——Harris角點檢測Python計算機視覺
- OpenCV-Python教程(9)(10)(11): 使用霍夫變換檢測直線 直方圖均衡化 輪廓檢測OpenCVPython直方圖
- 計算機視覺專案-人臉識別與檢測計算機視覺
- OpenCvSharp手繪ROI區域+模板匹配+霍夫變換檢測圓的邊界OpenCV
- [計算機視覺]人臉應用:人臉檢測、人臉對比、五官檢測、眨眼檢測、活體檢測、疲勞檢測計算機視覺
- 基於深度學習的計算機視覺應用之目標檢測深度學習計算機視覺
- opencv視訊人臉檢測OpenCV
- 特徵檢測特徵
- 計算機視覺筆記及資料整理(含影象分割、目標檢測)計算機視覺筆記
- 計算機視覺基本原理——RANSAC計算機視覺
- OpenCV成長之路(9):特徵點檢測與影象匹配OpenCV特徵
- OpenCV計算機視覺學習(5)——形態學處理(腐蝕膨脹,開閉運算,禮帽黑帽,邊緣檢測)OpenCV計算機視覺
- opencv學習之邊緣檢測OpenCV
- 機器視覺汽車配件檢測流程介紹視覺
- OpenCV檢測篇(一)——貓臉檢測OpenCV
- 視訊人臉檢測——OpenCV版(三)OpenCV
- 【機器視覺】機器人及視覺檢測系統在螺絲檢測包裝生產線上的應用視覺機器人
- 計算機視覺3-> yolov5目標檢測1 |從入門到出土計算機視覺YOLO
- 目標檢測和影像分類及其相關計算機視覺的影像分佈計算機視覺
- 人眼疲勞檢測之opencv人眼檢測xml說明OpenCVXML
- OpenCV計算機視覺程式設計攻略(第2版)程式碼OpenCV計算機視覺程式設計
- OPENCV例程2 :CANNY運算元邊緣檢測OpenCV
- 計算機視覺 | Matlab實現單目視覺里程計基於SURF特徵(程式碼類)計算機視覺Matlab特徵
- 視覺檢測-VisionPro工具入門視覺
- opencv關鍵點檢測OpenCV
- win10 檢視計算機有多少核Win10計算機
- 檢視本地計算機的私有/公有 IP 地址計算機
- OpenCV(iOS)的邊緣檢測和Canny運算元OpenCViOS
- 計算機視覺—人臉識別(Hog特徵+SVM分類器)(8)計算機視覺HOG特徵
- [機器視覺]halcon應用例項 邊緣檢測視覺
- 機器視覺檢測的速度六大影響因素視覺