计算高斯(Dx,dy)的第一个衍生物,而无需在MATLAB中使用梯度()



我启动了我的高斯作为 fspecial('gaussian', 4, 1),我知道 gradient()是获取第一个衍生物的一种非常方便的方法。无论如何,我是否可以在不使用gradient()的情况下计算第一个衍生物?我正在使用它来创建哈里斯角检测器,如教科书中的第一步所示:

  • 通过用高斯人的衍生物进行卷积,计算图像IX和IY的水平和垂直衍生物

如果您打算实现哈里斯角检测器,则根本不应使用gradient。传统上,您使用的是使用衍生物内核,然后使用此内核过滤图像。您可以使用各种内核,但是我在实践中看到的是使用中心差,以使水平内核dx[-1 0 1],而垂直内核dy是此或[-1;0;1]的转换。因此,您可以用这些内核过滤图像以获取响应IxIy,其中这些是图像的水平和垂直梯度,然后您对这些图像的平方版进行高斯平滑,Ix.^2Iy.^2,以及它们的产品Ix.*Iy。然后,您形成相关矩阵,找到决定因素和痕迹,然后确定角响应。超过该阈值的任何值都是潜在的角落。在您的问题中最初说明

因此,假设您的图像存储在im中,您只需:

im = double(im); % Cast to double precision to ensure accuracy
dx = [-1 0 1];
dy = dx.';
Ix = conv2(im, dx, 'same');
Iy = conv2(im, dy, 'same');

您将使用IxIy最终计算Harris角响应。如果您具有图像处理工具箱,建议您改用imfilter。它更快,使用Intel集成性能原始图(IIPP)。如果您需要有关如何正确计算它的更多信息,请在此处查看我以前的帖子:尝试找到/理解Harris Corners的正确实现

最新更新