根據運行的環境,操作系統可以分為桌面操作系統,手機操作系統,服務器操作系統,嵌入式操作系統等。 在: 中,我們主要討論使用sobel算子和Laplace變換進行邊緣檢測. 其中,主要使用對梯度大小進行閾值化以獲得二值邊緣圖像的方法. 在圖像中,邊緣通常包含重要的視覺信息,因為它們勾勒出圖像元素的輪廓. 但是,僅使用簡單的二進制邊緣圖像有兩個主要缺點: 使用此方法檢測到的邊緣太厚,這意味著很難準確定位對象. 很難找到這樣的閾值,該閾值可以檢測所有足夠低的重要邊緣,并且同時不包含太多次的邊緣. 這兩個問題正是本節中使用的Canny算法試圖解決的問題. Canny運算符通常基于sobel運算符(盡管也可以使用其他梯度運算符),其核心思想是使用兩個不同的閾值來確定哪些點屬于輪廓,以便將兩個閾值分別劃分獲得兩個邊緣貼圖. 此后,Canny算法將兩個邊緣貼圖組合在一起以生成“最佳”輪廓圖. 如果存在連續的邊緣點,則將低閾值圖像中的邊緣點與高閾值圖像中的邊緣相連,然后保留低閾值圖像中的邊緣點. 這種使用雙閾值獲取二進制圖像的策略稱為磁滯閾值. Canny算法對選擇兩個閾值有一定要求. 對于較低的閾值,它應包括被認為屬于明顯圖像輪廓的所有邊緣像素. 較高閾值的作用應該是定義屬于所有重要輪廓的邊緣,并且應排除所有異常值. 在OpenCV中,實現Canny算法的函數是cv :: Canny. 該函數的調用方法如下:
主要代碼如下,直接將其添加到主要功能中
效果: 以下是Sobel運算符的輸出效果: 與Sobel運算符相比canny算子邊緣檢測原理,Canny運算符可以獲得更細的邊緣,因為Canny算法使用其他策略來提高圖像質量. 在使用滯后閾值之前canny算子邊緣檢測原理,應去除梯度大小不是最大值的所有邊緣點. 這樣,漸變的方向始終垂直于邊緣,因此該方向上的局部漸變最大值對應于輪廓強度最高的點. Canny算法適用于不同場合. 其參數允許根據不同實現的特定要求進行調整,以識別不同的邊緣特征. 此外,Canny算法包含許多可調參數,這將影響算法的計算時間和有效性. 高斯濾波器的大小: 第一步中使用的平滑濾波器將直接影響Canny算法的結果. 較小的濾鏡也會產生較少的模糊,因此可以檢測到變化較小的細線. 較大的濾鏡也會產生更多的模糊效果. 將圖像的較大區域繪制為特定點的顏色值. 這樣的結果對于檢測較大的平滑邊緣(例如彩虹邊緣)更有用. 閾值: 使用兩個閾值比使用一個閾值更靈活,但是閾值仍然存在一些常見問題. 如果閾值設置得太高,可能會丟失重要信息;如果閾值太低,則分支信息將被認為是重要的. 很難給出適用于所有圖像的通用閾值. 當前沒有經過驗證的實現方法.
|
溫馨提示:喜歡本站的話,請收藏一下本站!