来自fspecial的sobel面罩是否找到水平或垂直边缘?

时间:2013-03-16 13:50:25

标签: matlab image-processing edge-detection

所以我在Matlab中做了类似的事情:

s = fspecial('sobel');
imshow(conv2(image, s));

在matlab中,当我使用fspecial制作带有conv2的sobel面具并在图像上使用{{1}}的面具时,复杂图像中的边缘是水平或垂直边缘或者它已经添加了水平和垂直边缘?对角线边缘怎么样?

1 个答案:

答案 0 :(得分:5)

fspecial的文档告诉我们

  

h = fspecial('sobel')返回一个3乘3滤波器h(如下所示),通过近似垂直渐变使用平滑效果强调水平边缘。如果您需要强调垂直边缘,请转置滤镜

要转置过滤器,请使用

hvert = ( fspecial('sobel') )'

Sobel filter基本上是一个平滑的导数运算符。通过检测水平和垂直边缘,您基本上可以检索到图像渐变的Sobel近似值,这也可以为您提供对角线边缘。

要实际强调边缘而不用担心它们的方向,请使用此渐变的大小:

hy = fspecial('sobel');
hx = hy';
gx = imfilter(image, hx); % x component of Sobel gradient
gy = imfilter(image, hy); % y component 

gmag = hypot(gx,gy); % magnitude of Sobel gradient