您好,登錄后才能下訂單哦!
本篇內容介紹了“Python邊緣檢測之prewitt,sobel和laplace算子怎么寫”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
ndimage中提供了卷積算法,并且建立在卷積之上,提供了三種邊緣檢測的濾波方案:prewitt, sobel以及laplace。
在convolve中列舉了一個用于邊緣檢測的濾波算子,統一維度后,其x xx和y yy向的梯度算子分別寫為
此即prewitt
算子。
Sobel算子為Prewitt增添了中心值的權重,記為
這兩種邊緣檢測算子,均適用于某一個方向,ndimage還提供了lapace算子,其本質是二階微分算子,其3×3卷積模板可表示為
ndimage
封裝的這三種卷積濾波算法,定義如下
prewitt(input, axis=-1, output=None, mode='reflect', cval=0.0) sobel(input, axis=-1, output=None, mode='reflect', cval=0.0) laplace(input, output=None, mode='reflect', cval=0.0)
其中,mode
表示卷積過程中對邊緣效應的彌補方案,設待濾波數組為a b c d
,則在不同的模式下,對邊緣進行如下填充
左側填充 | 數據 | 右側填充 | |
---|---|---|---|
reflect | d c b a | a b c d | d c b a |
constant | k k k k | a b c d | k k k k |
nearest | a a a a | a b c d | d d d d |
mirror | d c b | a b c d | c b a |
wrap | a b c d | a b c d | a b c d |
接下來測試一下
from scipy.ndimage import prewitt, sobel, laplace from scipy.misc import ascent import matplotlib.pyplot as plt img = ascent() dct = { "origin" : lambda img:img, "prewitt" : prewitt, "sobel" : sobel, "laplace" : lambda img : abs(laplace(img)) } fig = plt.figure() for i,key in enumerate(dct): ax = fig.add_subplot(2,2,i+1) ax.imshow(dct[key](img), cmap=plt.cm.gray) plt.ylabel(key) plt.show()
為了看上去更加簡潔,代碼中將原圖、prewitt濾波、sobel濾波以及laplace濾波封裝在了一個字典中。其中origin
表示原始圖像,對應的函數是一個lambda
表達式。
在繪圖時,通過將cmap
映射到plt.cm.gray
,使得繪圖之后表現為灰度圖像。
效果如下
“Python邊緣檢測之prewitt,sobel和laplace算子怎么寫”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。