matlab梯度检测,matlab:关于梯度的一阶导数边缘检测 -ag凯发k8国际
这很简单 . 您关心的是使用蒙版执行图像过滤,其中每个蒙版都是衍生过滤器 . 通过这种方法,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垂直边缘检测器 .
祝好运!
总结
以上是ag凯发k8国际为你收集整理的matlab梯度检测,matlab:关于梯度的一阶导数边缘检测的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: matlab fspeical,matl
- 下一篇: