【问题标题】:Edge detection using matlab normxcorr2使用 matlab normxcorr2 进行边缘检测
【发布时间】:2026-01-16 06:00:01
【问题描述】:

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

所以,我没有使用 imgradientxy 来获取 x 和 y 的梯度,而是尝试使用 sobel 滤波器,直接使用 normxcorr2 将滤波器与图像相关联。但是,结果看起来完全不同,如下所示。

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

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

我的理解有什么问题?

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

Image 1: Sobel filter correlated with the image using normxcorr2

使用 imgradientxy 在 x 上渐变:

Image 2: Gradient on x using imgradientxy

【问题讨论】:

  • 尝试将图像范围标准化为 [0, 1]。

标签: matlab image-processing computer-vision


【解决方案1】:

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

normxcorr2(I,template) 对模板和模板下的区域进行归一化,然后只计算相关性。

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

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

【讨论】: