matlab梯度检测,Matlab:关于梯度的一阶导数边缘检测
這很簡單 . 您關心的是使用蒙版執行圖像過濾,其中每個蒙版都是衍生過濾器 . 通過這種方法,knedlsepp是正確的,因為這樣做只會找到關于給定方向的偏導數 . 您可以指定一個遮罩來檢測水平邊,另一個遮罩指示垂直邊 .
Gx 代表 vertical 邊緣響應,使用垂直微分濾波器, Gy 代表 horizontal 邊緣響應,使用水平微分濾波器 . 要獲得響應,您可以拍攝圖像并使用任何蒙版的2D卷積對其進行過濾 .
接下來,您將兩個響應一起 combine 以獲得總體幅度響應 . 但是, edge 會在引擎蓋下執行大量噪聲清理,并執行閾值處理以獲得最終響應 . 簡單地計算幅度并不是 edge 的全部故事 .
在任何情況下,為了檢測水平邊緣,Prewitt掩模看起來像這樣:
Gy_prewitt =
-1 -1 -1
0 0 0
1 1 1
使用上述掩碼執行過濾可找到水平邊緣響應,或 Gy .
要查找垂直邊緣響應或 Gx ,您只需 transpose 上面的掩碼并找到濾波器響應,因此:
Gx_prewitt =
-1 0 1
-1 0 1
-1 0 1
Sobel面罩與Prewitt面罩略有不同 . 掩模的中心行(對于垂直)或列(對于水平)的中心行更夸張,并且加權兩倍 . 水平面具是:
Gy_sobel =
-1 -2 -1
0 0 0
1 2 1
同樣,Sobel的垂直掩模定義為:
Gx_sobel =
-1 0 1
-2 0 2
-1 0 1
值得注意的是,掩碼 equals to zero 中所有系數的總和,實際上是實際看到的任何邊緣檢測掩碼的屬性 .
現在,要確定整體邊緣響應,您可以對每個水平, Gy 和垂直 Gx 進行過濾響應,并對每個相應像素應用幅度運算:
out = sqrt(Gx.^2 + Gy.^2);
如果你想更直觀地解釋為什么Sobel面具與Prewitt略有不同,我建議你看一下這篇文章 . 如果你不能使用內置的卷積方法,它提供了一個非常好的解釋以及如何自己實現過濾操作的好圖表:
這是圖表:
基本上,對于要在圖像中過濾的每個像素,提取3 x 3鄰域并在鄰域中的像素和所需的過濾器之間執行加權和 . 在這種情況下,這將是Sobel垂直邊緣檢測器 .
祝好運!
總結
以上是生活随笔為你收集整理的matlab梯度检测,Matlab:关于梯度的一阶导数边缘检测的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab fspeical,matl
- 下一篇: webpack 入口文件 php,web