使用matlab normxcorr2进行边缘检测

时间:2016-07-23 04:38:33

标签: matlab image-processing computer-vision

我知道在x上找到梯度的sobel滤波器是1/8。* [-1 0 1; -2 0 2; -1 0 1]。

所以,我没有使用imgradientxy来获得x和y的渐变,而是尝试直接使用sobelx滤镜将滤镜与图像相关联。但是,结果看起来完全不同,如下所示。

注意:我首先将原始图像标准化为范围[-1,1]而不是[0,255]

我知道normxcorr2正在将内核与图像相关联,如果我如上所述在x上使用sobel滤镜,那么它应该给我类似于使用imgradientxy的结果。

我的理解有什么问题?

Sobel滤波器使用normxcorr2与图像相关:

Image 1: Sobel filter correlated with the image using normxcorr2

使用imgradientxy对x进行渐变:

Image 2: Gradient on x using imgradientxy

1 个答案:

答案 0 :(得分:1)

imgradientxy(I)使用Sobel滤波器的卷积计算X和Y方向的梯度,而不对内核运行的每个位置进行规范化。

normxcorr2(I,模板)规范化模板和模板下的区域,并且仅计算相关性。

因此,如果您想实现imgradientxy,您可以使用以下代码

sobelX = [-1 0 1;-2 0 2;-1 0 1];
gradX = conv2(double(I),sobelX,'same');