首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Matlab中不使用梯度()计算高斯(dx,dy)的一阶导数

在Matlab中不使用梯度()计算高斯(dx,dy)的一阶导数
EN

Stack Overflow用户
提问于 2017-10-05 01:57:13
回答 1查看 1.9K关注 0票数 1

我开始用高斯函数作为fspecial('gaussian', 4, 1),我知道gradient()是获取一阶导数的一种非常方便的方法。我可以不用gradient()来计算第一个导数吗?我正在使用它创建Harris角探测器,如教科书中的第一步所示:

  • 用高斯导数计算图像Ix和Iy的水平导数和垂直导数
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-05 06:09:33

如果您的意图是实现哈里斯角探测器,那么您就不应该使用gradient。传统的做法是使用派生内核,然后使用这个内核过滤图像。您可以使用各种内核,但我在实践中看到的是使用一个居中的差异,即水平内核dx[-1 0 1],垂直内核dy是这个或[-1;0;1]的转置。因此,使用这些内核过滤图像,得到响应IxIy,其中这些是图像的水平和垂直梯度,然后对这些图像的平方版本执行高斯平滑:Ix.^2Iy.^2以及它们的产品Ix.*Iy。然后形成相关矩阵,找到行列式和跟踪,并确定角响应。任何超过此阈值的值都是潜在的角。对导数图像执行高斯平滑处理,可以有效地过滤原始图像,正如您在问题中所述的那样,用高斯导数对原始图像进行滤波。

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

代码语言:javascript
复制
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来最终计算哈里斯角的响应。如果您有图像处理工具箱,我建议您改用imfilter。它速度更快,并且使用了英特尔综合性能奖(IIPP)。如果您想了解更多关于如何正确计算它的信息,请查看我前面的文章:努力找到/理解哈里斯角的正确实施

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46576734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档