您好,登錄后才能下訂單哦!
本篇內容主要講解“怎么使用python進行圖像邊緣檢測”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么使用python進行圖像邊緣檢測”吧!
圖像邊緣是指圖像中表達物體的周圍像素灰度發生階躍變化的那些像素集合。
圖像中兩個灰度不同的相鄰區域的交界處,必然存在灰度的快速過渡或稱為跳變,它們與圖像中各區域邊緣的位置相對應,邊緣蘊含了豐富的內在信息,如方向、階躍性質、形狀等,沿邊緣走向的像素變化平緩,而垂直于邊緣方向的像素變化劇烈。
圖像的大部分信息都集中在邊緣部分,邊緣確定后實際上就實現了不同區域的分割。
求取邊緣往往要借助一些邊緣檢測算子,這些算子有的是基于一階導數的算子,有的是二階微分算子
Roberts算子、Prewitt算子、Sobel算子它們包含x、y兩個方向的模板,每種模板只對相應的方向敏感,對該方向上的方向有明顯的輸出,而對其他方向的變化響應不大。以下是一些常見的一階微分算子及其特點:
算子名稱 | 特點 |
---|---|
簡單微分算子 | 對噪聲敏感,對噪聲具有一定放大作用 |
Roberts算子 | 去噪聲作用小,邊緣檢測能力優于簡單微分算子 |
Prewitt算子 | 能夠有效抑制噪聲的影響,同時能夠檢測邊緣點 |
Sobel算子 | 得到的邊緣較寬,噪聲抑制效果更強 |
Canny算子 | 檢測的邊緣位置準確且邊緣較窄 |
Sobel算子檢測到的邊緣相比于Roberts算子的檢測結果要連續一些,并且對于圖像的細節檢測能力更好,且Sobel邊緣檢測器引入了局部平均,對噪聲的影響比較小,效果較好。
Canny得到的檢測結果優于Roberts、Sobel算子的檢測結果,邊緣細節更豐富,邊緣定位準確連續性較好,虛假邊緣少且邊緣均具有單像素寬度。
其算法實現具體分為以下4步:
用高斯濾波器平滑圖像
用一階偏導的有限差分來計算梯度的幅度和方向
對梯度幅值進行非極大值抑制
用雙閾值算法檢測和連接邊緣
常見的二階微分算子包括拉普拉斯算子,它是一種二階導師算子,對圖像中的噪聲相當敏感,而且檢測出的邊緣常常是雙像素寬,沒有方向信息,所以拉普拉斯算子很少直接用于檢測邊緣,而主要用于已知邊緣像素后,確定該像素是在圖像的暗區還是明區。另外,一階差分算子會在較寬范圍內形成較大的梯度值,因此不能準確定位,而利用二階差分算子的過零點可以精確定位邊緣。
Laplace算子的噪聲明顯比Sobel算子的噪聲大,但其邊緣比Sobel要細很多,且Laplace變換作為二階微分算子對噪聲特別敏感,并且會產生雙邊沿,不能檢測邊緣方向。
Prewitt 算子代碼:
Roberts_kernel_x = np.array([[-1, 0], [0, 1]], dtype=int) Roberts_kernel_y = np.array([[0, -1], [1, 0]], dtype=int)
Prewitt 算子代碼:
Roberts_kernel_x = np.array([[-1, 0], [0, 1]], dtype=int) Roberts_kernel_y = np.array([[0, -1], [1, 0]], dtype=int)
Sobel函數:
edges = cv2.Sobel(img, -1, 1, 1)
Canny函數:
edges = cv2.Canny(img, 5, 100)
Laplacian 函數:
edges = cv2.Laplacian(img, -1)
到此,相信大家對“怎么使用python進行圖像邊緣檢測”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。